From 99e0d3d361dd95a3fea6c37dae5f9aaf9b5f80d9 Mon Sep 17 00:00:00 2001 From: zarzet Date: Tue, 3 Feb 2026 23:10:19 +0700 Subject: [PATCH] refactor: remove cloud save feature entirely This feature was deemed unnecessary and was adding complexity to the app. Removed: - lib/services/cloud_upload_service.dart - lib/providers/upload_queue_provider.dart - lib/screens/settings/cloud_settings_page.dart - lib/screens/settings/widgets/ (cloud status hero card) - All cloud* settings from AppSettings model - All cloud-related localization keys (~70 keys) - Cloud settings from settings_provider.dart - Cloud menu item from settings_tab.dart - Cloud upload trigger from download_queue_provider.dart Dependencies removed: - webdav_client: ^1.2.2 - dartssh2: ^2.13.0 CHANGELOG updated to remove all cloud save references. --- CHANGELOG.md | 22 +- lib/l10n/app_localizations.dart | 547 +--------- lib/l10n/app_localizations_de.dart | 551 ++-------- lib/l10n/app_localizations_en.dart | 506 ++-------- lib/l10n/app_localizations_es.dart | 808 ++++----------- lib/l10n/app_localizations_fr.dart | 506 ++-------- lib/l10n/app_localizations_hi.dart | 506 ++-------- lib/l10n/app_localizations_id.dart | 545 ++-------- lib/l10n/app_localizations_ja.dart | 464 ++------- lib/l10n/app_localizations_ko.dart | 506 ++-------- lib/l10n/app_localizations_nl.dart | 506 ++-------- lib/l10n/app_localizations_pt.dart | 799 ++++----------- lib/l10n/app_localizations_ru.dart | 584 +++-------- lib/l10n/app_localizations_tr.dart | 551 ++-------- lib/l10n/app_localizations_zh.dart | 948 +++++------------- lib/l10n/arb/app_en.arb | 154 +-- lib/models/settings.dart | 34 - lib/models/settings.g.dart | 15 - lib/providers/download_queue_provider.dart | 37 - lib/providers/settings_provider.dart | 96 -- lib/providers/upload_queue_provider.dart | 302 ------ lib/screens/settings/cloud_settings_page.dart | 833 --------------- .../settings/library_settings_page.dart | 319 ++++-- lib/screens/settings/settings_tab.dart | 7 - lib/services/cloud_upload_service.dart | 718 ------------- pubspec.lock | 40 - pubspec.yaml | 2 - 27 files changed, 1818 insertions(+), 9088 deletions(-) delete mode 100644 lib/providers/upload_queue_provider.dart delete mode 100644 lib/screens/settings/cloud_settings_page.dart delete mode 100644 lib/services/cloud_upload_service.dart diff --git a/CHANGELOG.md b/CHANGELOG.md index b6be7052..ceb589f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,30 +53,16 @@ - Shows "Already in Library" instead of "Download complete" - Skips adding duplicate entry if track already in download history - Reads actual quality from existing file (bit depth, sample rate) -- **Cloud Upload with WebDAV & SFTP**: Automatically upload downloaded files to your NAS or cloud storage - - Full WebDAV support (Synology DSM, Nextcloud, QNAP, ownCloud) - - Full SFTP support (any SSH server with SFTP enabled) - - Connection test with detailed error messages - - Upload queue with progress tracking - - Retry failed uploads and clear completed items - - Recent uploads list in Cloud Save settings -- **SFTP Host Key Security (TOFU)**: Verify host keys on connect and block mismatches -- **Reset SFTP Host Keys**: Clear the saved host key for the current server or all servers ### Dependencies -- Added `webdav_client: ^1.2.2` for WebDAV protocol support -- Added `dartssh2: ^2.13.0` for SFTP protocol support -- Added `flutter_secure_storage: ^9.2.2` for storing cloud passwords securely +- Added `flutter_secure_storage: ^9.2.2` for storing secrets securely ### Changed -- Cloud upload passwords are now stored in secure storage instead of SharedPreferences - Spotify client secrets are now stored in secure storage instead of SharedPreferences - Extension HTTP sandbox now enforces HTTPS and blocks private IPs resolved via DNS - Extension file sandbox now validates paths using boundary-safe checks -- WebDAV now defaults to HTTPS; insecure HTTP requires explicit opt-in -- WebDAV error messages are now localized in the UI - **Albums grid now unified**: Downloaded and local albums render in a single grid (no layout gaps) - **LocalAlbumScreen UI consistency**: Track items, disc separators, and selection bottom bar now match DownloadedAlbumScreen @@ -107,12 +93,6 @@ - Choose between "WiFi + Mobile Data" or "WiFi Only" - Downloads automatically pause on mobile data and resume on WiFi -- **Cloud Save Settings**: New settings page for cloud/NAS upload configuration - - Settings > Cloud Save - configure auto-upload to NAS or cloud storage - - Support for WebDAV (Synology, Nextcloud, QNAP) and SFTP providers - - Server URL, username, password, and remote path configuration - - Test connection button (actual upload implementation coming in v3.4.0) - ### Dependencies - Added `connectivity_plus: ^6.0.3` for network state detection diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index c74a0feb..5f9635b9 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -73,8 +73,7 @@ import 'app_localizations_zh.dart'; /// be consistent with the languages listed in the AppLocalizations.supportedLocales /// property. abstract class AppLocalizations { - AppLocalizations(String locale) - : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); final String localeName; @@ -82,8 +81,7 @@ abstract class AppLocalizations { return Localizations.of(context, AppLocalizations)!; } - static const LocalizationsDelegate delegate = - _AppLocalizationsDelegate(); + static const LocalizationsDelegate delegate = _AppLocalizationsDelegate(); /// A list of this localizations delegate along with the default localizations /// delegates. @@ -95,13 +93,12 @@ abstract class AppLocalizations { /// Additional delegates can be added by appending to this list in /// MaterialApp. This list does not have to be used at all if a custom list /// of delegates is preferred or required. - static const List> localizationsDelegates = - >[ - delegate, - GlobalMaterialLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ]; + static const List> localizationsDelegates = >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; /// A list of this localizations delegate's supported locales. static const List supportedLocales = [ @@ -121,7 +118,7 @@ abstract class AppLocalizations { Locale('tr'), Locale('zh'), Locale('zh', 'CN'), - Locale('zh', 'TW'), + Locale('zh', 'TW') ]; /// App name - DO NOT TRANSLATE @@ -3718,282 +3715,6 @@ abstract class AppLocalizations { /// **'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'** String get settingsDownloadNetworkSubtitle; - /// Settings menu item for cloud upload - /// - /// In en, this message translates to: - /// **'Cloud Save'** - String get settingsCloudSave; - - /// Subtitle for cloud save menu item - /// - /// In en, this message translates to: - /// **'Auto-upload to NAS or cloud storage'** - String get settingsCloudSaveSubtitle; - - /// Cloud settings page title - /// - /// In en, this message translates to: - /// **'Cloud Save'** - String get cloudSettingsTitle; - - /// General section header - /// - /// In en, this message translates to: - /// **'General'** - String get cloudSettingsSectionGeneral; - - /// Toggle to enable cloud upload - /// - /// In en, this message translates to: - /// **'Enable Cloud Upload'** - String get cloudSettingsEnable; - - /// Subtitle for enable toggle - /// - /// In en, this message translates to: - /// **'Automatically upload files after download completes'** - String get cloudSettingsEnableSubtitle; - - /// Provider section header - /// - /// In en, this message translates to: - /// **'Cloud Provider'** - String get cloudSettingsSectionProvider; - - /// Provider selection setting - /// - /// In en, this message translates to: - /// **'Provider'** - String get cloudSettingsProvider; - - /// Provider picker description - /// - /// In en, this message translates to: - /// **'Select where to upload your downloaded files'** - String get cloudSettingsProviderDescription; - - /// Server config section header - /// - /// In en, this message translates to: - /// **'Server Configuration'** - String get cloudSettingsSectionServer; - - /// Server URL field label - /// - /// In en, this message translates to: - /// **'Server URL'** - String get cloudSettingsServerUrl; - - /// Username field label - /// - /// In en, this message translates to: - /// **'Username'** - String get cloudSettingsUsername; - - /// Password field label - /// - /// In en, this message translates to: - /// **'Password'** - String get cloudSettingsPassword; - - /// Remote path field label - /// - /// In en, this message translates to: - /// **'Remote Folder Path'** - String get cloudSettingsRemotePath; - - /// Test connection button - /// - /// In en, this message translates to: - /// **'Test Connection'** - String get cloudSettingsTestConnection; - - /// Info card explaining the feature - /// - /// In en, this message translates to: - /// **'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'** - String get cloudSettingsInfo; - - /// Section header for upload queue status - /// - /// In en, this message translates to: - /// **'Upload Queue'** - String get cloudSettingsUploadQueue; - - /// Button to retry failed uploads - /// - /// In en, this message translates to: - /// **'Retry Failed'** - String get cloudSettingsRetryFailed; - - /// Button to clear completed uploads - /// - /// In en, this message translates to: - /// **'Clear Done'** - String get cloudSettingsClearDone; - - /// Section header for recent uploads list - /// - /// In en, this message translates to: - /// **'Recent Uploads'** - String get cloudSettingsRecentUploads; - - /// Button/title to reset SFTP host key for current server - /// - /// In en, this message translates to: - /// **'Reset SFTP Host Key'** - String get cloudSettingsResetSftpHostKey; - - /// Button/title to reset all saved SFTP host keys - /// - /// In en, this message translates to: - /// **'Reset All SFTP Host Keys'** - String get cloudSettingsResetAllSftpHostKeys; - - /// Dialog message for resetting SFTP host key - /// - /// In en, this message translates to: - /// **'This will forget the saved host key for this server. The next connection will save a new key.'** - String get cloudSettingsResetSftpHostKeyMessage; - - /// Dialog message for resetting all SFTP host keys - /// - /// In en, this message translates to: - /// **'This will forget all saved SFTP host keys. Next connections will save new keys.'** - String get cloudSettingsResetAllSftpHostKeysMessage; - - /// Dialog confirm button for reset action - /// - /// In en, this message translates to: - /// **'Reset'** - String get cloudSettingsResetConfirm; - - /// Dialog confirm button for reset all action - /// - /// In en, this message translates to: - /// **'Reset All'** - String get cloudSettingsResetAllConfirm; - - /// Validation message when server URL is missing - /// - /// In en, this message translates to: - /// **'Server URL is required'** - String get cloudSettingsServerUrlRequired; - - /// Snackbar after resetting SFTP host key - /// - /// In en, this message translates to: - /// **'SFTP host key reset. Connect again to save a new key.'** - String get cloudSettingsResetSftpHostKeySuccess; - - /// Snackbar when no host key exists for the current server - /// - /// In en, this message translates to: - /// **'No stored host key found for this server.'** - String get cloudSettingsResetSftpHostKeyNotFound; - - /// Snackbar after clearing all SFTP host keys - /// - /// In en, this message translates to: - /// **'{count, plural, =1{Cleared 1 SFTP host key.} other{Cleared {count} SFTP host keys.}}'** - String cloudSettingsResetAllSftpHostKeysCleared(num count); - - /// Snackbar when no SFTP host keys exist - /// - /// In en, this message translates to: - /// **'No stored SFTP host keys found.'** - String get cloudSettingsResetAllSftpHostKeysNone; - - /// Toggle/title for allowing insecure HTTP WebDAV connections - /// - /// In en, this message translates to: - /// **'Allow HTTP (Insecure)'** - String get cloudSettingsAllowHttpTitle; - - /// Subtitle warning for allowing insecure HTTP - /// - /// In en, this message translates to: - /// **'Sends credentials without TLS. Not recommended.'** - String get cloudSettingsAllowHttpSubtitle; - - /// Dialog warning message for enabling insecure HTTP - /// - /// In en, this message translates to: - /// **'HTTP does not encrypt your credentials. Only enable if you trust the network.'** - String get cloudSettingsAllowHttpMessage; - - /// Dialog confirm button for enabling insecure HTTP - /// - /// In en, this message translates to: - /// **'Allow HTTP'** - String get cloudSettingsAllowHttpConfirm; - - /// WebDAV error when URL scheme is missing - /// - /// In en, this message translates to: - /// **'Invalid URL: scheme is required'** - String get webdavErrorInvalidScheme; - - /// WebDAV error when HTTPS is required - /// - /// In en, this message translates to: - /// **'WebDAV URL must use https'** - String get webdavErrorHttpsRequired; - - /// WebDAV error when hostname is missing - /// - /// In en, this message translates to: - /// **'Invalid URL: hostname is required'** - String get webdavErrorInvalidHost; - - /// WebDAV error when authentication fails - /// - /// In en, this message translates to: - /// **'Authentication failed. Check username and password.'** - String get webdavErrorAuthFailed; - - /// WebDAV error when access is forbidden - /// - /// In en, this message translates to: - /// **'Access denied. Check permissions on the server.'** - String get webdavErrorForbidden; - - /// WebDAV error when path is not found - /// - /// In en, this message translates to: - /// **'Server path not found. Check the URL.'** - String get webdavErrorNotFound; - - /// WebDAV error when connection fails - /// - /// In en, this message translates to: - /// **'Cannot connect to server. Check URL and network.'** - String get webdavErrorConnectionFailed; - - /// WebDAV error for TLS issues - /// - /// In en, this message translates to: - /// **'SSL/TLS error. Server certificate may be invalid.'** - String get webdavErrorTlsError; - - /// WebDAV error when connection times out - /// - /// In en, this message translates to: - /// **'Connection timed out. Server may be unreachable.'** - String get webdavErrorTimeout; - - /// WebDAV error when server storage is full - /// - /// In en, this message translates to: - /// **'Insufficient storage on server.'** - String get webdavErrorInsufficientStorage; - - /// WebDAV fallback error message - /// - /// In en, this message translates to: - /// **'Upload failed. Please try again.'** - String get webdavErrorUnknown; - /// Empty queue state title /// /// In en, this message translates to: @@ -4689,154 +4410,9 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'{count, plural, =1{1 hour ago} other{{count} hours ago}}'** String timeHoursAgo(int count); - - /// WebDAV provider option with examples - /// - /// In en, this message translates to: - /// **'WebDAV (Synology, Nextcloud, QNAP)'** - String get cloudProviderWebdav; - - /// SFTP provider option - /// - /// In en, this message translates to: - /// **'SFTP (SSH File Transfer)'** - String get cloudProviderSftp; - - /// No cloud provider selected - /// - /// In en, this message translates to: - /// **'Not Configured'** - String get cloudProviderNotConfigured; - - /// WebDAV provider title in picker - /// - /// In en, this message translates to: - /// **'WebDAV'** - String get cloudProviderWebdavTitle; - - /// WebDAV provider subtitle in picker - /// - /// In en, this message translates to: - /// **'Synology, Nextcloud, QNAP, ownCloud'** - String get cloudProviderWebdavSubtitle; - - /// SFTP provider title in picker - /// - /// In en, this message translates to: - /// **'SFTP'** - String get cloudProviderSftpTitle; - - /// SFTP provider subtitle in picker - /// - /// In en, this message translates to: - /// **'SSH File Transfer Protocol'** - String get cloudProviderSftpSubtitle; - - /// Error when testing connection without server URL - /// - /// In en, this message translates to: - /// **'Server URL is required'** - String get cloudTestErrorServerUrlRequired; - - /// Error when testing connection without credentials - /// - /// In en, this message translates to: - /// **'Username and password are required'** - String get cloudTestErrorCredentialsRequired; - - /// Success message for WebDAV connection test - /// - /// In en, this message translates to: - /// **'Connected to WebDAV server'** - String get cloudTestSuccessWebdav; - - /// Success message for SFTP connection test - /// - /// In en, this message translates to: - /// **'Connected to SFTP server'** - String get cloudTestSuccessSftp; - - /// Error when testing connection without provider - /// - /// In en, this message translates to: - /// **'No provider selected'** - String get cloudTestErrorNoProvider; - - /// Connection test success message - /// - /// In en, this message translates to: - /// **'Success: {message}'** - String connectionTestSuccess(String message); - - /// Upload queue status - waiting - /// - /// In en, this message translates to: - /// **'Pending'** - String get uploadStatusPending; - - /// Upload queue status - in progress - /// - /// In en, this message translates to: - /// **'Uploading'** - String get uploadStatusUploading; - - /// Upload queue status - completed - /// - /// In en, this message translates to: - /// **'Done'** - String get uploadStatusDone; - - /// Upload queue status - error - /// - /// In en, this message translates to: - /// **'Failed'** - String get uploadStatusFailed; - - /// Status when cloud save is disabled - /// - /// In en, this message translates to: - /// **'Cloud Save Off'** - String get cloudStatusDisabled; - - /// Subtitle when cloud save is disabled - /// - /// In en, this message translates to: - /// **'Enable to auto-upload tracks'** - String get cloudStatusDisabledSubtitle; - - /// Status when no provider selected - /// - /// In en, this message translates to: - /// **'Select Provider'** - String get cloudStatusNoProvider; - - /// Subtitle when no provider selected - /// - /// In en, this message translates to: - /// **'Choose a cloud service'** - String get cloudStatusNoProviderSubtitle; - - /// Status when settings missing - /// - /// In en, this message translates to: - /// **'Setup Required'** - String get cloudStatusNotConfigured; - - /// Subtitle when settings missing - /// - /// In en, this message translates to: - /// **'Configure your server details'** - String get cloudStatusNotConfiguredSubtitle; - - /// Status when cloud save is active - /// - /// In en, this message translates to: - /// **'Connected'** - String get cloudStatusActive; } -class _AppLocalizationsDelegate - extends LocalizationsDelegate { +class _AppLocalizationsDelegate extends LocalizationsDelegate { const _AppLocalizationsDelegate(); @override @@ -4845,91 +4421,58 @@ class _AppLocalizationsDelegate } @override - bool isSupported(Locale locale) => [ - 'de', - 'en', - 'es', - 'fr', - 'hi', - 'id', - 'ja', - 'ko', - 'nl', - 'pt', - 'ru', - 'tr', - 'zh', - ].contains(locale.languageCode); + bool isSupported(Locale locale) => ['de', 'en', 'es', 'fr', 'hi', 'id', 'ja', 'ko', 'nl', 'pt', 'ru', 'tr', 'zh'].contains(locale.languageCode); @override bool shouldReload(_AppLocalizationsDelegate old) => false; } AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when language+country codes are specified. switch (locale.languageCode) { - case 'es': - { - switch (locale.countryCode) { - case 'ES': - return AppLocalizationsEsEs(); - } - break; - } - case 'pt': - { - switch (locale.countryCode) { - case 'PT': - return AppLocalizationsPtPt(); - } - break; - } - case 'zh': - { - switch (locale.countryCode) { - case 'CN': - return AppLocalizationsZhCn(); - case 'TW': - return AppLocalizationsZhTw(); - } - break; - } + case 'es': { + switch (locale.countryCode) { + case 'ES': return AppLocalizationsEsEs(); + } + break; + } + case 'pt': { + switch (locale.countryCode) { + case 'PT': return AppLocalizationsPtPt(); + } + break; + } + case 'zh': { + switch (locale.countryCode) { + case 'CN': return AppLocalizationsZhCn(); +case 'TW': return AppLocalizationsZhTw(); + } + break; + } } // Lookup logic when only language code is specified. switch (locale.languageCode) { - case 'de': - return AppLocalizationsDe(); - case 'en': - return AppLocalizationsEn(); - case 'es': - return AppLocalizationsEs(); - case 'fr': - return AppLocalizationsFr(); - case 'hi': - return AppLocalizationsHi(); - case 'id': - return AppLocalizationsId(); - case 'ja': - return AppLocalizationsJa(); - case 'ko': - return AppLocalizationsKo(); - case 'nl': - return AppLocalizationsNl(); - case 'pt': - return AppLocalizationsPt(); - case 'ru': - return AppLocalizationsRu(); - case 'tr': - return AppLocalizationsTr(); - case 'zh': - return AppLocalizationsZh(); + case 'de': return AppLocalizationsDe(); + case 'en': return AppLocalizationsEn(); + case 'es': return AppLocalizationsEs(); + case 'fr': return AppLocalizationsFr(); + case 'hi': return AppLocalizationsHi(); + case 'id': return AppLocalizationsId(); + case 'ja': return AppLocalizationsJa(); + case 'ko': return AppLocalizationsKo(); + case 'nl': return AppLocalizationsNl(); + case 'pt': return AppLocalizationsPt(); + case 'ru': return AppLocalizationsRu(); + case 'tr': return AppLocalizationsTr(); + case 'zh': return AppLocalizationsZh(); } throw FlutterError( 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' 'an issue with the localizations generation tool. Please file an issue ' 'on GitHub with a reproducible sample app and the gen-l10n configuration ' - 'that was used.', + 'that was used.' ); } diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 4f0d970a..cb6f8ab8 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -12,8 +12,7 @@ class AppLocalizationsDe extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Laden Sie Spotify-Titel in verlustfreier Qualität von Tidal, Qobuz und Amazon Music herunter.'; + String get appDescription => 'Laden Sie Spotify-Titel in verlustfreier Qualität von Tidal, Qobuz und Amazon Music herunter.'; @override String get navHome => 'Startseite'; @@ -45,8 +44,7 @@ class AppLocalizationsDe extends AppLocalizations { String get homeSubtitle => 'Spotify-Link einfügen oder nach Namen suchen'; @override - String get homeSupports => - 'Unterstützt: Titel, Album, Playlist, Künstler-URLs'; + String get homeSupports => 'Unterstützt: Titel, Album, Playlist, Künstler-URLs'; @override String get homeRecent => 'Zuletzt'; @@ -97,22 +95,19 @@ class AppLocalizationsDe extends AppLocalizations { String get historyNoDownloads => 'Kein Download-Verlauf'; @override - String get historyNoDownloadsSubtitle => - 'Heruntergeladene Titel werden hier angezeigt'; + String get historyNoDownloadsSubtitle => 'Heruntergeladene Titel werden hier angezeigt'; @override String get historyNoAlbums => 'Keine Album-Downloads'; @override - String get historyNoAlbumsSubtitle => - 'Laden Sie mehrere Titel eines Albums herunter, um sie hier zu sehen'; + String get historyNoAlbumsSubtitle => 'Laden Sie mehrere Titel eines Albums herunter, um sie hier zu sehen'; @override String get historyNoSingles => 'Keine Einzel-Downloads'; @override - String get historyNoSinglesSubtitle => - 'Einzelne Titel-Downloads werden hier angezeigt'; + String get historyNoSinglesSubtitle => 'Einzelne Titel-Downloads werden hier angezeigt'; @override String get historySearchHint => 'Suchverlauf...'; @@ -142,8 +137,7 @@ class AppLocalizationsDe extends AppLocalizations { String get downloadLocation => 'Download-Speicherort'; @override - String get downloadLocationSubtitle => - 'Wählen Sie den Speicherort für Dateien'; + String get downloadLocationSubtitle => 'Wählen Sie den Speicherort für Dateien'; @override String get downloadLocationDefault => 'Standard-Speicherort'; @@ -161,8 +155,7 @@ class AppLocalizationsDe extends AppLocalizations { String get downloadAskQuality => 'Qualität vor Download abfragen'; @override - String get downloadAskQualitySubtitle => - 'Qualitätsauswahl für jeden Download anzeigen'; + String get downloadAskQualitySubtitle => 'Qualitätsauswahl für jeden Download anzeigen'; @override String get downloadFilenameFormat => 'Dateinamenformat'; @@ -174,8 +167,7 @@ class AppLocalizationsDe extends AppLocalizations { String get downloadSeparateSingles => 'Singles trennen'; @override - String get downloadSeparateSinglesSubtitle => - 'Einzelne Titel in separatem Ordner speichern'; + String get downloadSeparateSinglesSubtitle => 'Einzelne Titel in separatem Ordner speichern'; @override String get qualityBest => 'Beste Qualität'; @@ -208,8 +200,7 @@ class AppLocalizationsDe extends AppLocalizations { String get appearanceDynamicColor => 'Dynamische Farben'; @override - String get appearanceDynamicColorSubtitle => - 'Farben von Ihrem Hintergrundbild verwenden'; + String get appearanceDynamicColorSubtitle => 'Farben von Ihrem Hintergrundbild verwenden'; @override String get appearanceAccentColor => 'Akzentfarbe'; @@ -233,8 +224,7 @@ class AppLocalizationsDe extends AppLocalizations { String get optionsPrimaryProvider => 'Primärer Anbieter'; @override - String get optionsPrimaryProviderSubtitle => - 'Dienst für die Suche nach Titelnamen.'; + String get optionsPrimaryProviderSubtitle => 'Dienst für die Suche nach Titelnamen.'; @override String optionsUsingExtension(String extensionName) { @@ -242,40 +232,34 @@ class AppLocalizationsDe extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tippen Sie auf Deezer oder Spotify, um von der Erweiterung zurückzuwechseln'; + String get optionsSwitchBack => 'Tippen Sie auf Deezer oder Spotify, um von der Erweiterung zurückzuwechseln'; @override String get optionsAutoFallback => 'Automatischer Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Andere Dienste versuchen, wenn Download fehlschlägt'; + String get optionsAutoFallbackSubtitle => 'Andere Dienste versuchen, wenn Download fehlschlägt'; @override String get optionsUseExtensionProviders => 'Erweiterungs-Anbieter verwenden'; @override - String get optionsUseExtensionProvidersOn => - 'Erweiterungen werden zuerst versucht'; + String get optionsUseExtensionProvidersOn => 'Erweiterungen werden zuerst versucht'; @override - String get optionsUseExtensionProvidersOff => - 'Nur integrierte Anbieter verwenden'; + String get optionsUseExtensionProvidersOff => 'Nur integrierte Anbieter verwenden'; @override String get optionsEmbedLyrics => 'Liedtexte einbetten'; @override - String get optionsEmbedLyricsSubtitle => - 'Synchronisierte Liedtexte in FLAC-Dateien einbetten'; + String get optionsEmbedLyricsSubtitle => 'Synchronisierte Liedtexte in FLAC-Dateien einbetten'; @override String get optionsMaxQualityCover => 'Maximale Cover-Qualität'; @override - String get optionsMaxQualityCoverSubtitle => - 'Cover in höchster Auflösung herunterladen'; + String get optionsMaxQualityCoverSubtitle => 'Cover in höchster Auflösung herunterladen'; @override String get optionsConcurrentDownloads => 'Parallele Downloads'; @@ -289,22 +273,19 @@ class AppLocalizationsDe extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallele Downloads können Ratenlimitierung auslösen'; + String get optionsConcurrentWarning => 'Parallele Downloads können Ratenlimitierung auslösen'; @override String get optionsExtensionStore => 'Erweiterungs-Store'; @override - String get optionsExtensionStoreSubtitle => - 'Store-Tab in Navigation anzeigen'; + String get optionsExtensionStoreSubtitle => 'Store-Tab in Navigation anzeigen'; @override String get optionsCheckUpdates => 'Nach Updates suchen'; @override - String get optionsCheckUpdatesSubtitle => - 'Benachrichtigen, wenn neue Version verfügbar'; + String get optionsCheckUpdatesSubtitle => 'Benachrichtigen, wenn neue Version verfügbar'; @override String get optionsUpdateChannel => 'Update-Kanal'; @@ -316,22 +297,19 @@ class AppLocalizationsDe extends AppLocalizations { String get optionsUpdateChannelPreview => 'Vorschau-Versionen erhalten'; @override - String get optionsUpdateChannelWarning => - 'Vorschau kann Fehler oder unvollständige Funktionen enthalten'; + String get optionsUpdateChannelWarning => 'Vorschau kann Fehler oder unvollständige Funktionen enthalten'; @override String get optionsClearHistory => 'Download-Verlauf löschen'; @override - String get optionsClearHistorySubtitle => - 'Alle heruntergeladenen Titel aus dem Verlauf entfernen'; + String get optionsClearHistorySubtitle => 'Alle heruntergeladenen Titel aus dem Verlauf entfernen'; @override String get optionsDetailedLogging => 'Detaillierte Protokollierung'; @override - String get optionsDetailedLoggingOn => - 'Detaillierte Protokolle werden aufgezeichnet'; + String get optionsDetailedLoggingOn => 'Detaillierte Protokolle werden aufgezeichnet'; @override String get optionsDetailedLoggingOff => 'Für Fehlerberichte aktivieren'; @@ -345,12 +323,10 @@ class AppLocalizationsDe extends AppLocalizations { } @override - String get optionsSpotifyCredentialsRequired => - 'Erforderlich - zum Konfigurieren tippen'; + String get optionsSpotifyCredentialsRequired => 'Erforderlich - zum Konfigurieren tippen'; @override - String get optionsSpotifyWarning => - 'Spotify erfordert eigene API-Anmeldedaten. Kostenlos erhältlich auf developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify erfordert eigene API-Anmeldedaten. Kostenlos erhältlich auf developer.spotify.com'; @override String get extensionsTitle => 'Erweiterungen'; @@ -362,8 +338,7 @@ class AppLocalizationsDe extends AppLocalizations { String get extensionsNone => 'Keine Erweiterungen installiert'; @override - String get extensionsNoneSubtitle => - 'Erweiterungen aus dem Store-Tab installieren'; + String get extensionsNoneSubtitle => 'Erweiterungen aus dem Store-Tab installieren'; @override String get extensionsEnabled => 'Aktiviert'; @@ -415,8 +390,7 @@ class AppLocalizationsDe extends AppLocalizations { String get aboutOriginalCreator => 'Schöpfer des ursprünglichen SpotiFLAC'; @override - String get aboutLogoArtist => - 'Der talentierte Künstler, der unser wunderschönes App-Logo entworfen hat!'; + String get aboutLogoArtist => 'Der talentierte Künstler, der unser wunderschönes App-Logo entworfen hat!'; @override String get aboutTranslators => 'Übersetzer'; @@ -437,15 +411,13 @@ class AppLocalizationsDe extends AppLocalizations { String get aboutReportIssue => 'Problem melden'; @override - String get aboutReportIssueSubtitle => - 'Melde jedes Problem, die dir auftreten'; + String get aboutReportIssueSubtitle => 'Melde jedes Problem, die dir auftreten'; @override String get aboutFeatureRequest => 'Feature vorschlagen'; @override - String get aboutFeatureRequestSubtitle => - 'Schlage neue Funktionen für die App vor'; + String get aboutFeatureRequestSubtitle => 'Schlage neue Funktionen für die App vor'; @override String get aboutTelegramChannel => 'Telegram Kanal'; @@ -469,8 +441,7 @@ class AppLocalizationsDe extends AppLocalizations { String get aboutBuyMeCoffee => 'Spendiere mir einen Kaffee'; @override - String get aboutBuyMeCoffeeSubtitle => - 'Unterstütze die Entwicklung auf Ko-fi'; + String get aboutBuyMeCoffeeSubtitle => 'Unterstütze die Entwicklung auf Ko-fi'; @override String get aboutApp => 'App'; @@ -479,34 +450,28 @@ class AppLocalizationsDe extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'Der Schöpfer der QQDL & HiFi API. Ohne diese API gäbe es keine Tidal-Downloads!'; + String get aboutBinimumDesc => 'Der Schöpfer der QQDL & HiFi API. Ohne diese API gäbe es keine Tidal-Downloads!'; @override - String get aboutSachinsenalDesc => - 'Der ursprüngliche Entwickler des HiFi-Projekts. Die Grundlage der Tidal-Integration!'; + String get aboutSachinsenalDesc => 'Der ursprüngliche Entwickler des HiFi-Projekts. Die Grundlage der Tidal-Integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Wundervolle API für Amazon Music Downloads.\nVielen Dank, dass Sie sie kostenlos zur Verfügung stellen!'; + String get aboutDoubleDoubleDesc => 'Wundervolle API für Amazon Music Downloads.\nVielen Dank, dass Sie sie kostenlos zur Verfügung stellen!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'Die beste Qobuz-Streaming-API. Hi-Res-Downloads wären ohne diese nicht möglich!'; + String get aboutDabMusicDesc => 'Die beste Qobuz-Streaming-API. Hi-Res-Downloads wären ohne diese nicht möglich!'; @override - String get aboutAppDescription => - 'Lade Spotify-Titel in verlustfreier Qualität von Tidal, Qobuz und Amazon Music herunter.'; + String get aboutAppDescription => 'Lade Spotify-Titel in verlustfreier Qualität von Tidal, Qobuz und Amazon Music herunter.'; @override String get albumTitle => 'Album'; @@ -611,8 +576,7 @@ class AppLocalizationsDe extends AppLocalizations { String get setupStoragePermission => 'Speicherberechtigung'; @override - String get setupStoragePermissionSubtitle => - 'Benötigt um heruntergeladene Dateien zu Speichern'; + String get setupStoragePermissionSubtitle => 'Benötigt um heruntergeladene Dateien zu Speichern'; @override String get setupStoragePermissionGranted => 'Berechtigung erteilt'; @@ -639,19 +603,16 @@ class AppLocalizationsDe extends AppLocalizations { String get setupStorageAccessRequired => 'Speicherzugriff erforderlich'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC benötigt die Berechtigung \"Auf alle Dateien zugreifen\", um Musikdateien in deinen gewählten Ordner zu speichern.'; + String get setupStorageAccessMessage => 'SpotiFLAC benötigt die Berechtigung \"Auf alle Dateien zugreifen\", um Musikdateien in deinen gewählten Ordner zu speichern.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ benötigt die Berechtigung „Auf alle Dateien“, um Dateien im ausgewählten Download-Ordner zu speichern.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ benötigt die Berechtigung „Auf alle Dateien“, um Dateien im ausgewählten Download-Ordner zu speichern.'; @override String get setupOpenSettings => 'Einstellungen öffnen'; @override - String get setupPermissionDeniedMessage => - 'Berechtigung verweigert. Bitte erteilen Sie alle Berechtigungen um fortzufahren.'; + String get setupPermissionDeniedMessage => 'Berechtigung verweigert. Bitte erteilen Sie alle Berechtigungen um fortzufahren.'; @override String setupPermissionRequired(String permissionType) { @@ -670,8 +631,7 @@ class AppLocalizationsDe extends AppLocalizations { String get setupUseDefaultFolder => 'Als Standardordner verwenden?'; @override - String get setupNoFolderSelected => - 'Kein Ordner ausgewählt. Soll der Standard-Musikordner verwendet werden?'; + String get setupNoFolderSelected => 'Kein Ordner ausgewählt. Soll der Standard-Musikordner verwendet werden?'; @override String get setupUseDefault => 'Standart benutzen'; @@ -680,30 +640,25 @@ class AppLocalizationsDe extends AppLocalizations { String get setupDownloadLocationTitle => 'Speicherort'; @override - String get setupDownloadLocationIosMessage => - 'Auf iOS werden Downloads im Dokumentenverzeichnis der App gespeichert. Sie können sie über die Datei-App aufrufen.'; + String get setupDownloadLocationIosMessage => 'Auf iOS werden Downloads im Dokumentenverzeichnis der App gespeichert. Sie können sie über die Datei-App aufrufen.'; @override String get setupAppDocumentsFolder => 'App-Dokumentenordner'; @override - String get setupAppDocumentsFolderSubtitle => - 'Empfohlen - zugänglich über die Datei-App'; + String get setupAppDocumentsFolderSubtitle => 'Empfohlen - zugänglich über die Datei-App'; @override String get setupChooseFromFiles => 'Aus Dateien auswählen'; @override - String get setupChooseFromFilesSubtitle => - 'Wählen Sie iCloud oder einen anderen Ort'; + String get setupChooseFromFilesSubtitle => 'Wählen Sie iCloud oder einen anderen Ort'; @override - String get setupIosEmptyFolderWarning => - 'iOS-Einschränkung: Leere Ordner können nicht ausgewählt werden. Wählen Sie einen Ordner mit mindestens einer Datei.'; + String get setupIosEmptyFolderWarning => 'iOS-Einschränkung: Leere Ordner können nicht ausgewählt werden. Wählen Sie einen Ordner mit mindestens einer Datei.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Spotify Titel in FLAC herunterladen'; @@ -730,19 +685,16 @@ class AppLocalizationsDe extends AppLocalizations { String get setupStorageRequired => 'Speicherzugriff erforderlich'; @override - String get setupStorageDescription => - 'SpotiFLAC benötigt Speicherrechte, um die heruntergeladenen Musikdateien zu speichern.'; + String get setupStorageDescription => 'SpotiFLAC benötigt Speicherrechte, um die heruntergeladenen Musikdateien zu speichern.'; @override - String get setupNotificationGranted => - 'Benachrichtigungs-Berechtigung erteilt'; + String get setupNotificationGranted => 'Benachrichtigungs-Berechtigung erteilt'; @override String get setupNotificationEnable => 'Benachrichtigungen aktivieren'; @override - String get setupNotificationDescription => - 'Benachrichtigt werden, wenn Downloads abgeschlossen sind.'; + String get setupNotificationDescription => 'Benachrichtigt werden, wenn Downloads abgeschlossen sind.'; @override String get setupFolderSelected => 'Download Ordner ausgewählt!'; @@ -751,8 +703,7 @@ class AppLocalizationsDe extends AppLocalizations { String get setupFolderChoose => 'Speicherort auwählen'; @override - String get setupFolderDescription => - 'Wählen Sie einen Ordner, in dem Ihre heruntergeladene Musik gespeichert wird.'; + String get setupFolderDescription => 'Wählen Sie einen Ordner, in dem Ihre heruntergeladene Musik gespeichert wird.'; @override String get setupChangeFolder => 'Ordner ändern'; @@ -764,8 +715,7 @@ class AppLocalizationsDe extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify-API (optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -783,8 +733,7 @@ class AppLocalizationsDe extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -793,12 +742,10 @@ class AppLocalizationsDe extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -816,12 +763,10 @@ class AppLocalizationsDe extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -872,8 +817,7 @@ class AppLocalizationsDe extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -891,8 +835,7 @@ class AppLocalizationsDe extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -901,8 +844,7 @@ class AppLocalizationsDe extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -916,8 +858,7 @@ class AppLocalizationsDe extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -1012,8 +953,7 @@ class AppLocalizationsDe extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1035,8 +975,7 @@ class AppLocalizationsDe extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1203,23 +1142,19 @@ class AppLocalizationsDe extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1278,12 +1213,10 @@ class AppLocalizationsDe extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1295,19 +1228,16 @@ class AppLocalizationsDe extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1379,19 +1309,16 @@ class AppLocalizationsDe extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1400,12 +1327,10 @@ class AppLocalizationsDe extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1431,8 +1356,7 @@ class AppLocalizationsDe extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1486,8 +1410,7 @@ class AppLocalizationsDe extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1499,8 +1422,7 @@ class AppLocalizationsDe extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1660,8 +1582,7 @@ class AppLocalizationsDe extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1813,15 +1734,13 @@ class AppLocalizationsDe extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1833,19 +1752,16 @@ class AppLocalizationsDe extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1854,8 +1770,7 @@ class AppLocalizationsDe extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1897,8 +1812,7 @@ class AppLocalizationsDe extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1910,12 +1824,10 @@ class AppLocalizationsDe extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -2005,15 +1917,13 @@ class AppLocalizationsDe extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2025,8 +1935,7 @@ class AppLocalizationsDe extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2038,170 +1947,7 @@ class AppLocalizationsDe extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2237,8 +1983,7 @@ class AppLocalizationsDe extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2256,8 +2001,7 @@ class AppLocalizationsDe extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2367,8 +2111,7 @@ class AppLocalizationsDe extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2415,16 +2158,13 @@ class AppLocalizationsDe extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2445,8 +2185,7 @@ class AppLocalizationsDe extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2458,8 +2197,7 @@ class AppLocalizationsDe extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2477,8 +2215,7 @@ class AppLocalizationsDe extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2490,15 +2227,13 @@ class AppLocalizationsDe extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2536,8 +2271,7 @@ class AppLocalizationsDe extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2628,81 +2362,4 @@ class AppLocalizationsDe extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index ec6a4734..928ee6c1 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -12,8 +12,7 @@ class AppLocalizationsEn extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -102,15 +101,13 @@ class AppLocalizationsEn extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsEn extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsEn extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsEn extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsEn extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsEn extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsEn extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsEn extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsEn extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsEn extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsEn extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsEn extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsEn extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsEn extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsEn extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsEn extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsEn extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsEn extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsEn extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsEn extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsEn extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsEn extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsEn extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsEn extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsEn extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsEn extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsEn extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsEn extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsEn extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsEn extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsEn extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsEn extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsEn extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsEn extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsEn extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsEn extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsEn extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsEn extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsEn extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsEn extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsEn extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsEn extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsEn extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsEn extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsEn extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsEn extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsEn extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsEn extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsEn extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsEn extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsEn extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsEn extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsEn extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsEn extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsEn extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsEn extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,81 +2362,4 @@ class AppLocalizationsEn extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index e5b9ed8b..5a049042 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -12,8 +12,7 @@ class AppLocalizationsEs extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -102,15 +101,13 @@ class AppLocalizationsEs extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsEs extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsEs extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsEs extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsEs extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsEs extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsEs extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsEs extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsEs extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsEs extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsEs extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsEs extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsEs extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsEs extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsEs extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsEs extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsEs extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsEs extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsEs extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsEs extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsEs extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsEs extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsEs extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsEs extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsEs extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsEs extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsEs extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsEs extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsEs extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsEs extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsEs extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsEs extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsEs extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsEs extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsEs extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsEs extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsEs extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsEs extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsEs extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsEs extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsEs extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsEs extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsEs extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsEs extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsEs extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsEs extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsEs extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsEs extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsEs extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsEs extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsEs extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsEs extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsEs extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsEs extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsEs extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsEs extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,95 +2362,17 @@ class AppLocalizationsEs extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } /// The translations for Spanish Castilian, as used in Spain (`es_ES`). class AppLocalizationsEsEs extends AppLocalizationsEs { - AppLocalizationsEsEs() : super('es_ES'); + AppLocalizationsEsEs(): super('es_ES'); @override String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Descargue pistas de Spotify con calidad sin pérdida de Tidal, Qobuz y Amazon Music.'; + String get appDescription => 'Descargue pistas de Spotify con calidad sin pérdida de Tidal, Qobuz y Amazon Music.'; @override String get navHome => 'Inicio'; @@ -2730,8 +2401,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get homeSubtitle => 'Pegar enlace de Spotify o buscar por nombre'; @override - String get homeSupports => - 'Soportes: Pista, Álbum, Lista de reproducción, URLs de Artistas'; + String get homeSupports => 'Soportes: Pista, Álbum, Lista de reproducción, URLs de Artistas'; @override String get homeRecent => 'Recientes'; @@ -2782,22 +2452,19 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get historyNoDownloads => 'No hay historial de descargas'; @override - String get historyNoDownloadsSubtitle => - 'Las pistas descargadas aparecerán aquí'; + String get historyNoDownloadsSubtitle => 'Las pistas descargadas aparecerán aquí'; @override String get historyNoAlbums => 'No hay descargas de álbum'; @override - String get historyNoAlbumsSubtitle => - 'Descargar múltiples pistas de un álbum para verlas aquí'; + String get historyNoAlbumsSubtitle => 'Descargar múltiples pistas de un álbum para verlas aquí'; @override String get historyNoSingles => 'No hay descargas'; @override - String get historyNoSinglesSubtitle => - 'Las descargas de una sola pista aparecerán aquí'; + String get historyNoSinglesSubtitle => 'Las descargas de una sola pista aparecerán aquí'; @override String get settingsTitle => 'Ajustes'; @@ -2842,8 +2509,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get downloadAskQuality => 'Preguntar calidad antes de descargar'; @override - String get downloadAskQualitySubtitle => - 'Mostrar selector de calidad para cada descarga'; + String get downloadAskQualitySubtitle => 'Mostrar selector de calidad para cada descarga'; @override String get downloadFilenameFormat => 'Formato del nombre del archivo'; @@ -2855,8 +2521,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get downloadSeparateSingles => 'Separar Pistas'; @override - String get downloadSeparateSinglesSubtitle => - 'Colocar pistas individuales en una carpeta separada'; + String get downloadSeparateSinglesSubtitle => 'Colocar pistas individuales en una carpeta separada'; @override String get qualityBest => 'Mejor disponible'; @@ -2889,8 +2554,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get appearanceDynamicColor => 'Color dinámico'; @override - String get appearanceDynamicColorSubtitle => - 'Usar colores de tu fondo de pantalla'; + String get appearanceDynamicColorSubtitle => 'Usar colores de tu fondo de pantalla'; @override String get appearanceAccentColor => 'Color Secundario'; @@ -2914,8 +2578,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get optionsPrimaryProvider => 'Proveedor Principal'; @override - String get optionsPrimaryProviderSubtitle => - 'Servicio usado al buscar por nombre de la pista.'; + String get optionsPrimaryProviderSubtitle => 'Servicio usado al buscar por nombre de la pista.'; @override String optionsUsingExtension(String extensionName) { @@ -2923,40 +2586,34 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { } @override - String get optionsSwitchBack => - 'Toque Deezer o Spotify para volver desde la extensión'; + String get optionsSwitchBack => 'Toque Deezer o Spotify para volver desde la extensión'; @override String get optionsAutoFallback => 'Alternativa automática'; @override - String get optionsAutoFallbackSubtitle => - 'Pruebe otros servicios si falla la descarga'; + String get optionsAutoFallbackSubtitle => 'Pruebe otros servicios si falla la descarga'; @override String get optionsUseExtensionProviders => 'Usar proveedores de extensiones'; @override - String get optionsUseExtensionProvidersOn => - 'Las extensiones serán probadas primero'; + String get optionsUseExtensionProvidersOn => 'Las extensiones serán probadas primero'; @override - String get optionsUseExtensionProvidersOff => - 'Utilizando sólo proveedores integrados'; + String get optionsUseExtensionProvidersOff => 'Utilizando sólo proveedores integrados'; @override String get optionsEmbedLyrics => 'Incrustar Letras'; @override - String get optionsEmbedLyricsSubtitle => - 'Insertar letras sincronizadas en archivos FLAC'; + String get optionsEmbedLyricsSubtitle => 'Insertar letras sincronizadas en archivos FLAC'; @override String get optionsMaxQualityCover => 'Carátula de calidad máxima'; @override - String get optionsMaxQualityCoverSubtitle => - 'Descargar carátula de resolución máxima'; + String get optionsMaxQualityCoverSubtitle => 'Descargar carátula de resolución máxima'; @override String get optionsConcurrentDownloads => 'Descargas Simultáneas'; @@ -2970,22 +2627,19 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { } @override - String get optionsConcurrentWarning => - 'Las descargas paralelas pueden activar la limitación de velocidad'; + String get optionsConcurrentWarning => 'Las descargas paralelas pueden activar la limitación de velocidad'; @override String get optionsExtensionStore => 'Tienda de extensiones'; @override - String get optionsExtensionStoreSubtitle => - 'Mostrar pestaña de tienda en la navegación'; + String get optionsExtensionStoreSubtitle => 'Mostrar pestaña de tienda en la navegación'; @override String get optionsCheckUpdates => 'Comprobar actualizaciones'; @override - String get optionsCheckUpdatesSubtitle => - 'Notificar cuando una nueva versión esté disponible'; + String get optionsCheckUpdatesSubtitle => 'Notificar cuando una nueva versión esté disponible'; @override String get optionsUpdateChannel => 'Tipo de actualizaciones'; @@ -2997,22 +2651,19 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get optionsUpdateChannelPreview => 'Versión preliminar'; @override - String get optionsUpdateChannelWarning => - 'La Versión preliminar puede contener errores o características incompletas'; + String get optionsUpdateChannelWarning => 'La Versión preliminar puede contener errores o características incompletas'; @override String get optionsClearHistory => 'Borrar el historial de descargas'; @override - String get optionsClearHistorySubtitle => - 'Eliminar todas las pistas descargadas del historial'; + String get optionsClearHistorySubtitle => 'Eliminar todas las pistas descargadas del historial'; @override String get optionsDetailedLogging => 'Registro detallado'; @override - String get optionsDetailedLoggingOn => - 'Registros detallados están siendo registrados'; + String get optionsDetailedLoggingOn => 'Registros detallados están siendo registrados'; @override String get optionsDetailedLoggingOff => 'Habilitar para informes de errores'; @@ -3026,12 +2677,10 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { } @override - String get optionsSpotifyCredentialsRequired => - 'Requerido - toque para configurar'; + String get optionsSpotifyCredentialsRequired => 'Requerido - toque para configurar'; @override - String get optionsSpotifyWarning => - 'Spotify requiere tus propias credenciales API. Obténgalas gratis de developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requiere tus propias credenciales API. Obténgalas gratis de developer.spotify.com'; @override String get extensionsTitle => 'Extensiones'; @@ -3043,8 +2692,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get extensionsNone => 'No hay extensiones instaladas'; @override - String get extensionsNoneSubtitle => - 'Instalar extensiones desde la pestaña Tienda'; + String get extensionsNoneSubtitle => 'Instalar extensiones desde la pestaña Tienda'; @override String get extensionsEnabled => 'Habilitado'; @@ -3096,8 +2744,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get aboutOriginalCreator => 'Creador original de SpotiFLAC'; @override - String get aboutLogoArtist => - '¡El talentoso artista que creó nuestro hermoso logo!'; + String get aboutLogoArtist => '¡El talentoso artista que creó nuestro hermoso logo!'; @override String get aboutSpecialThanks => 'Agradecimientos especiales'; @@ -3115,15 +2762,13 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get aboutReportIssue => 'Reportar un problema'; @override - String get aboutReportIssueSubtitle => - 'Reporta cualquier problema que encuentres'; + String get aboutReportIssueSubtitle => 'Reporta cualquier problema que encuentres'; @override String get aboutFeatureRequest => 'Sugerir una función'; @override - String get aboutFeatureRequestSubtitle => - 'Sugerir nuevas funciones para la aplicación'; + String get aboutFeatureRequestSubtitle => 'Sugerir nuevas funciones para la aplicación'; @override String get aboutSupport => 'Soporte'; @@ -3141,30 +2786,25 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get aboutVersion => 'Versión'; @override - String get aboutBinimumDesc => - 'El creador de la API QQDL & Hi-Fi. ¡Sin esta API, las descargas de Tidal no existiría!'; + String get aboutBinimumDesc => 'El creador de la API QQDL & Hi-Fi. ¡Sin esta API, las descargas de Tidal no existiría!'; @override - String get aboutSachinsenalDesc => - 'El creador original del proyecto Hi-Fi. ¡La base de la integración de Tidal!'; + String get aboutSachinsenalDesc => 'El creador original del proyecto Hi-Fi. ¡La base de la integración de Tidal!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'API increible para descargas de Amazon Music. ¡Gracias por hacerla gratis!'; + String get aboutDoubleDoubleDesc => 'API increible para descargas de Amazon Music. ¡Gracias por hacerla gratis!'; @override String get aboutDabMusic => 'Música DAB'; @override - String get aboutDabMusicDesc => - 'La mejor API de streaming de Qobuz. ¡Las descargas de Hi-Res no serían posibles sin esto!'; + String get aboutDabMusicDesc => 'La mejor API de streaming de Qobuz. ¡Las descargas de Hi-Res no serían posibles sin esto!'; @override - String get aboutAppDescription => - 'Descarga pistas de Spotify con calidad sin pérdida de Tidal, Qobuz y Amazon Music.'; + String get aboutAppDescription => 'Descarga pistas de Spotify con calidad sin pérdida de Tidal, Qobuz y Amazon Music.'; @override String get albumTitle => 'Álbum'; @@ -3269,8 +2909,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupStoragePermission => 'Permiso de almacenamiento'; @override - String get setupStoragePermissionSubtitle => - 'Necesario para guardar los archivos descargados'; + String get setupStoragePermissionSubtitle => 'Necesario para guardar los archivos descargados'; @override String get setupStoragePermissionGranted => 'Permiso aprobado'; @@ -3297,19 +2936,16 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupStorageAccessRequired => 'Acceso al almacenamiento requerido'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC necesita permiso de \"Todos los archivos de acceso\" para guardar los archivos de música en la carpeta elegida.'; + String get setupStorageAccessMessage => 'SpotiFLAC necesita permiso de \"Todos los archivos de acceso\" para guardar los archivos de música en la carpeta elegida.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requiere permiso \"Todos los archivos de acceso\" para guardar los archivos en la carpeta de descargas elegida.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requiere permiso \"Todos los archivos de acceso\" para guardar los archivos en la carpeta de descargas elegida.'; @override String get setupOpenSettings => 'Abrir ajustes'; @override - String get setupPermissionDeniedMessage => - 'Permiso denegado. Por favor, conceda todos los permisos para continuar.'; + String get setupPermissionDeniedMessage => 'Permiso denegado. Por favor, conceda todos los permisos para continuar.'; @override String setupPermissionRequired(String permissionType) { @@ -3328,8 +2964,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupUseDefaultFolder => '¿Usar carpeta por defecto?'; @override - String get setupNoFolderSelected => - 'No se ha seleccionado ninguna carpeta. ¿Desea utilizar la carpeta por defecto?'; + String get setupNoFolderSelected => 'No se ha seleccionado ninguna carpeta. ¿Desea utilizar la carpeta por defecto?'; @override String get setupUseDefault => 'Usar por defecto'; @@ -3338,26 +2973,22 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupDownloadLocationTitle => 'Ubicación de descarga'; @override - String get setupDownloadLocationIosMessage => - 'En iOS, las descargas se guardan en la carpeta de documentos de la aplicación. Puede acceder a ellas desde la aplicación Archivos.'; + String get setupDownloadLocationIosMessage => 'En iOS, las descargas se guardan en la carpeta de documentos de la aplicación. Puede acceder a ellas desde la aplicación Archivos.'; @override String get setupAppDocumentsFolder => 'Carpeta de documentos de App'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recomendado - accesible desde la aplicación Archivos'; + String get setupAppDocumentsFolderSubtitle => 'Recomendado - accesible desde la aplicación Archivos'; @override String get setupChooseFromFiles => 'Elegir de archivos'; @override - String get setupChooseFromFilesSubtitle => - 'Seleccione iCloud u otra ubicación'; + String get setupChooseFromFilesSubtitle => 'Seleccione iCloud u otra ubicación'; @override - String get setupIosEmptyFolderWarning => - 'Limitación de iOS: No se pueden seleccionar carpetas vacías. Elige una carpeta con al menos un archivo.'; + String get setupIosEmptyFolderWarning => 'Limitación de iOS: No se pueden seleccionar carpetas vacías. Elige una carpeta con al menos un archivo.'; @override String get setupDownloadInFlac => 'Descargar pistas de Spotify en FLAC'; @@ -3384,19 +3015,16 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupStorageRequired => 'Permiso de almacenamiento requerido'; @override - String get setupStorageDescription => - 'SpotiFLAC necesita permiso de almacenamiento para guardar sus archivos de música descargados.'; + String get setupStorageDescription => 'SpotiFLAC necesita permiso de almacenamiento para guardar sus archivos de música descargados.'; @override - String get setupNotificationGranted => - '¡Acceso a las notificaciones permitido!'; + String get setupNotificationGranted => '¡Acceso a las notificaciones permitido!'; @override String get setupNotificationEnable => 'Activar notificaciones'; @override - String get setupNotificationDescription => - 'Recibe notificaciones cuando las descargas completen o requieran atención.'; + String get setupNotificationDescription => 'Recibe notificaciones cuando las descargas completen o requieran atención.'; @override String get setupFolderSelected => '¡Carpeta de descarga seleccionada!'; @@ -3405,8 +3033,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupFolderChoose => 'Cambiar carpeta de descargas'; @override - String get setupFolderDescription => - 'Seleccione una carpeta donde se guardará la música descargada.'; + String get setupFolderDescription => 'Seleccione una carpeta donde se guardará la música descargada.'; @override String get setupChangeFolder => 'Cambiar carpeta'; @@ -3418,15 +3045,13 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupSpotifyApiOptional => 'API de Spotify (opcional)'; @override - String get setupSpotifyApiDescription => - 'Añade tus credenciales de la API de Spotify para mejores resultados de búsqueda y acceso al contenido exclusivo de Spotify.'; + String get setupSpotifyApiDescription => 'Añade tus credenciales de la API de Spotify para mejores resultados de búsqueda y acceso al contenido exclusivo de Spotify.'; @override String get setupUseSpotifyApi => 'Usar API de Spotify'; @override - String get setupEnterCredentialsBelow => - 'Ingresa tus credenciales a continuación'; + String get setupEnterCredentialsBelow => 'Ingresa tus credenciales a continuación'; @override String get setupUsingDeezer => 'Usando Deezer (no se necesita cuenta)'; @@ -3438,23 +3063,19 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupEnterClientSecret => 'Ingresa el Client Secret de Spotify'; @override - String get setupGetFreeCredentials => - 'Obtén tus credenciales gratuitas de la API desde el Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Obtén tus credenciales gratuitas de la API desde el Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Activar notificaciones'; @override - String get setupProceedToNextStep => - 'Ahora puedes continuar con el siguiente paso.'; + String get setupProceedToNextStep => 'Ahora puedes continuar con el siguiente paso.'; @override - String get setupNotificationProgressDescription => - 'Recibirás notificaciones de progreso de descargas.'; + String get setupNotificationProgressDescription => 'Recibirás notificaciones de progreso de descargas.'; @override - String get setupNotificationBackgroundDescription => - 'Recibe notificaciones sobre el progreso de la descarga y la finalización. Esto te ayuda a rastrear las descargas cuando la aplicación está en segundo plano.'; + String get setupNotificationBackgroundDescription => 'Recibe notificaciones sobre el progreso de la descarga y la finalización. Esto te ayuda a rastrear las descargas cuando la aplicación está en segundo plano.'; @override String get setupSkipForNow => 'Omitir por ahora'; @@ -3472,12 +3093,10 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get setupSkipAndStart => 'Saltar y empezar'; @override - String get setupAllowAccessToManageFiles => - 'Por favor, activa \"Permitir el acceso para gestionar todos los archivos\" en la siguiente pantalla.'; + String get setupAllowAccessToManageFiles => 'Por favor, activa \"Permitir el acceso para gestionar todos los archivos\" en la siguiente pantalla.'; @override - String get setupGetCredentialsFromSpotify => - 'Obtener credenciales de developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Obtener credenciales de developer.spotify.com'; @override String get dialogCancel => 'Cancelar'; @@ -3528,8 +3147,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get dialogDiscardChanges => '¿Descartar cambios?'; @override - String get dialogUnsavedChanges => - 'Tienes cambios sin guardar. ¿Quieres descartarlos?'; + String get dialogUnsavedChanges => 'Tienes cambios sin guardar. ¿Quieres descartarlos?'; @override String get dialogDownloadFailed => 'Descarga fallida'; @@ -3547,8 +3165,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get dialogClearAll => 'Eliminar todo'; @override - String get dialogClearAllDownloads => - '¿Estás seguro de que quieres borrar todas las descargas?'; + String get dialogClearAllDownloads => '¿Estás seguro de que quieres borrar todas las descargas?'; @override String get dialogRemoveFromDevice => '¿Eliminar del dispositivo?'; @@ -3557,8 +3174,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get dialogRemoveExtension => 'Eliminar extensión'; @override - String get dialogRemoveExtensionMessage => - '¿Estás seguro de que quieres eliminar esta extensión? Esto no se puede deshacer.'; + String get dialogRemoveExtensionMessage => '¿Estás seguro de que quieres eliminar esta extensión? Esto no se puede deshacer.'; @override String get dialogUninstallExtension => '¿Desinstalar extensión?'; @@ -3572,8 +3188,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get dialogClearHistoryTitle => 'Borrar historial'; @override - String get dialogClearHistoryMessage => - '¿Estás seguro de que quieres borrar todo el historial de descargas? Esta acción no se puede deshacer.'; + String get dialogClearHistoryMessage => '¿Estás seguro de que quieres borrar todo el historial de descargas? Esta acción no se puede deshacer.'; @override String get dialogDeleteSelectedTitle => 'Borrar Seleccionados'; @@ -3657,15 +3272,13 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get snackbarFileNotFound => 'Archivo no encontrado'; @override - String get snackbarSelectExtFile => - 'Por favor, seleccione un archivo .spotiflac-ext'; + String get snackbarSelectExtFile => 'Por favor, seleccione un archivo .spotiflac-ext'; @override String get snackbarProviderPrioritySaved => 'Prioridad de proveedor guardada'; @override - String get snackbarMetadataProviderSaved => - 'Prioridad de proveedor de metadatos guardada'; + String get snackbarMetadataProviderSaved => 'Prioridad de proveedor de metadatos guardada'; @override String snackbarExtensionInstalled(String extensionName) { @@ -3687,8 +3300,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get errorRateLimited => 'Límite Excedido'; @override - String get errorRateLimitedMessage => - 'Demasiadas solicitudes. Por favor, espere un momento antes de buscar de nuevo.'; + String get errorRateLimitedMessage => 'Demasiadas solicitudes. Por favor, espere un momento antes de buscar de nuevo.'; @override String errorFailedToLoad(String item) { @@ -3855,24 +3467,19 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get folderOrganizationByArtistAlbum => 'Artista/Álbum'; @override - String get folderOrganizationDescription => - 'Organizar los archivos descargados en carpetas'; + String get folderOrganizationDescription => 'Organizar los archivos descargados en carpetas'; @override - String get folderOrganizationNoneSubtitle => - 'Todos los archivos de la carpeta de descargas'; + String get folderOrganizationNoneSubtitle => 'Todos los archivos de la carpeta de descargas'; @override - String get folderOrganizationByArtistSubtitle => - 'Carpeta separada para cada artista'; + String get folderOrganizationByArtistSubtitle => 'Carpeta separada para cada artista'; @override - String get folderOrganizationByAlbumSubtitle => - 'Carpeta separada para cada artista'; + String get folderOrganizationByAlbumSubtitle => 'Carpeta separada para cada artista'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Carpetas organizadas por artista y álbum'; + String get folderOrganizationByArtistAlbumSubtitle => 'Carpetas organizadas por artista y álbum'; @override String get updateAvailable => 'Actualización Disponible'; @@ -3925,19 +3532,16 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get providerPriority => 'Prioridad del proveedor'; @override - String get providerPrioritySubtitle => - 'Arrastre para reordenar los proveedores de descarga'; + String get providerPrioritySubtitle => 'Arrastre para reordenar los proveedores de descarga'; @override String get providerPriorityTitle => 'Prioridad del proveedor'; @override - String get providerPriorityDescription => - 'Arrastra para reordenar los proveedores de descarga. La aplicación intentará usar los proveedores de arriba hacia abajo al descargar las pistas.'; + String get providerPriorityDescription => 'Arrastra para reordenar los proveedores de descarga. La aplicación intentará usar los proveedores de arriba hacia abajo al descargar las pistas.'; @override - String get providerPriorityInfo => - 'Si una pista no está disponible en el primer proveedor, la aplicación intentará automáticamente el siguiente.'; + String get providerPriorityInfo => 'Si una pista no está disponible en el primer proveedor, la aplicación intentará automáticamente el siguiente.'; @override String get providerBuiltIn => 'Integrado'; @@ -3949,19 +3553,16 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get metadataProviderPriority => 'Prioridad del proveedor de metadatos'; @override - String get metadataProviderPrioritySubtitle => - 'Orden usado al recuperar metadatos de la pista'; + String get metadataProviderPrioritySubtitle => 'Orden usado al recuperar metadatos de la pista'; @override String get metadataProviderPriorityTitle => 'Prioridad de los metadatos'; @override - String get metadataProviderPriorityDescription => - 'Arrastra para reordenar los proveedores de metadatos. La aplicación probará los proveedores de arriba hacia abajo al buscar pistas y obtener los metadatos.'; + String get metadataProviderPriorityDescription => 'Arrastra para reordenar los proveedores de metadatos. La aplicación probará los proveedores de arriba hacia abajo al buscar pistas y obtener los metadatos.'; @override - String get metadataProviderPriorityInfo => - 'Deezer no tiene límites de tasa y se recomienda como principal. Spotify puede valorar el límite después de muchas solicitudes.'; + String get metadataProviderPriorityInfo => 'Deezer no tiene límites de tasa y se recomienda como principal. Spotify puede valorar el límite después de muchas solicitudes.'; @override String get metadataNoRateLimits => 'Sin límites de tasa'; @@ -4006,8 +3607,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get logClearLogsTitle => 'Limpiar registros'; @override - String get logClearLogsMessage => - '¿Estás seguro que deseas limpiar todos los registros?'; + String get logClearLogsMessage => '¿Estás seguro que deseas limpiar todos los registros?'; @override String get logIspBlocking => 'BLOQUEO POR EL ISP DETECTADO'; @@ -4028,26 +3628,22 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get logNoLogsYet => 'No hay registros aún'; @override - String get logNoLogsYetSubtitle => - 'Los registros aparecerán aquí mientras usas la aplicación'; + String get logNoLogsYetSubtitle => 'Los registros aparecerán aquí mientras usas la aplicación'; @override String get logIssueSummary => 'Resumen de Incidencias'; @override - String get logIspBlockingDescription => - 'Tu ISP puede estar bloqueando el acceso a los servicios de descarga'; + String get logIspBlockingDescription => 'Tu ISP puede estar bloqueando el acceso a los servicios de descarga'; @override - String get logIspBlockingSuggestion => - 'Intente usar una VPN o cambie el DNS a 1.1.1.1 o 8.8.8.8'; + String get logIspBlockingSuggestion => 'Intente usar una VPN o cambie el DNS a 1.1.1.1 o 8.8.8.8'; @override String get logRateLimitedDescription => 'Demasiadas solicitudes al servicio'; @override - String get logRateLimitedSuggestion => - 'Espere unos minutos antes de volver a intentarlo'; + String get logRateLimitedSuggestion => 'Espere unos minutos antes de volver a intentarlo'; @override String get logNetworkErrorDescription => 'Problemas de conexión detectados'; @@ -4056,12 +3652,10 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get logNetworkErrorSuggestion => 'Comprueba tu conexión a internet'; @override - String get logTrackNotFoundDescription => - 'No se pudieron encontrar algunas pistas en los servicios de descarga'; + String get logTrackNotFoundDescription => 'No se pudieron encontrar algunas pistas en los servicios de descarga'; @override - String get logTrackNotFoundSuggestion => - 'La pista puede no estar disponible en calidad sin pérdida'; + String get logTrackNotFoundSuggestion => 'La pista puede no estar disponible en calidad sin pérdida'; @override String logTotalErrors(int count) { @@ -4087,8 +3681,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get credentialsTitle => 'Credenciales de Spotify'; @override - String get credentialsDescription => - 'Introduzca su ID de cliente y secreto para utilizar su propia cuota de aplicación de Spotify.'; + String get credentialsDescription => 'Introduzca su ID de cliente y secreto para utilizar su propia cuota de aplicación de Spotify.'; @override String get credentialsClientId => 'ID del cliente'; @@ -4157,20 +3750,16 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get settingsAppearanceSubtitle => 'Tema, colores, pantalla'; @override - String get settingsDownloadSubtitle => - 'Servicio, calidad, formato del nombre del archivo'; + String get settingsDownloadSubtitle => 'Servicio, calidad, formato del nombre del archivo'; @override - String get settingsOptionsSubtitle => - 'Alternativa, letras, carátula, actualizaciones'; + String get settingsOptionsSubtitle => 'Alternativa, letras, carátula, actualizaciones'; @override - String get settingsExtensionsSubtitle => - 'Administrar proveedores de descarga'; + String get settingsExtensionsSubtitle => 'Administrar proveedores de descarga'; @override - String get settingsLogsSubtitle => - 'Ver registros de aplicaciones para depuración'; + String get settingsLogsSubtitle => 'Ver registros de aplicaciones para depuración'; @override String get loadingSharedLink => 'Cargando enlace compartido...'; @@ -4261,8 +3850,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get trackLyricsNotAvailable => 'Letras no disponibles para este tema'; @override - String get trackLyricsTimeout => - 'Tiempo de espera agotado. Inténtalo de nuevo más tarde.'; + String get trackLyricsTimeout => 'Tiempo de espera agotado. Inténtalo de nuevo más tarde.'; @override String get trackLyricsLoadFailed => 'Error al cargar la letra'; @@ -4274,8 +3862,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get trackDeleteConfirmTitle => '¿Eliminar del dispositivo?'; @override - String get trackDeleteConfirmMessage => - 'Esto eliminará permanentemente el archivo descargado y lo eliminará de tu historial.'; + String get trackDeleteConfirmMessage => 'Esto eliminará permanentemente el archivo descargado y lo eliminará de tu historial.'; @override String trackCannotOpen(String message) { @@ -4397,8 +3984,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get extensionMinAppVersion => 'Versión Mínima de la aplicación'; @override - String get extensionCustomTrackMatching => - 'Coincidencia de pista personalizada'; + String get extensionCustomTrackMatching => 'Coincidencia de pista personalizada'; @override String get extensionPostProcessing => 'Post-Procesamiento'; @@ -4428,15 +4014,13 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get extensionsNoExtensions => 'No hay extensiones instaladas'; @override - String get extensionsNoExtensionsSubtitle => - 'Instalar archivos .spotiflac-ext para añadir nuevos proveedores'; + String get extensionsNoExtensionsSubtitle => 'Instalar archivos .spotiflac-ext para añadir nuevos proveedores'; @override String get extensionsInstallButton => 'Instalar extensión'; @override - String get extensionsInfoTip => - 'Las extensiones pueden añadir nuevos metadatos y proveedores de descargas. Sólo instalar extensiones desde fuentes confiables.'; + String get extensionsInfoTip => 'Las extensiones pueden añadir nuevos metadatos y proveedores de descargas. Sólo instalar extensiones desde fuentes confiables.'; @override String get extensionsInstalledSuccess => 'Extensión instalada correctamente'; @@ -4445,34 +4029,28 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get extensionsDownloadPriority => 'Prioridad de descarga'; @override - String get extensionsDownloadPrioritySubtitle => - 'Establecer orden de servicio de descarga'; + String get extensionsDownloadPrioritySubtitle => 'Establecer orden de servicio de descarga'; @override - String get extensionsNoDownloadProvider => - 'No hay extensiones con proveedor de descargas'; + String get extensionsNoDownloadProvider => 'No hay extensiones con proveedor de descargas'; @override String get extensionsMetadataPriority => 'Prioridad de los metadatos'; @override - String get extensionsMetadataPrioritySubtitle => - 'Establecer orden de búsqueda y metadatos'; + String get extensionsMetadataPrioritySubtitle => 'Establecer orden de búsqueda y metadatos'; @override - String get extensionsNoMetadataProvider => - 'No hay extensiones con el proveedor de metadatos'; + String get extensionsNoMetadataProvider => 'No hay extensiones con el proveedor de metadatos'; @override String get extensionsSearchProvider => 'Proveedor de búsqueda'; @override - String get extensionsNoCustomSearch => - 'No hay extensiones con búsqueda personalizada'; + String get extensionsNoCustomSearch => 'No hay extensiones con búsqueda personalizada'; @override - String get extensionsSearchProviderDescription => - 'Elegir qué servicio usar para buscar pistas'; + String get extensionsSearchProviderDescription => 'Elegir qué servicio usar para buscar pistas'; @override String get extensionsCustomSearch => 'Búsqueda personalizada'; @@ -4499,8 +4077,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get qualityHiResFlacMaxSubtitle => '24 bits / hasta 192kHz'; @override - String get qualityNote => - 'La calidad real depende de la disponibilidad de la pista del servicio'; + String get qualityNote => 'La calidad real depende de la disponibilidad de la pista del servicio'; @override String get downloadAskBeforeDownload => 'Preguntar antes de descargar'; @@ -4536,8 +4113,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get folderNone => 'Ninguna'; @override - String get folderNoneSubtitle => - 'Guardar todos los archivos directamente para descargar la carpeta'; + String get folderNoneSubtitle => 'Guardar todos los archivos directamente para descargar la carpeta'; @override String get folderArtist => 'Artista'; @@ -4555,8 +4131,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get folderArtistAlbum => 'Artista/Álbum'; @override - String get folderArtistAlbumSubtitle => - 'Nombre del Artista/Nombre del Álbum/Nombre del Archivo'; + String get folderArtistAlbumSubtitle => 'Nombre del Artista/Nombre del Álbum/Nombre del Archivo'; @override String get serviceTidal => 'Tidal'; @@ -4592,8 +4167,7 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get queueClearAll => 'Eliminar todo'; @override - String get queueClearAllMessage => - '¿Estás seguro de que quieres borrar todas las descargas?'; + String get queueClearAllMessage => '¿Estás seguro de que quieres borrar todas las descargas?'; @override String get queueEmpty => 'No hay descargas en cola'; @@ -4623,15 +4197,13 @@ class AppLocalizationsEsEs extends AppLocalizationsEs { String get albumFolderArtistAlbum => 'Artista / Álbum'; @override - String get albumFolderArtistAlbumSubtitle => - 'Álbumes/Nombre del Artista/Nombre del Álbum/'; + String get albumFolderArtistAlbumSubtitle => 'Álbumes/Nombre del Artista/Nombre del Álbum/'; @override String get albumFolderArtistYearAlbum => 'Artista / [Año] Álbum'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Álbumes/Nombre del Artista /[2005] Nombre del Álbum/'; + String get albumFolderArtistYearAlbumSubtitle => 'Álbumes/Nombre del Artista /[2005] Nombre del Álbum/'; @override String get albumFolderAlbumOnly => 'Sólo álbum'; diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 60503aad..9d299b5d 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -12,8 +12,7 @@ class AppLocalizationsFr extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -102,15 +101,13 @@ class AppLocalizationsFr extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsFr extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsFr extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsFr extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsFr extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsFr extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsFr extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsFr extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsFr extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsFr extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsFr extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsFr extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsFr extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsFr extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsFr extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsFr extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsFr extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsFr extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsFr extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsFr extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsFr extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsFr extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsFr extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsFr extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsFr extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsFr extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsFr extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsFr extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsFr extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsFr extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsFr extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsFr extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsFr extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsFr extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsFr extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsFr extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsFr extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsFr extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsFr extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsFr extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsFr extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsFr extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsFr extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsFr extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsFr extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsFr extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsFr extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsFr extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsFr extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsFr extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsFr extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsFr extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsFr extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsFr extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsFr extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsFr extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,81 +2362,4 @@ class AppLocalizationsFr extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_hi.dart b/lib/l10n/app_localizations_hi.dart index aa2ad870..a4c3f6e8 100644 --- a/lib/l10n/app_localizations_hi.dart +++ b/lib/l10n/app_localizations_hi.dart @@ -12,8 +12,7 @@ class AppLocalizationsHi extends AppLocalizations { String get appName => 'SpotiFlac'; @override - String get appDescription => - 'स्पॉटीफाई ट्रैक डाउनलोड करें टाइडल, क्वाबज एवं एवं अमेजन म्यूजिक से उच्चतम क्वालिटी में।'; + String get appDescription => 'स्पॉटीफाई ट्रैक डाउनलोड करें टाइडल, क्वाबज एवं एवं अमेजन म्यूजिक से उच्चतम क्वालिटी में।'; @override String get navHome => 'होम'; @@ -102,15 +101,13 @@ class AppLocalizationsHi extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsHi extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsHi extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsHi extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsHi extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsHi extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsHi extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsHi extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsHi extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsHi extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsHi extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsHi extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsHi extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsHi extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsHi extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsHi extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsHi extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsHi extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsHi extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsHi extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsHi extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsHi extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsHi extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsHi extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsHi extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsHi extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsHi extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsHi extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsHi extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsHi extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsHi extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsHi extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsHi extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsHi extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsHi extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsHi extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsHi extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsHi extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsHi extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsHi extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsHi extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsHi extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsHi extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsHi extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsHi extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsHi extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsHi extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsHi extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsHi extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsHi extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsHi extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsHi extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsHi extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsHi extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsHi extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsHi extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,81 +2362,4 @@ class AppLocalizationsHi extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_id.dart b/lib/l10n/app_localizations_id.dart index b5b60fee..4544b590 100644 --- a/lib/l10n/app_localizations_id.dart +++ b/lib/l10n/app_localizations_id.dart @@ -12,8 +12,7 @@ class AppLocalizationsId extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Unduh lagu Spotify dalam kualitas lossless dari Tidal, Qobuz, dan Amazon Music.'; + String get appDescription => 'Unduh lagu Spotify dalam kualitas lossless dari Tidal, Qobuz, dan Amazon Music.'; @override String get navHome => 'Beranda'; @@ -96,22 +95,19 @@ class AppLocalizationsId extends AppLocalizations { String get historyNoDownloads => 'Tidak ada riwayat unduhan'; @override - String get historyNoDownloadsSubtitle => - 'Lagu yang diunduh akan muncul di sini'; + String get historyNoDownloadsSubtitle => 'Lagu yang diunduh akan muncul di sini'; @override String get historyNoAlbums => 'Tidak ada unduhan album'; @override - String get historyNoAlbumsSubtitle => - 'Unduh beberapa lagu dari album untuk melihatnya di sini'; + String get historyNoAlbumsSubtitle => 'Unduh beberapa lagu dari album untuk melihatnya di sini'; @override String get historyNoSingles => 'Tidak ada unduhan single'; @override - String get historyNoSinglesSubtitle => - 'Unduhan lagu satuan akan muncul di sini'; + String get historyNoSinglesSubtitle => 'Unduhan lagu satuan akan muncul di sini'; @override String get historySearchHint => 'Search history...'; @@ -150,8 +146,7 @@ class AppLocalizationsId extends AppLocalizations { String get downloadDefaultService => 'Layanan Default'; @override - String get downloadDefaultServiceSubtitle => - 'Layanan yang digunakan untuk unduhan'; + String get downloadDefaultServiceSubtitle => 'Layanan yang digunakan untuk unduhan'; @override String get downloadDefaultQuality => 'Kualitas Default'; @@ -160,8 +155,7 @@ class AppLocalizationsId extends AppLocalizations { String get downloadAskQuality => 'Tanya Kualitas Sebelum Unduh'; @override - String get downloadAskQualitySubtitle => - 'Tampilkan pemilih kualitas untuk setiap unduhan'; + String get downloadAskQualitySubtitle => 'Tampilkan pemilih kualitas untuk setiap unduhan'; @override String get downloadFilenameFormat => 'Format Nama File'; @@ -173,8 +167,7 @@ class AppLocalizationsId extends AppLocalizations { String get downloadSeparateSingles => 'Pisahkan Single'; @override - String get downloadSeparateSinglesSubtitle => - 'Letakkan lagu satuan di folder terpisah'; + String get downloadSeparateSinglesSubtitle => 'Letakkan lagu satuan di folder terpisah'; @override String get qualityBest => 'Terbaik'; @@ -207,8 +200,7 @@ class AppLocalizationsId extends AppLocalizations { String get appearanceDynamicColor => 'Warna Dinamis'; @override - String get appearanceDynamicColorSubtitle => - 'Gunakan warna dari wallpaper Anda'; + String get appearanceDynamicColorSubtitle => 'Gunakan warna dari wallpaper Anda'; @override String get appearanceAccentColor => 'Warna Aksen'; @@ -232,8 +224,7 @@ class AppLocalizationsId extends AppLocalizations { String get optionsPrimaryProvider => 'Provider Utama'; @override - String get optionsPrimaryProviderSubtitle => - 'Layanan yang digunakan saat mencari berdasarkan nama lagu.'; + String get optionsPrimaryProviderSubtitle => 'Layanan yang digunakan saat mencari berdasarkan nama lagu.'; @override String optionsUsingExtension(String extensionName) { @@ -241,40 +232,34 @@ class AppLocalizationsId extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Ketuk Deezer atau Spotify untuk beralih dari ekstensi'; + String get optionsSwitchBack => 'Ketuk Deezer atau Spotify untuk beralih dari ekstensi'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Coba layanan lain jika unduhan gagal'; + String get optionsAutoFallbackSubtitle => 'Coba layanan lain jika unduhan gagal'; @override String get optionsUseExtensionProviders => 'Gunakan Provider Ekstensi'; @override - String get optionsUseExtensionProvidersOn => - 'Ekstensi akan dicoba terlebih dahulu'; + String get optionsUseExtensionProvidersOn => 'Ekstensi akan dicoba terlebih dahulu'; @override - String get optionsUseExtensionProvidersOff => - 'Hanya menggunakan provider bawaan'; + String get optionsUseExtensionProvidersOff => 'Hanya menggunakan provider bawaan'; @override String get optionsEmbedLyrics => 'Sematkan Lirik'; @override - String get optionsEmbedLyricsSubtitle => - 'Sematkan lirik sinkron ke file FLAC'; + String get optionsEmbedLyricsSubtitle => 'Sematkan lirik sinkron ke file FLAC'; @override String get optionsMaxQualityCover => 'Cover Kualitas Maksimal'; @override - String get optionsMaxQualityCoverSubtitle => - 'Unduh cover art resolusi tertinggi'; + String get optionsMaxQualityCoverSubtitle => 'Unduh cover art resolusi tertinggi'; @override String get optionsConcurrentDownloads => 'Unduhan Bersamaan'; @@ -288,8 +273,7 @@ class AppLocalizationsId extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Unduhan paralel dapat memicu pembatasan rate'; + String get optionsConcurrentWarning => 'Unduhan paralel dapat memicu pembatasan rate'; @override String get optionsExtensionStore => 'Toko Ekstensi'; @@ -313,8 +297,7 @@ class AppLocalizationsId extends AppLocalizations { String get optionsUpdateChannelPreview => 'Dapatkan rilis preview'; @override - String get optionsUpdateChannelWarning => - 'Preview mungkin mengandung bug atau fitur belum lengkap'; + String get optionsUpdateChannelWarning => 'Preview mungkin mengandung bug atau fitur belum lengkap'; @override String get optionsClearHistory => 'Hapus Riwayat Unduhan'; @@ -340,12 +323,10 @@ class AppLocalizationsId extends AppLocalizations { } @override - String get optionsSpotifyCredentialsRequired => - 'Diperlukan - ketuk untuk mengatur'; + String get optionsSpotifyCredentialsRequired => 'Diperlukan - ketuk untuk mengatur'; @override - String get optionsSpotifyWarning => - 'Spotify memerlukan kredensial API Anda sendiri. Dapatkan gratis dari developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify memerlukan kredensial API Anda sendiri. Dapatkan gratis dari developer.spotify.com'; @override String get extensionsTitle => 'Ekstensi'; @@ -409,8 +390,7 @@ class AppLocalizationsId extends AppLocalizations { String get aboutOriginalCreator => 'Pembuat SpotiFLAC asli'; @override - String get aboutLogoArtist => - 'Seniman berbakat yang membuat logo aplikasi kita yang indah!'; + String get aboutLogoArtist => 'Seniman berbakat yang membuat logo aplikasi kita yang indah!'; @override String get aboutTranslators => 'Translators'; @@ -437,8 +417,7 @@ class AppLocalizationsId extends AppLocalizations { String get aboutFeatureRequest => 'Permintaan fitur'; @override - String get aboutFeatureRequestSubtitle => - 'Sarankan fitur baru untuk aplikasi'; + String get aboutFeatureRequestSubtitle => 'Sarankan fitur baru untuk aplikasi'; @override String get aboutTelegramChannel => 'Telegram Channel'; @@ -471,34 +450,28 @@ class AppLocalizationsId extends AppLocalizations { String get aboutVersion => 'Versi'; @override - String get aboutBinimumDesc => - 'Pembuat QQDL & HiFi API. Tanpa API ini, unduhan Tidal tidak akan ada!'; + String get aboutBinimumDesc => 'Pembuat QQDL & HiFi API. Tanpa API ini, unduhan Tidal tidak akan ada!'; @override - String get aboutSachinsenalDesc => - 'Pembuat proyek HiFi asli. Fondasi dari integrasi Tidal!'; + String get aboutSachinsenalDesc => 'Pembuat proyek HiFi asli. Fondasi dari integrasi Tidal!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'API luar biasa untuk unduhan Amazon Music. Terima kasih sudah membuatnya gratis!'; + String get aboutDoubleDoubleDesc => 'API luar biasa untuk unduhan Amazon Music. Terima kasih sudah membuatnya gratis!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'API streaming Qobuz terbaik. Unduhan Hi-Res tidak akan mungkin tanpa ini!'; + String get aboutDabMusicDesc => 'API streaming Qobuz terbaik. Unduhan Hi-Res tidak akan mungkin tanpa ini!'; @override - String get aboutAppDescription => - 'Unduh lagu Spotify dalam kualitas lossless dari Tidal, Qobuz, dan Amazon Music.'; + String get aboutAppDescription => 'Unduh lagu Spotify dalam kualitas lossless dari Tidal, Qobuz, dan Amazon Music.'; @override String get albumTitle => 'Album'; @@ -603,8 +576,7 @@ class AppLocalizationsId extends AppLocalizations { String get setupStoragePermission => 'Izin Penyimpanan'; @override - String get setupStoragePermissionSubtitle => - 'Diperlukan untuk menyimpan file unduhan'; + String get setupStoragePermissionSubtitle => 'Diperlukan untuk menyimpan file unduhan'; @override String get setupStoragePermissionGranted => 'Izin diberikan'; @@ -631,19 +603,16 @@ class AppLocalizationsId extends AppLocalizations { String get setupStorageAccessRequired => 'Akses Penyimpanan Diperlukan'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC membutuhkan izin \"Akses semua file\" untuk menyimpan file musik ke folder pilihan Anda.'; + String get setupStorageAccessMessage => 'SpotiFLAC membutuhkan izin \"Akses semua file\" untuk menyimpan file musik ke folder pilihan Anda.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ memerlukan izin \"Akses semua file\" untuk menyimpan file ke folder unduhan pilihan Anda.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ memerlukan izin \"Akses semua file\" untuk menyimpan file ke folder unduhan pilihan Anda.'; @override String get setupOpenSettings => 'Buka Pengaturan'; @override - String get setupPermissionDeniedMessage => - 'Izin ditolak. Harap berikan semua izin untuk melanjutkan.'; + String get setupPermissionDeniedMessage => 'Izin ditolak. Harap berikan semua izin untuk melanjutkan.'; @override String setupPermissionRequired(String permissionType) { @@ -662,8 +631,7 @@ class AppLocalizationsId extends AppLocalizations { String get setupUseDefaultFolder => 'Gunakan Folder Default?'; @override - String get setupNoFolderSelected => - 'Tidak ada folder dipilih. Apakah Anda ingin menggunakan folder Musik default?'; + String get setupNoFolderSelected => 'Tidak ada folder dipilih. Apakah Anda ingin menggunakan folder Musik default?'; @override String get setupUseDefault => 'Gunakan Default'; @@ -672,15 +640,13 @@ class AppLocalizationsId extends AppLocalizations { String get setupDownloadLocationTitle => 'Lokasi Unduhan'; @override - String get setupDownloadLocationIosMessage => - 'Di iOS, unduhan disimpan ke folder Documents aplikasi. Anda dapat mengaksesnya melalui aplikasi Files.'; + String get setupDownloadLocationIosMessage => 'Di iOS, unduhan disimpan ke folder Documents aplikasi. Anda dapat mengaksesnya melalui aplikasi Files.'; @override String get setupAppDocumentsFolder => 'Folder Documents Aplikasi'; @override - String get setupAppDocumentsFolderSubtitle => - 'Direkomendasikan - dapat diakses via aplikasi Files'; + String get setupAppDocumentsFolderSubtitle => 'Direkomendasikan - dapat diakses via aplikasi Files'; @override String get setupChooseFromFiles => 'Pilih dari Files'; @@ -689,12 +655,10 @@ class AppLocalizationsId extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Pilih lokasi iCloud atau lainnya'; @override - String get setupIosEmptyFolderWarning => - 'Batasan iOS: Folder kosong tidak dapat dipilih. Pilih folder dengan minimal satu file.'; + String get setupIosEmptyFolderWarning => 'Batasan iOS: Folder kosong tidak dapat dipilih. Pilih folder dengan minimal satu file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Unduh lagu Spotify dalam format FLAC'; @@ -721,8 +685,7 @@ class AppLocalizationsId extends AppLocalizations { String get setupStorageRequired => 'Izin Penyimpanan Diperlukan'; @override - String get setupStorageDescription => - 'SpotiFLAC membutuhkan izin penyimpanan untuk menyimpan file musik yang diunduh.'; + String get setupStorageDescription => 'SpotiFLAC membutuhkan izin penyimpanan untuk menyimpan file musik yang diunduh.'; @override String get setupNotificationGranted => 'Izin Notifikasi Diberikan!'; @@ -731,8 +694,7 @@ class AppLocalizationsId extends AppLocalizations { String get setupNotificationEnable => 'Aktifkan Notifikasi'; @override - String get setupNotificationDescription => - 'Dapatkan pemberitahuan saat unduhan selesai atau membutuhkan perhatian.'; + String get setupNotificationDescription => 'Dapatkan pemberitahuan saat unduhan selesai atau membutuhkan perhatian.'; @override String get setupFolderSelected => 'Folder Unduhan Dipilih!'; @@ -741,8 +703,7 @@ class AppLocalizationsId extends AppLocalizations { String get setupFolderChoose => 'Pilih Folder Unduhan'; @override - String get setupFolderDescription => - 'Pilih folder tempat musik yang diunduh akan disimpan.'; + String get setupFolderDescription => 'Pilih folder tempat musik yang diunduh akan disimpan.'; @override String get setupChangeFolder => 'Ubah Folder'; @@ -754,8 +715,7 @@ class AppLocalizationsId extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Opsional)'; @override - String get setupSpotifyApiDescription => - 'Tambahkan kredensial Spotify API untuk hasil pencarian lebih baik dan akses ke konten eksklusif Spotify.'; + String get setupSpotifyApiDescription => 'Tambahkan kredensial Spotify API untuk hasil pencarian lebih baik dan akses ke konten eksklusif Spotify.'; @override String get setupUseSpotifyApi => 'Gunakan Spotify API'; @@ -773,23 +733,19 @@ class AppLocalizationsId extends AppLocalizations { String get setupEnterClientSecret => 'Masukkan Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Dapatkan kredensial API gratis dari Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Dapatkan kredensial API gratis dari Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Aktifkan Notifikasi'; @override - String get setupProceedToNextStep => - 'Anda dapat melanjutkan ke langkah berikutnya.'; + String get setupProceedToNextStep => 'Anda dapat melanjutkan ke langkah berikutnya.'; @override - String get setupNotificationProgressDescription => - 'Anda akan menerima notifikasi progres unduhan.'; + String get setupNotificationProgressDescription => 'Anda akan menerima notifikasi progres unduhan.'; @override - String get setupNotificationBackgroundDescription => - 'Dapatkan notifikasi tentang progres dan penyelesaian unduhan. Ini membantu Anda melacak unduhan saat aplikasi di latar belakang.'; + String get setupNotificationBackgroundDescription => 'Dapatkan notifikasi tentang progres dan penyelesaian unduhan. Ini membantu Anda melacak unduhan saat aplikasi di latar belakang.'; @override String get setupSkipForNow => 'Lewati untuk sekarang'; @@ -807,12 +763,10 @@ class AppLocalizationsId extends AppLocalizations { String get setupSkipAndStart => 'Lewati & Mulai'; @override - String get setupAllowAccessToManageFiles => - 'Harap aktifkan \"Izinkan akses untuk mengelola semua file\" di layar berikutnya.'; + String get setupAllowAccessToManageFiles => 'Harap aktifkan \"Izinkan akses untuk mengelola semua file\" di layar berikutnya.'; @override - String get setupGetCredentialsFromSpotify => - 'Dapatkan kredensial dari developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Dapatkan kredensial dari developer.spotify.com'; @override String get dialogCancel => 'Batal'; @@ -863,8 +817,7 @@ class AppLocalizationsId extends AppLocalizations { String get dialogDiscardChanges => 'Buang Perubahan?'; @override - String get dialogUnsavedChanges => - 'Anda memiliki perubahan yang belum disimpan. Apakah Anda ingin membuangnya?'; + String get dialogUnsavedChanges => 'Anda memiliki perubahan yang belum disimpan. Apakah Anda ingin membuangnya?'; @override String get dialogDownloadFailed => 'Unduhan Gagal'; @@ -882,8 +835,7 @@ class AppLocalizationsId extends AppLocalizations { String get dialogClearAll => 'Hapus Semua'; @override - String get dialogClearAllDownloads => - 'Apakah Anda yakin ingin menghapus semua unduhan?'; + String get dialogClearAllDownloads => 'Apakah Anda yakin ingin menghapus semua unduhan?'; @override String get dialogRemoveFromDevice => 'Hapus dari perangkat?'; @@ -892,8 +844,7 @@ class AppLocalizationsId extends AppLocalizations { String get dialogRemoveExtension => 'Hapus Ekstensi'; @override - String get dialogRemoveExtensionMessage => - 'Apakah Anda yakin ingin menghapus ekstensi ini? Tindakan ini tidak dapat dibatalkan.'; + String get dialogRemoveExtensionMessage => 'Apakah Anda yakin ingin menghapus ekstensi ini? Tindakan ini tidak dapat dibatalkan.'; @override String get dialogUninstallExtension => 'Copot Ekstensi?'; @@ -907,8 +858,7 @@ class AppLocalizationsId extends AppLocalizations { String get dialogClearHistoryTitle => 'Hapus Riwayat'; @override - String get dialogClearHistoryMessage => - 'Apakah Anda yakin ingin menghapus semua riwayat unduhan? Ini tidak dapat dibatalkan.'; + String get dialogClearHistoryMessage => 'Apakah Anda yakin ingin menghapus semua riwayat unduhan? Ini tidak dapat dibatalkan.'; @override String get dialogDeleteSelectedTitle => 'Hapus yang Dipilih'; @@ -1003,8 +953,7 @@ class AppLocalizationsId extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Prioritas provider disimpan'; @override - String get snackbarMetadataProviderSaved => - 'Prioritas provider metadata disimpan'; + String get snackbarMetadataProviderSaved => 'Prioritas provider metadata disimpan'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1026,8 +975,7 @@ class AppLocalizationsId extends AppLocalizations { String get errorRateLimited => 'Dibatasi'; @override - String get errorRateLimitedMessage => - 'Terlalu banyak permintaan. Harap tunggu sebentar sebelum mencari lagi.'; + String get errorRateLimitedMessage => 'Terlalu banyak permintaan. Harap tunggu sebentar sebelum mencari lagi.'; @override String errorFailedToLoad(String item) { @@ -1194,23 +1142,19 @@ class AppLocalizationsId extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Berdasarkan Artis & Album'; @override - String get folderOrganizationDescription => - 'Atur file yang diunduh ke dalam folder'; + String get folderOrganizationDescription => 'Atur file yang diunduh ke dalam folder'; @override String get folderOrganizationNoneSubtitle => 'Semua file di folder unduhan'; @override - String get folderOrganizationByArtistSubtitle => - 'Folder terpisah untuk setiap artis'; + String get folderOrganizationByArtistSubtitle => 'Folder terpisah untuk setiap artis'; @override - String get folderOrganizationByAlbumSubtitle => - 'Folder terpisah untuk setiap album'; + String get folderOrganizationByAlbumSubtitle => 'Folder terpisah untuk setiap album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Folder bersarang untuk artis dan album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Folder bersarang untuk artis dan album'; @override String get updateAvailable => 'Pembaruan Tersedia'; @@ -1263,19 +1207,16 @@ class AppLocalizationsId extends AppLocalizations { String get providerPriority => 'Prioritas Provider'; @override - String get providerPrioritySubtitle => - 'Seret untuk mengatur ulang provider unduhan'; + String get providerPrioritySubtitle => 'Seret untuk mengatur ulang provider unduhan'; @override String get providerPriorityTitle => 'Prioritas Provider'; @override - String get providerPriorityDescription => - 'Seret untuk mengatur ulang urutan provider unduhan. Aplikasi akan mencoba provider dari atas ke bawah saat mengunduh lagu.'; + String get providerPriorityDescription => 'Seret untuk mengatur ulang urutan provider unduhan. Aplikasi akan mencoba provider dari atas ke bawah saat mengunduh lagu.'; @override - String get providerPriorityInfo => - 'Jika lagu tidak tersedia di provider pertama, aplikasi akan otomatis mencoba yang berikutnya.'; + String get providerPriorityInfo => 'Jika lagu tidak tersedia di provider pertama, aplikasi akan otomatis mencoba yang berikutnya.'; @override String get providerBuiltIn => 'Bawaan'; @@ -1287,19 +1228,16 @@ class AppLocalizationsId extends AppLocalizations { String get metadataProviderPriority => 'Prioritas Provider Metadata'; @override - String get metadataProviderPrioritySubtitle => - 'Urutan yang digunakan saat mengambil metadata lagu'; + String get metadataProviderPrioritySubtitle => 'Urutan yang digunakan saat mengambil metadata lagu'; @override String get metadataProviderPriorityTitle => 'Prioritas Metadata'; @override - String get metadataProviderPriorityDescription => - 'Seret untuk mengatur ulang urutan provider metadata. Aplikasi akan mencoba provider dari atas ke bawah saat mencari lagu dan mengambil metadata.'; + String get metadataProviderPriorityDescription => 'Seret untuk mengatur ulang urutan provider metadata. Aplikasi akan mencoba provider dari atas ke bawah saat mencari lagu dan mengambil metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer tidak memiliki batas rate dan direkomendasikan sebagai utama. Spotify mungkin membatasi rate setelah banyak permintaan.'; + String get metadataProviderPriorityInfo => 'Deezer tidak memiliki batas rate dan direkomendasikan sebagai utama. Spotify mungkin membatasi rate setelah banyak permintaan.'; @override String get metadataNoRateLimits => 'Tidak ada batas rate'; @@ -1344,8 +1282,7 @@ class AppLocalizationsId extends AppLocalizations { String get logClearLogsTitle => 'Hapus Log'; @override - String get logClearLogsMessage => - 'Apakah Anda yakin ingin menghapus semua log?'; + String get logClearLogsMessage => 'Apakah Anda yakin ingin menghapus semua log?'; @override String get logIspBlocking => 'PEMBLOKIRAN ISP TERDETEKSI'; @@ -1366,27 +1303,22 @@ class AppLocalizationsId extends AppLocalizations { String get logNoLogsYet => 'Belum ada log'; @override - String get logNoLogsYetSubtitle => - 'Log akan muncul di sini saat Anda menggunakan aplikasi'; + String get logNoLogsYetSubtitle => 'Log akan muncul di sini saat Anda menggunakan aplikasi'; @override String get logIssueSummary => 'Ringkasan Masalah'; @override - String get logIspBlockingDescription => - 'ISP Anda mungkin memblokir akses ke layanan unduhan'; + String get logIspBlockingDescription => 'ISP Anda mungkin memblokir akses ke layanan unduhan'; @override - String get logIspBlockingSuggestion => - 'Coba gunakan VPN atau ubah DNS ke 1.1.1.1 atau 8.8.8.8'; + String get logIspBlockingSuggestion => 'Coba gunakan VPN atau ubah DNS ke 1.1.1.1 atau 8.8.8.8'; @override - String get logRateLimitedDescription => - 'Terlalu banyak permintaan ke layanan'; + String get logRateLimitedDescription => 'Terlalu banyak permintaan ke layanan'; @override - String get logRateLimitedSuggestion => - 'Tunggu beberapa menit sebelum mencoba lagi'; + String get logRateLimitedSuggestion => 'Tunggu beberapa menit sebelum mencoba lagi'; @override String get logNetworkErrorDescription => 'Masalah koneksi terdeteksi'; @@ -1395,12 +1327,10 @@ class AppLocalizationsId extends AppLocalizations { String get logNetworkErrorSuggestion => 'Periksa koneksi internet Anda'; @override - String get logTrackNotFoundDescription => - 'Beberapa lagu tidak dapat ditemukan di layanan unduhan'; + String get logTrackNotFoundDescription => 'Beberapa lagu tidak dapat ditemukan di layanan unduhan'; @override - String get logTrackNotFoundSuggestion => - 'Lagu mungkin tidak tersedia dalam kualitas lossless'; + String get logTrackNotFoundSuggestion => 'Lagu mungkin tidak tersedia dalam kualitas lossless'; @override String logTotalErrors(int count) { @@ -1426,8 +1356,7 @@ class AppLocalizationsId extends AppLocalizations { String get credentialsTitle => 'Kredensial Spotify'; @override - String get credentialsDescription => - 'Masukkan Client ID dan Secret Anda untuk menggunakan kuota aplikasi Spotify Anda sendiri.'; + String get credentialsDescription => 'Masukkan Client ID dan Secret Anda untuk menggunakan kuota aplikasi Spotify Anda sendiri.'; @override String get credentialsClientId => 'Client ID'; @@ -1481,8 +1410,7 @@ class AppLocalizationsId extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1494,8 +1422,7 @@ class AppLocalizationsId extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1655,8 +1582,7 @@ class AppLocalizationsId extends AppLocalizations { String get trackDeleteConfirmTitle => 'Hapus dari perangkat?'; @override - String get trackDeleteConfirmMessage => - 'Ini akan menghapus file unduhan secara permanen dan menghapusnya dari riwayat Anda.'; + String get trackDeleteConfirmMessage => 'Ini akan menghapus file unduhan secara permanen dan menghapusnya dari riwayat Anda.'; @override String trackCannotOpen(String message) { @@ -1808,15 +1734,13 @@ class AppLocalizationsId extends AppLocalizations { String get extensionsNoExtensions => 'Tidak ada ekstensi terpasang'; @override - String get extensionsNoExtensionsSubtitle => - 'Pasang file .spotiflac-ext untuk menambahkan provider baru'; + String get extensionsNoExtensionsSubtitle => 'Pasang file .spotiflac-ext untuk menambahkan provider baru'; @override String get extensionsInstallButton => 'Pasang Ekstensi'; @override - String get extensionsInfoTip => - 'Ekstensi dapat menambahkan provider metadata dan unduhan baru. Hanya pasang ekstensi dari sumber terpercaya.'; + String get extensionsInfoTip => 'Ekstensi dapat menambahkan provider metadata dan unduhan baru. Hanya pasang ekstensi dari sumber terpercaya.'; @override String get extensionsInstalledSuccess => 'Ekstensi berhasil dipasang'; @@ -1825,34 +1749,28 @@ class AppLocalizationsId extends AppLocalizations { String get extensionsDownloadPriority => 'Prioritas Unduhan'; @override - String get extensionsDownloadPrioritySubtitle => - 'Atur urutan layanan unduhan'; + String get extensionsDownloadPrioritySubtitle => 'Atur urutan layanan unduhan'; @override - String get extensionsNoDownloadProvider => - 'Tidak ada ekstensi dengan provider unduhan'; + String get extensionsNoDownloadProvider => 'Tidak ada ekstensi dengan provider unduhan'; @override String get extensionsMetadataPriority => 'Prioritas Metadata'; @override - String get extensionsMetadataPrioritySubtitle => - 'Atur urutan sumber pencarian & metadata'; + String get extensionsMetadataPrioritySubtitle => 'Atur urutan sumber pencarian & metadata'; @override - String get extensionsNoMetadataProvider => - 'Tidak ada ekstensi dengan provider metadata'; + String get extensionsNoMetadataProvider => 'Tidak ada ekstensi dengan provider metadata'; @override String get extensionsSearchProvider => 'Provider Pencarian'; @override - String get extensionsNoCustomSearch => - 'Tidak ada ekstensi dengan pencarian kustom'; + String get extensionsNoCustomSearch => 'Tidak ada ekstensi dengan pencarian kustom'; @override - String get extensionsSearchProviderDescription => - 'Pilih layanan yang digunakan untuk mencari lagu'; + String get extensionsSearchProviderDescription => 'Pilih layanan yang digunakan untuk mencari lagu'; @override String get extensionsCustomSearch => 'Pencarian kustom'; @@ -1894,8 +1812,7 @@ class AppLocalizationsId extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1907,12 +1824,10 @@ class AppLocalizationsId extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Kualitas sebenarnya tergantung ketersediaan lagu dari layanan'; + String get qualityNote => 'Kualitas sebenarnya tergantung ketersediaan lagu dari layanan'; @override String get downloadAskBeforeDownload => 'Tanya Sebelum Unduh'; @@ -1948,8 +1863,7 @@ class AppLocalizationsId extends AppLocalizations { String get folderNone => 'Tidak ada'; @override - String get folderNoneSubtitle => - 'Simpan semua file langsung ke folder unduhan'; + String get folderNoneSubtitle => 'Simpan semua file langsung ke folder unduhan'; @override String get folderArtist => 'Artis'; @@ -2003,15 +1917,13 @@ class AppLocalizationsId extends AppLocalizations { String get queueClearAll => 'Hapus Semua'; @override - String get queueClearAllMessage => - 'Apakah Anda yakin ingin menghapus semua unduhan?'; + String get queueClearAllMessage => 'Apakah Anda yakin ingin menghapus semua unduhan?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2023,8 +1935,7 @@ class AppLocalizationsId extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2036,170 +1947,7 @@ class AppLocalizationsId extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'Tidak ada unduhan dalam antrian'; @@ -2235,8 +1983,7 @@ class AppLocalizationsId extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artis / [Tahun] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Nama Artis/[2005] Nama Album/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Nama Artis/[2005] Nama Album/'; @override String get albumFolderAlbumOnly => 'Album Saja'; @@ -2254,8 +2001,7 @@ class AppLocalizationsId extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Hapus yang Dipilih'; @@ -2365,8 +2111,7 @@ class AppLocalizationsId extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2413,16 +2158,13 @@ class AppLocalizationsId extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2443,8 +2185,7 @@ class AppLocalizationsId extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2456,8 +2197,7 @@ class AppLocalizationsId extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2475,8 +2215,7 @@ class AppLocalizationsId extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2488,15 +2227,13 @@ class AppLocalizationsId extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2534,8 +2271,7 @@ class AppLocalizationsId extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2626,81 +2362,4 @@ class AppLocalizationsId extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart index 8d295cd0..12824326 100644 --- a/lib/l10n/app_localizations_ja.dart +++ b/lib/l10n/app_localizations_ja.dart @@ -12,8 +12,7 @@ class AppLocalizationsJa extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Tidal、Qobuz、Amazon Music から Spotify のトラックをロスレス品質でダウンロードします。'; + String get appDescription => 'Tidal、Qobuz、Amazon Music から Spotify のトラックをロスレス品質でダウンロードします。'; @override String get navHome => 'ホーム'; @@ -102,15 +101,13 @@ class AppLocalizationsJa extends AppLocalizations { String get historyNoAlbums => 'アルバムのダウンロードはありません'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'シングルのダウンロードはありません'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => '検索履歴...'; @@ -158,8 +155,7 @@ class AppLocalizationsJa extends AppLocalizations { String get downloadAskQuality => 'ダウンロード前に品質を確認する'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'ファイル名の形式'; @@ -171,8 +167,7 @@ class AppLocalizationsJa extends AppLocalizations { String get downloadSeparateSingles => 'シングルを分割'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'おすすめ'; @@ -229,8 +224,7 @@ class AppLocalizationsJa extends AppLocalizations { String get optionsPrimaryProvider => 'プライマリーのプロバイダー'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsJa extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => '拡張のプロバイダーを使用する'; @@ -281,8 +273,7 @@ class AppLocalizationsJa extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => '拡張ストア'; @@ -294,8 +285,7 @@ class AppLocalizationsJa extends AppLocalizations { String get optionsCheckUpdates => '更新を確認'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => '更新チャンネル'; @@ -307,8 +297,7 @@ class AppLocalizationsJa extends AppLocalizations { String get optionsUpdateChannelPreview => 'プレビューリリースを入手'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'ダウンロード履歴を消去'; @@ -337,8 +326,7 @@ class AppLocalizationsJa extends AppLocalizations { String get optionsSpotifyCredentialsRequired => '必須 - タップで設定'; @override - String get optionsSpotifyWarning => - 'Spotify は独自の API 認証情報が必要です。developer.spotify.com から取得できます。'; + String get optionsSpotifyWarning => 'Spotify は独自の API 認証情報が必要です。developer.spotify.com から取得できます。'; @override String get extensionsTitle => '拡張'; @@ -462,34 +450,28 @@ class AppLocalizationsJa extends AppLocalizations { String get aboutVersion => 'バージョン'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Tidal、Qobuz、Amazon Music から Spotify のトラックをロスレス品質でダウンロードします。'; + String get aboutAppDescription => 'Tidal、Qobuz、Amazon Music から Spotify のトラックをロスレス品質でダウンロードします。'; @override String get albumTitle => 'アルバム'; @@ -621,19 +603,16 @@ class AppLocalizationsJa extends AppLocalizations { String get setupStorageAccessRequired => 'ストレージアクセスが必要です'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => '設定を開く'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -652,8 +631,7 @@ class AppLocalizationsJa extends AppLocalizations { String get setupUseDefaultFolder => 'デフォルトのフォルダを使用しますか?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'デフォルトを使用する'; @@ -662,15 +640,13 @@ class AppLocalizationsJa extends AppLocalizations { String get setupDownloadLocationTitle => 'ダウンロード先'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'アプリのドキュメントフォルダ'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'ファイルから選択'; @@ -679,12 +655,10 @@ class AppLocalizationsJa extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'iCloud またはその他の場所を選択'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Spotify のトラックを FLAC でダウンロード'; @@ -711,8 +685,7 @@ class AppLocalizationsJa extends AppLocalizations { String get setupStorageRequired => 'ストレージの権限が必要です'; @override - String get setupStorageDescription => - 'SpotiFLAC はダウンロードした音楽ファイルを保存するためにストレージの権限が必要です。'; + String get setupStorageDescription => 'SpotiFLAC はダウンロードした音楽ファイルを保存するためにストレージの権限が必要です。'; @override String get setupNotificationGranted => '通知の権限が許可されました!'; @@ -721,8 +694,7 @@ class AppLocalizationsJa extends AppLocalizations { String get setupNotificationEnable => '通知を有効化する'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'ダウンロードフォルダが選択済みです!'; @@ -731,8 +703,7 @@ class AppLocalizationsJa extends AppLocalizations { String get setupFolderChoose => 'ダウンロードフォルダを選択'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'フォルダを変更'; @@ -744,8 +715,7 @@ class AppLocalizationsJa extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (任意)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Spotify API を使用する'; @@ -763,8 +733,7 @@ class AppLocalizationsJa extends AppLocalizations { String get setupEnterClientSecret => 'Spotify クライアントシークレットを入力'; @override - String get setupGetFreeCredentials => - 'Spotify 開発者ダッシュボードから無料の API 認証情報を取得します。'; + String get setupGetFreeCredentials => 'Spotify 開発者ダッシュボードから無料の API 認証情報を取得します。'; @override String get setupEnableNotifications => '通知を有効化する'; @@ -773,12 +742,10 @@ class AppLocalizationsJa extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => '今はスキップ'; @@ -796,12 +763,10 @@ class AppLocalizationsJa extends AppLocalizations { String get setupSkipAndStart => 'スキップと開始'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'developer.spotify.com から認証情報を取得します'; + String get setupGetCredentialsFromSpotify => 'developer.spotify.com から認証情報を取得します'; @override String get dialogCancel => 'キャンセル'; @@ -852,8 +817,7 @@ class AppLocalizationsJa extends AppLocalizations { String get dialogDiscardChanges => '変更を破棄しますか?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'ダウンロードに失敗しました'; @@ -871,8 +835,7 @@ class AppLocalizationsJa extends AppLocalizations { String get dialogClearAll => 'すべて消去'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'デバイスから削除しますか?'; @@ -881,8 +844,7 @@ class AppLocalizationsJa extends AppLocalizations { String get dialogRemoveExtension => '拡張を削除'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => '拡張をアンインストールしますか?'; @@ -896,8 +858,7 @@ class AppLocalizationsJa extends AppLocalizations { String get dialogClearHistoryTitle => '履歴を消去'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => '選択済みを削除'; @@ -1014,8 +975,7 @@ class AppLocalizationsJa extends AppLocalizations { String get errorRateLimited => 'レート制限'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,16 +1148,13 @@ class AppLocalizationsJa extends AppLocalizations { String get folderOrganizationNoneSubtitle => 'ダウンロードフォルダ内のすべてのファイル'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => '更新が利用可能です'; @@ -1256,12 +1213,10 @@ class AppLocalizationsJa extends AppLocalizations { String get providerPriorityTitle => 'プロバイダーの優先度'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => '内蔵'; @@ -1273,19 +1228,16 @@ class AppLocalizationsJa extends AppLocalizations { String get metadataProviderPriority => 'メタデータプロバイダーの優先度'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'メタデータの優先度'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'レート制限はありません'; @@ -1357,19 +1309,16 @@ class AppLocalizationsJa extends AppLocalizations { String get logIssueSummary => '問題の概要'; @override - String get logIspBlockingDescription => - 'ISP がダウンロードサービスのアクセスをブロックしている可能性があります'; + String get logIspBlockingDescription => 'ISP がダウンロードサービスのアクセスをブロックしている可能性があります'; @override - String get logIspBlockingSuggestion => - 'VPN を使用するか DNS を 1.1.1.1 または 8.8.8.8 に変更をお試しください'; + String get logIspBlockingSuggestion => 'VPN を使用するか DNS を 1.1.1.1 または 8.8.8.8 に変更をお試しください'; @override String get logRateLimitedDescription => 'サービスへのリクエストが多すぎます'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => '接続の問題が検出されました'; @@ -1378,12 +1327,10 @@ class AppLocalizationsJa extends AppLocalizations { String get logNetworkErrorSuggestion => 'インターネット接続を確認してください'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1409,8 +1356,7 @@ class AppLocalizationsJa extends AppLocalizations { String get credentialsTitle => 'Spotify の認証情報'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'クライアント ID'; @@ -1464,8 +1410,7 @@ class AppLocalizationsJa extends AppLocalizations { String get lyricsMode => '歌詞モード'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1477,8 +1422,7 @@ class AppLocalizationsJa extends AppLocalizations { String get lyricsModeExternal => '外部 .lrc ファイル'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => '両方'; @@ -1638,8 +1582,7 @@ class AppLocalizationsJa extends AppLocalizations { String get trackDeleteConfirmTitle => 'デバイスから削除しますか?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1791,15 +1734,13 @@ class AppLocalizationsJa extends AppLocalizations { String get extensionsNoExtensions => '拡張はインストールされていません'; @override - String get extensionsNoExtensionsSubtitle => - '新しいプロバイダーを追加するには .spotiflac-ext ファイルをインストールします'; + String get extensionsNoExtensionsSubtitle => '新しいプロバイダーを追加するには .spotiflac-ext ファイルをインストールします'; @override String get extensionsInstallButton => '拡張をインストール'; @override - String get extensionsInfoTip => - '拡張は新しいメタデータとダウンロードプロバイダーを追加することがあります。信頼できるソースからの拡張のみをインストールしてください。'; + String get extensionsInfoTip => '拡張は新しいメタデータとダウンロードプロバイダーを追加することがあります。信頼できるソースからの拡張のみをインストールしてください。'; @override String get extensionsInstalledSuccess => '拡張のインストールが成功しました'; @@ -1871,8 +1812,7 @@ class AppLocalizationsJa extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1884,8 +1824,7 @@ class AppLocalizationsJa extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override String get qualityNote => '実際の品質はサービスからのトラックの可用性に依存します'; @@ -1984,8 +1923,7 @@ class AppLocalizationsJa extends AppLocalizations { String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -1997,8 +1935,7 @@ class AppLocalizationsJa extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2010,170 +1947,7 @@ class AppLocalizationsJa extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'キューにダウンロードがありません'; @@ -2227,8 +2001,7 @@ class AppLocalizationsJa extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => '選択済みを削除'; @@ -2338,8 +2111,7 @@ class AppLocalizationsJa extends AppLocalizations { String get discographySelectAlbums => 'アルバムを選択...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'トラックを取得中です...'; @@ -2386,16 +2158,13 @@ class AppLocalizationsJa extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2416,8 +2185,7 @@ class AppLocalizationsJa extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2429,8 +2197,7 @@ class AppLocalizationsJa extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2448,8 +2215,7 @@ class AppLocalizationsJa extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2461,15 +2227,13 @@ class AppLocalizationsJa extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2507,8 +2271,7 @@ class AppLocalizationsJa extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2599,81 +2362,4 @@ class AppLocalizationsJa extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart index 3124447c..760c6913 100644 --- a/lib/l10n/app_localizations_ko.dart +++ b/lib/l10n/app_localizations_ko.dart @@ -12,8 +12,7 @@ class AppLocalizationsKo extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -102,15 +101,13 @@ class AppLocalizationsKo extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsKo extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsKo extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsKo extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsKo extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsKo extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsKo extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsKo extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsKo extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsKo extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsKo extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsKo extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsKo extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsKo extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsKo extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsKo extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsKo extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsKo extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsKo extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsKo extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsKo extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsKo extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsKo extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsKo extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsKo extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsKo extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsKo extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsKo extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsKo extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsKo extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsKo extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsKo extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsKo extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsKo extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsKo extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsKo extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsKo extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsKo extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsKo extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsKo extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsKo extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsKo extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsKo extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsKo extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsKo extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsKo extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsKo extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsKo extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsKo extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsKo extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsKo extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsKo extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsKo extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsKo extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsKo extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsKo extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,81 +2362,4 @@ class AppLocalizationsKo extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_nl.dart b/lib/l10n/app_localizations_nl.dart index fb230c54..b54a3080 100644 --- a/lib/l10n/app_localizations_nl.dart +++ b/lib/l10n/app_localizations_nl.dart @@ -12,8 +12,7 @@ class AppLocalizationsNl extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -102,15 +101,13 @@ class AppLocalizationsNl extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsNl extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsNl extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsNl extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsNl extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsNl extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsNl extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsNl extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsNl extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsNl extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsNl extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsNl extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsNl extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsNl extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsNl extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsNl extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsNl extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsNl extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsNl extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsNl extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsNl extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsNl extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsNl extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsNl extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsNl extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsNl extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsNl extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsNl extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsNl extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsNl extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsNl extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsNl extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsNl extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsNl extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsNl extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsNl extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsNl extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsNl extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsNl extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsNl extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsNl extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsNl extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsNl extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsNl extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsNl extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsNl extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsNl extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsNl extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsNl extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsNl extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsNl extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsNl extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsNl extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsNl extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsNl extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsNl extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,81 +2362,4 @@ class AppLocalizationsNl extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index 632923b9..2aa959ab 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -12,8 +12,7 @@ class AppLocalizationsPt extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -102,15 +101,13 @@ class AppLocalizationsPt extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsPt extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsPt extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsPt extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsPt extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsPt extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsPt extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsPt extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsPt extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsPt extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsPt extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsPt extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsPt extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsPt extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsPt extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsPt extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsPt extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsPt extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsPt extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsPt extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsPt extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsPt extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsPt extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsPt extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsPt extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsPt extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsPt extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsPt extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsPt extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsPt extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsPt extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsPt extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsPt extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsPt extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsPt extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsPt extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsPt extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsPt extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsPt extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsPt extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsPt extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsPt extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsPt extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsPt extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsPt extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsPt extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsPt extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsPt extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsPt extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsPt extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsPt extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsPt extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsPt extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsPt extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsPt extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsPt extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,95 +2362,17 @@ class AppLocalizationsPt extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } /// The translations for Portuguese, as used in Portugal (`pt_PT`). class AppLocalizationsPtPt extends AppLocalizationsPt { - AppLocalizationsPtPt() : super('pt_PT'); + AppLocalizationsPtPt(): super('pt_PT'); @override String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Baixe faixas do Spotify em qualidade sem perdas de Tidal, Qobuz e Amazon Music.'; + String get appDescription => 'Baixe faixas do Spotify em qualidade sem perdas de Tidal, Qobuz e Amazon Music.'; @override String get navHome => 'Início'; @@ -2730,8 +2401,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get homeSubtitle => 'Cole um link do Spotify ou procure por nome'; @override - String get homeSupports => - 'Suporte: Faixas, Álbuns, Playlists, URLs de Artista'; + String get homeSupports => 'Suporte: Faixas, Álbuns, Playlists, URLs de Artista'; @override String get homeRecent => 'Recentes'; @@ -2788,15 +2458,13 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get historyNoAlbums => 'Sem álbuns baixados'; @override - String get historyNoAlbumsSubtitle => - 'Baixe várias faixas de um álbum para vê-las aqui'; + String get historyNoAlbumsSubtitle => 'Baixe várias faixas de um álbum para vê-las aqui'; @override String get historyNoSingles => 'Sem singles baixados'; @override - String get historyNoSinglesSubtitle => - 'Os downloads de faixa individuais aparecerão aqui'; + String get historyNoSinglesSubtitle => 'Os downloads de faixa individuais aparecerão aqui'; @override String get settingsTitle => 'Configurações'; @@ -2841,8 +2509,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get downloadAskQuality => 'Perguntar qualidade antes de baixar'; @override - String get downloadAskQualitySubtitle => - 'Mostrar seletor de qualidade para cada download'; + String get downloadAskQualitySubtitle => 'Mostrar seletor de qualidade para cada download'; @override String get downloadFilenameFormat => 'Formato do Nome do Arquivo'; @@ -2854,8 +2521,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get downloadSeparateSingles => 'Separar Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Colocar singles numa pasta separada'; + String get downloadSeparateSinglesSubtitle => 'Colocar singles numa pasta separada'; @override String get qualityBest => 'Melhor Disponível'; @@ -2888,8 +2554,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get appearanceDynamicColor => 'Cores Dinâmicas'; @override - String get appearanceDynamicColorSubtitle => - 'Usar cores do seu papel de parede'; + String get appearanceDynamicColorSubtitle => 'Usar cores do seu papel de parede'; @override String get appearanceAccentColor => 'Cor de Destaque'; @@ -2913,8 +2578,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get optionsPrimaryProvider => 'Provedor Primário'; @override - String get optionsPrimaryProviderSubtitle => - 'Serviço usado ao pesquisar por nome da faixa.'; + String get optionsPrimaryProviderSubtitle => 'Serviço usado ao pesquisar por nome da faixa.'; @override String optionsUsingExtension(String extensionName) { @@ -2922,40 +2586,34 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { } @override - String get optionsSwitchBack => - 'Toque no Deezer ou Spotify para alternar de volta da extensão'; + String get optionsSwitchBack => 'Toque no Deezer ou Spotify para alternar de volta da extensão'; @override String get optionsAutoFallback => 'Fallback Automático'; @override - String get optionsAutoFallbackSubtitle => - 'Tentar outros serviços se o download falhar'; + String get optionsAutoFallbackSubtitle => 'Tentar outros serviços se o download falhar'; @override String get optionsUseExtensionProviders => 'Usar Provedores de Extensão'; @override - String get optionsUseExtensionProvidersOn => - 'Extensões serão tentadas primeiro'; + String get optionsUseExtensionProvidersOn => 'Extensões serão tentadas primeiro'; @override - String get optionsUseExtensionProvidersOff => - 'Usando apenas provedores integrados'; + String get optionsUseExtensionProvidersOff => 'Usando apenas provedores integrados'; @override String get optionsEmbedLyrics => 'Incorporar Letras'; @override - String get optionsEmbedLyricsSubtitle => - 'Incorporar letras sincronizadas aos arquivos FLAC'; + String get optionsEmbedLyricsSubtitle => 'Incorporar letras sincronizadas aos arquivos FLAC'; @override String get optionsMaxQualityCover => 'Capa de Qualidade Máxima'; @override - String get optionsMaxQualityCoverSubtitle => - 'Baixar capa do álbum com a mais alta resolução'; + String get optionsMaxQualityCoverSubtitle => 'Baixar capa do álbum com a mais alta resolução'; @override String get optionsConcurrentDownloads => 'Downloads Simultâneos'; @@ -2969,22 +2627,19 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { } @override - String get optionsConcurrentWarning => - 'Downloads simultâneos podem causar um limite da taxa (ratelimit)'; + String get optionsConcurrentWarning => 'Downloads simultâneos podem causar um limite da taxa (ratelimit)'; @override String get optionsExtensionStore => 'Loja de Extensões'; @override - String get optionsExtensionStoreSubtitle => - 'Mostrar aba da Loja na navegação'; + String get optionsExtensionStoreSubtitle => 'Mostrar aba da Loja na navegação'; @override String get optionsCheckUpdates => 'Procurar Atualizações'; @override - String get optionsCheckUpdatesSubtitle => - 'Notificar quando uma nova versão estiver disponível'; + String get optionsCheckUpdatesSubtitle => 'Notificar quando uma nova versão estiver disponível'; @override String get optionsUpdateChannel => 'Canal de Atualização'; @@ -2996,22 +2651,19 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get optionsUpdateChannelPreview => 'Obter versões de prévia'; @override - String get optionsUpdateChannelWarning => - 'A prévia pode conter erros ou recursos incompletos'; + String get optionsUpdateChannelWarning => 'A prévia pode conter erros ou recursos incompletos'; @override String get optionsClearHistory => 'Limpar Histórico de Download'; @override - String get optionsClearHistorySubtitle => - 'Remover todas as faixas baixadas do histórico'; + String get optionsClearHistorySubtitle => 'Remover todas as faixas baixadas do histórico'; @override String get optionsDetailedLogging => 'Registro detalhado'; @override - String get optionsDetailedLoggingOn => - 'Registros detalhados estão sendo gravados'; + String get optionsDetailedLoggingOn => 'Registros detalhados estão sendo gravados'; @override String get optionsDetailedLoggingOff => 'Habilitar para relatórios de erros'; @@ -3025,12 +2677,10 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { } @override - String get optionsSpotifyCredentialsRequired => - 'Obrigatório - toque para configurar'; + String get optionsSpotifyCredentialsRequired => 'Obrigatório - toque para configurar'; @override - String get optionsSpotifyWarning => - 'O Spotify requer as suas próprias credenciais de API. Consiga gratuitamente em developer.spotify.com'; + String get optionsSpotifyWarning => 'O Spotify requer as suas próprias credenciais de API. Consiga gratuitamente em developer.spotify.com'; @override String get extensionsTitle => 'Extensões'; @@ -3042,8 +2692,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get extensionsNone => 'Nenhuma extensão instalada'; @override - String get extensionsNoneSubtitle => - 'Instalar extensões a partir da aba Loja'; + String get extensionsNoneSubtitle => 'Instalar extensões a partir da aba Loja'; @override String get extensionsEnabled => 'Habilitado'; @@ -3095,8 +2744,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get aboutOriginalCreator => 'Criador do SpotiFLAC original'; @override - String get aboutLogoArtist => - 'O artista talentoso que criou o nosso lindo logotipo do aplicativo!'; + String get aboutLogoArtist => 'O artista talentoso que criou o nosso lindo logotipo do aplicativo!'; @override String get aboutSpecialThanks => 'Agradecimentos Especiais'; @@ -3114,15 +2762,13 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get aboutReportIssue => 'Reportar um problema'; @override - String get aboutReportIssueSubtitle => - 'Reporte qualquer problema que encontrar'; + String get aboutReportIssueSubtitle => 'Reporte qualquer problema que encontrar'; @override String get aboutFeatureRequest => 'Solicitação de recurso'; @override - String get aboutFeatureRequestSubtitle => - 'Sugira novos recursos para o aplicativo'; + String get aboutFeatureRequestSubtitle => 'Sugira novos recursos para o aplicativo'; @override String get aboutSupport => 'Apoiar'; @@ -3140,30 +2786,25 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get aboutVersion => 'Versão'; @override - String get aboutBinimumDesc => - 'O criador da API QQDL e HiFi. Sem esta API, os downloads Tidal não existiriam!'; + String get aboutBinimumDesc => 'O criador da API QQDL e HiFi. Sem esta API, os downloads Tidal não existiriam!'; @override - String get aboutSachinsenalDesc => - 'O criador original do projeto HiFi. A base da integração do Tidal!'; + String get aboutSachinsenalDesc => 'O criador original do projeto HiFi. A base da integração do Tidal!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'API incrível para downloads do Amazon Music. Obrigado por fazê-lo gratuitamente!'; + String get aboutDoubleDoubleDesc => 'API incrível para downloads do Amazon Music. Obrigado por fazê-lo gratuitamente!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'A melhor API de streaming do Qobuz. Downloads de alta resolução não seriam possíveis sem isso!'; + String get aboutDabMusicDesc => 'A melhor API de streaming do Qobuz. Downloads de alta resolução não seriam possíveis sem isso!'; @override - String get aboutAppDescription => - 'Baixe faixas do Spotify em qualidade sem perdas do Tidal, Qobuz e Amazon Music.'; + String get aboutAppDescription => 'Baixe faixas do Spotify em qualidade sem perdas do Tidal, Qobuz e Amazon Music.'; @override String get albumTitle => 'Álbum'; @@ -3268,8 +2909,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupStoragePermission => 'Permissão de Armazenamento'; @override - String get setupStoragePermissionSubtitle => - 'Necessária para salvar arquivos baixados'; + String get setupStoragePermissionSubtitle => 'Necessária para salvar arquivos baixados'; @override String get setupStoragePermissionGranted => 'Permissão concedida'; @@ -3296,19 +2936,16 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupStorageAccessRequired => 'Acesso ao Armazenamento Necessário'; @override - String get setupStorageAccessMessage => - 'O SpotiFLAC precisa da permissão \"Acesso a todos os arquivos\" para salvar arquivos de música na sua pasta escolhida.'; + String get setupStorageAccessMessage => 'O SpotiFLAC precisa da permissão \"Acesso a todos os arquivos\" para salvar arquivos de música na sua pasta escolhida.'; @override - String get setupStorageAccessMessageAndroid11 => - 'O Android 11+ requer a permissão \"Acesso a Todos os Arquivos\" para salvar arquivos na pasta de download escolhida.'; + String get setupStorageAccessMessageAndroid11 => 'O Android 11+ requer a permissão \"Acesso a Todos os Arquivos\" para salvar arquivos na pasta de download escolhida.'; @override String get setupOpenSettings => 'Abrir Configurações'; @override - String get setupPermissionDeniedMessage => - 'Permissão negada. Por favor, conceda todas as permissões para continuar.'; + String get setupPermissionDeniedMessage => 'Permissão negada. Por favor, conceda todas as permissões para continuar.'; @override String setupPermissionRequired(String permissionType) { @@ -3327,8 +2964,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupUseDefaultFolder => 'Usar Pasta Padrão?'; @override - String get setupNoFolderSelected => - 'Nenhuma pasta selecionada. Você gostaria de usar a pasta padrão de música?'; + String get setupNoFolderSelected => 'Nenhuma pasta selecionada. Você gostaria de usar a pasta padrão de música?'; @override String get setupUseDefault => 'Usar Padrão'; @@ -3337,26 +2973,22 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupDownloadLocationTitle => 'Local do Download'; @override - String get setupDownloadLocationIosMessage => - 'No iOS, downloads são salvos na pasta Documentos do aplicativo. Você pode acessá-los através do app Arquivos.'; + String get setupDownloadLocationIosMessage => 'No iOS, downloads são salvos na pasta Documentos do aplicativo. Você pode acessá-los através do app Arquivos.'; @override String get setupAppDocumentsFolder => 'Pasta Documentos do App'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recomendado - acessível através do aplicativo Arquivos'; + String get setupAppDocumentsFolderSubtitle => 'Recomendado - acessível através do aplicativo Arquivos'; @override String get setupChooseFromFiles => 'Escolher dos Arquivos'; @override - String get setupChooseFromFilesSubtitle => - 'Selecione o iCloud ou outro local'; + String get setupChooseFromFilesSubtitle => 'Selecione o iCloud ou outro local'; @override - String get setupIosEmptyFolderWarning => - 'Limitação do iOS: Pastas vazias não podem ser selecionadas. Escolha uma pasta com pelo menos um arquivo.'; + String get setupIosEmptyFolderWarning => 'Limitação do iOS: Pastas vazias não podem ser selecionadas. Escolha uma pasta com pelo menos um arquivo.'; @override String get setupDownloadInFlac => 'Baixe faixas do Spotify em FLAC'; @@ -3383,8 +3015,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupStorageRequired => 'Permissão de Armazenamento Necessária'; @override - String get setupStorageDescription => - 'O SpotiFLAC precisa de permissão de armazenamento para salvar os seus arquivos de música baixados.'; + String get setupStorageDescription => 'O SpotiFLAC precisa de permissão de armazenamento para salvar os seus arquivos de música baixados.'; @override String get setupNotificationGranted => 'Permissão de Notificações Concedida!'; @@ -3393,8 +3024,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupNotificationEnable => 'Habilitar Notificações'; @override - String get setupNotificationDescription => - 'Seja notificado quando os downloads completarem ou exigirem atenção.'; + String get setupNotificationDescription => 'Seja notificado quando os downloads completarem ou exigirem atenção.'; @override String get setupFolderSelected => 'Pasta para Download Selecionada!'; @@ -3403,8 +3033,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupFolderChoose => 'Escolher Pasta de Download'; @override - String get setupFolderDescription => - 'Selecione uma pasta onde as suas músicas baixadas serão salvas.'; + String get setupFolderDescription => 'Selecione uma pasta onde as suas músicas baixadas serão salvas.'; @override String get setupChangeFolder => 'Alterar Pasta'; @@ -3416,8 +3045,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupSpotifyApiOptional => 'API do Spotify (opcional)'; @override - String get setupSpotifyApiDescription => - 'Adicione as suas credenciais da API do Spotify para obter melhores resultados de busca e acesso a conteúdo exclusivo do Spotify.'; + String get setupSpotifyApiDescription => 'Adicione as suas credenciais da API do Spotify para obter melhores resultados de busca e acesso a conteúdo exclusivo do Spotify.'; @override String get setupUseSpotifyApi => 'Usar API do Spotify'; @@ -3435,23 +3063,19 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupEnterClientSecret => 'Insira o Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Receba as suas credenciais de API gratuitas na Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Receba as suas credenciais de API gratuitas na Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Habilitar Notificações'; @override - String get setupProceedToNextStep => - 'Você já pode prosseguir para o próximo passo.'; + String get setupProceedToNextStep => 'Você já pode prosseguir para o próximo passo.'; @override - String get setupNotificationProgressDescription => - 'Você receberá notificações de progresso dos downloads.'; + String get setupNotificationProgressDescription => 'Você receberá notificações de progresso dos downloads.'; @override - String get setupNotificationBackgroundDescription => - 'Seja notificado sobre o progresso e conclusão do download. Isso ajuda você a acompanhar os downloads quando o app estiver em segundo plano.'; + String get setupNotificationBackgroundDescription => 'Seja notificado sobre o progresso e conclusão do download. Isso ajuda você a acompanhar os downloads quando o app estiver em segundo plano.'; @override String get setupSkipForNow => 'Ignorar por enquanto'; @@ -3469,12 +3093,10 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get setupSkipAndStart => 'Ignorar e Iniciar'; @override - String get setupAllowAccessToManageFiles => - 'Por favor, habilite \"Permitir acesso para gerenciar todos os arquivos\" na próxima tela.'; + String get setupAllowAccessToManageFiles => 'Por favor, habilite \"Permitir acesso para gerenciar todos os arquivos\" na próxima tela.'; @override - String get setupGetCredentialsFromSpotify => - 'Obter credenciais do developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Obter credenciais do developer.spotify.com'; @override String get dialogCancel => 'Cancelar'; @@ -3525,8 +3147,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get dialogDiscardChanges => 'Descartar Alterações?'; @override - String get dialogUnsavedChanges => - 'Você tem alterações não salvas. Deseja descartá-las?'; + String get dialogUnsavedChanges => 'Você tem alterações não salvas. Deseja descartá-las?'; @override String get dialogDownloadFailed => 'Download Falhou'; @@ -3544,8 +3165,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get dialogClearAll => 'Limpar Tudo'; @override - String get dialogClearAllDownloads => - 'Você tem certeza que deseja limpar todos os downloads?'; + String get dialogClearAllDownloads => 'Você tem certeza que deseja limpar todos os downloads?'; @override String get dialogRemoveFromDevice => 'Remover do dispositivo?'; @@ -3554,8 +3174,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get dialogRemoveExtension => 'Remover Extensão'; @override - String get dialogRemoveExtensionMessage => - 'Tem certeza de que deseja remover esta extensão? Isso não pode ser desfeito.'; + String get dialogRemoveExtensionMessage => 'Tem certeza de que deseja remover esta extensão? Isso não pode ser desfeito.'; @override String get dialogUninstallExtension => 'Desinstalar Extensão?'; @@ -3569,8 +3188,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get dialogClearHistoryTitle => 'Limpar Histórico'; @override - String get dialogClearHistoryMessage => - 'Tem certeza de que deseja limpar todo o histórico de downloads? Isso não pode ser desfeito.'; + String get dialogClearHistoryMessage => 'Tem certeza de que deseja limpar todo o histórico de downloads? Isso não pode ser desfeito.'; @override String get dialogDeleteSelectedTitle => 'Apagar Selecionados'; @@ -3654,15 +3272,13 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get snackbarFileNotFound => 'Arquivo não encontrado'; @override - String get snackbarSelectExtFile => - 'Por favor, selecione um arquivo .spotiflac-ext'; + String get snackbarSelectExtFile => 'Por favor, selecione um arquivo .spotiflac-ext'; @override String get snackbarProviderPrioritySaved => 'Prioridade de provedor salva'; @override - String get snackbarMetadataProviderSaved => - 'Prioridade de provedor de metadados salva'; + String get snackbarMetadataProviderSaved => 'Prioridade de provedor de metadados salva'; @override String snackbarExtensionInstalled(String extensionName) { @@ -3684,8 +3300,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get errorRateLimited => 'Taxa Limitada'; @override - String get errorRateLimitedMessage => - 'Muitas solicitações. Por favor, aguarde um momento antes de pesquisar novamente.'; + String get errorRateLimitedMessage => 'Muitas solicitações. Por favor, aguarde um momento antes de pesquisar novamente.'; @override String errorFailedToLoad(String item) { @@ -3852,24 +3467,19 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get folderOrganizationByArtistAlbum => 'Artista/Álbum'; @override - String get folderOrganizationDescription => - 'Organizar arquivos baixados em pastas'; + String get folderOrganizationDescription => 'Organizar arquivos baixados em pastas'; @override - String get folderOrganizationNoneSubtitle => - 'Todos os arquivos na pasta de download'; + String get folderOrganizationNoneSubtitle => 'Todos os arquivos na pasta de download'; @override - String get folderOrganizationByArtistSubtitle => - 'Pasta separada para cada artista'; + String get folderOrganizationByArtistSubtitle => 'Pasta separada para cada artista'; @override - String get folderOrganizationByAlbumSubtitle => - 'Pasta separada para cada álbum'; + String get folderOrganizationByAlbumSubtitle => 'Pasta separada para cada álbum'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Pastas aninhadas para artista e álbum'; + String get folderOrganizationByArtistAlbumSubtitle => 'Pastas aninhadas para artista e álbum'; @override String get updateAvailable => 'Atualização Disponível'; @@ -3922,19 +3532,16 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get providerPriority => 'Prioridade de Provedor'; @override - String get providerPrioritySubtitle => - 'Arraste para reordenar os provedores de download'; + String get providerPrioritySubtitle => 'Arraste para reordenar os provedores de download'; @override String get providerPriorityTitle => 'Prioridade de Provedor'; @override - String get providerPriorityDescription => - 'Arraste para reordenar provedores de download. O aplicativo irá tentar provedores de cima para baixo ao baixar as faixas.'; + String get providerPriorityDescription => 'Arraste para reordenar provedores de download. O aplicativo irá tentar provedores de cima para baixo ao baixar as faixas.'; @override - String get providerPriorityInfo => - 'Se uma faixa não estiver disponível no primeiro provedor, o aplicativo irá tentar automaticamente a próxima.'; + String get providerPriorityInfo => 'Se uma faixa não estiver disponível no primeiro provedor, o aplicativo irá tentar automaticamente a próxima.'; @override String get providerBuiltIn => 'Embutido'; @@ -3946,19 +3553,16 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get metadataProviderPriority => 'Prioridade de Provedor de Metadados'; @override - String get metadataProviderPrioritySubtitle => - 'Ordem usada para obter metadados de faixa'; + String get metadataProviderPrioritySubtitle => 'Ordem usada para obter metadados de faixa'; @override String get metadataProviderPriorityTitle => 'Prioridade de Metadados'; @override - String get metadataProviderPriorityDescription => - 'Arraste para reordenar provedores de metadados. O aplicativo tentará provedores de cima para baixo ao procurar por faixas e buscar metadados.'; + String get metadataProviderPriorityDescription => 'Arraste para reordenar provedores de metadados. O aplicativo tentará provedores de cima para baixo ao procurar por faixas e buscar metadados.'; @override - String get metadataProviderPriorityInfo => - 'O Deezer não tem limites de taxa e é recomendado como principal. O Spotify pode limitar a taxa após muitas solicitações.'; + String get metadataProviderPriorityInfo => 'O Deezer não tem limites de taxa e é recomendado como principal. O Spotify pode limitar a taxa após muitas solicitações.'; @override String get metadataNoRateLimits => 'Sem limites de taxa'; @@ -4003,8 +3607,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get logClearLogsTitle => 'Limpar Registros'; @override - String get logClearLogsMessage => - 'Tem certeza de que deseja limpar todos os registros?'; + String get logClearLogsMessage => 'Tem certeza de que deseja limpar todos os registros?'; @override String get logIspBlocking => 'BLOQUEIO DE ISP DETECTADO'; @@ -4025,41 +3628,34 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get logNoLogsYet => 'Ainda não há registros'; @override - String get logNoLogsYetSubtitle => - 'Os registros aparecerão aqui enquanto você usa o aplicativo'; + String get logNoLogsYetSubtitle => 'Os registros aparecerão aqui enquanto você usa o aplicativo'; @override String get logIssueSummary => 'Resumo do Problemas'; @override - String get logIspBlockingDescription => - 'O seu provedor pode estar bloqueando o acesso aos serviços de download'; + String get logIspBlockingDescription => 'O seu provedor pode estar bloqueando o acesso aos serviços de download'; @override - String get logIspBlockingSuggestion => - 'Tente usar uma VPN ou altere o DNS para 1.1.1 ou 8.8.8.8'; + String get logIspBlockingSuggestion => 'Tente usar uma VPN ou altere o DNS para 1.1.1 ou 8.8.8.8'; @override String get logRateLimitedDescription => 'Muitas solicitações ao serviço'; @override - String get logRateLimitedSuggestion => - 'Aguarde alguns minutos antes de tentar novamente'; + String get logRateLimitedSuggestion => 'Aguarde alguns minutos antes de tentar novamente'; @override String get logNetworkErrorDescription => 'Problemas de conexão detectados'; @override - String get logNetworkErrorSuggestion => - 'Verifique a sua conexão com a internet'; + String get logNetworkErrorSuggestion => 'Verifique a sua conexão com a internet'; @override - String get logTrackNotFoundDescription => - 'Algumas faixas não foram encontradas nos serviços de download'; + String get logTrackNotFoundDescription => 'Algumas faixas não foram encontradas nos serviços de download'; @override - String get logTrackNotFoundSuggestion => - 'A faixa pode não estar disponível em qualidade lossless'; + String get logTrackNotFoundSuggestion => 'A faixa pode não estar disponível em qualidade lossless'; @override String logTotalErrors(int count) { @@ -4085,8 +3681,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get credentialsTitle => 'Credenciais do Spotify'; @override - String get credentialsDescription => - 'Insira o seu Client ID e Secret para usar a sua própria cota de aplicativo do Spotify.'; + String get credentialsDescription => 'Insira o seu Client ID e Secret para usar a sua própria cota de aplicativo do Spotify.'; @override String get credentialsClientId => 'Client ID'; @@ -4155,12 +3750,10 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get settingsAppearanceSubtitle => 'Tema, cores, exibição'; @override - String get settingsDownloadSubtitle => - 'Serviço, qualidade, formato de nome de arquivo'; + String get settingsDownloadSubtitle => 'Serviço, qualidade, formato de nome de arquivo'; @override - String get settingsOptionsSubtitle => - 'Fallback, letras, arte de capa, atualizações'; + String get settingsOptionsSubtitle => 'Fallback, letras, arte de capa, atualizações'; @override String get settingsExtensionsSubtitle => 'Gerenciar provedores de download'; @@ -4254,12 +3847,10 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get trackCopyLyrics => 'Copiar letras'; @override - String get trackLyricsNotAvailable => - 'Letras não disponíveis para esta faixa'; + String get trackLyricsNotAvailable => 'Letras não disponíveis para esta faixa'; @override - String get trackLyricsTimeout => - 'A solicitação expirou. Tente novamente mais tarde.'; + String get trackLyricsTimeout => 'A solicitação expirou. Tente novamente mais tarde.'; @override String get trackLyricsLoadFailed => 'Falha ao carregar letras'; @@ -4271,8 +3862,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get trackDeleteConfirmTitle => 'Remover do dispositivo?'; @override - String get trackDeleteConfirmMessage => - 'Isso apagará permanentemente o arquivo baixado e o removerá do seu histórico.'; + String get trackDeleteConfirmMessage => 'Isso apagará permanentemente o arquivo baixado e o removerá do seu histórico.'; @override String trackCannotOpen(String message) { @@ -4394,8 +3984,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get extensionMinAppVersion => 'Versão Mínima do App'; @override - String get extensionCustomTrackMatching => - 'Correspondência de Faixa Personalizada'; + String get extensionCustomTrackMatching => 'Correspondência de Faixa Personalizada'; @override String get extensionPostProcessing => 'Pós-Processamento'; @@ -4425,15 +4014,13 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get extensionsNoExtensions => 'Nenhuma extensão instalada'; @override - String get extensionsNoExtensionsSubtitle => - 'Instale arquivos .spotiflac-ext para adicionar novos provedores'; + String get extensionsNoExtensionsSubtitle => 'Instale arquivos .spotiflac-ext para adicionar novos provedores'; @override String get extensionsInstallButton => 'Instalar Extensão'; @override - String get extensionsInfoTip => - 'Extensões podem adicionar novos metadados e baixar provedores. Somente instale extensões a partir de fontes confiáveis.'; + String get extensionsInfoTip => 'Extensões podem adicionar novos metadados e baixar provedores. Somente instale extensões a partir de fontes confiáveis.'; @override String get extensionsInstalledSuccess => 'Extensão instalada com sucesso'; @@ -4442,34 +4029,28 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get extensionsDownloadPriority => 'Prioridade de Download'; @override - String get extensionsDownloadPrioritySubtitle => - 'Definir ordem do serviço de download'; + String get extensionsDownloadPrioritySubtitle => 'Definir ordem do serviço de download'; @override - String get extensionsNoDownloadProvider => - 'Nenhuma extensão com provedor de download'; + String get extensionsNoDownloadProvider => 'Nenhuma extensão com provedor de download'; @override String get extensionsMetadataPriority => 'Prioridade de Metadados'; @override - String get extensionsMetadataPrioritySubtitle => - 'Definir ordem de origem de pesquisa e metadados'; + String get extensionsMetadataPrioritySubtitle => 'Definir ordem de origem de pesquisa e metadados'; @override - String get extensionsNoMetadataProvider => - 'Nenhuma extensão com provedor de metadados'; + String get extensionsNoMetadataProvider => 'Nenhuma extensão com provedor de metadados'; @override String get extensionsSearchProvider => 'Provedor de Pesquisa'; @override - String get extensionsNoCustomSearch => - 'Nenhuma extensão com pesquisa personalizada'; + String get extensionsNoCustomSearch => 'Nenhuma extensão com pesquisa personalizada'; @override - String get extensionsSearchProviderDescription => - 'Escolha qual serviço utilizar para pesquisar faixas'; + String get extensionsSearchProviderDescription => 'Escolha qual serviço utilizar para pesquisar faixas'; @override String get extensionsCustomSearch => 'Busca personalizada'; @@ -4496,8 +4077,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get qualityHiResFlacMaxSubtitle => '24-bit / até 192kHz'; @override - String get qualityNote => - 'A qualidade real depende da faixa que estiver disponível no serviço'; + String get qualityNote => 'A qualidade real depende da faixa que estiver disponível no serviço'; @override String get downloadAskBeforeDownload => 'Perguntar qualidade antes de baixar'; @@ -4533,8 +4113,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get folderNone => 'Nenhum'; @override - String get folderNoneSubtitle => - 'Salvar todos os arquivos diretamente na pasta de download'; + String get folderNoneSubtitle => 'Salvar todos os arquivos diretamente na pasta de download'; @override String get folderArtist => 'Artista'; @@ -4552,8 +4131,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get folderArtistAlbum => 'Artista/Álbum'; @override - String get folderArtistAlbumSubtitle => - 'Nome do Artista/Nome do Álbum/nome do arquivo'; + String get folderArtistAlbumSubtitle => 'Nome do Artista/Nome do Álbum/nome do arquivo'; @override String get serviceTidal => 'Tidal'; @@ -4589,8 +4167,7 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get queueClearAll => 'Limpar Tudo'; @override - String get queueClearAllMessage => - 'Tem certeza de que deseja limpar todos os downloads?'; + String get queueClearAllMessage => 'Tem certeza de que deseja limpar todos os downloads?'; @override String get queueEmpty => 'Nenhum download na fila'; @@ -4620,15 +4197,13 @@ class AppLocalizationsPtPt extends AppLocalizationsPt { String get albumFolderArtistAlbum => 'Artista / Álbum'; @override - String get albumFolderArtistAlbumSubtitle => - 'Álbuns/Nome do Artista/Nome do Álbum/'; + String get albumFolderArtistAlbumSubtitle => 'Álbuns/Nome do Artista/Nome do Álbum/'; @override String get albumFolderArtistYearAlbum => 'Artista / [Ano] Álbum'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Álbuns/Nome do Artista/[2005] Nome do Álbum/'; + String get albumFolderArtistYearAlbumSubtitle => 'Álbuns/Nome do Artista/[2005] Nome do Álbum/'; @override String get albumFolderAlbumOnly => 'Apenas Álbum'; diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index 1d13b18d..73d751c3 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -12,8 +12,7 @@ class AppLocalizationsRu extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Скачайте треки Spotify в Lossless качестве из Tidal, Qobuz и Amazon Music.'; + String get appDescription => 'Скачайте треки Spotify в Lossless качестве из Tidal, Qobuz и Amazon Music.'; @override String get navHome => 'Главная'; @@ -45,8 +44,7 @@ class AppLocalizationsRu extends AppLocalizations { String get homeSubtitle => 'Вставьте ссылку Spotify или ищите по названию'; @override - String get homeSupports => - 'Поддерживается: Трек, Альбом, Плейлист, URL исполнителя'; + String get homeSupports => 'Поддерживается: Трек, Альбом, Плейлист, URL исполнителя'; @override String get homeRecent => 'Недавние'; @@ -107,15 +105,13 @@ class AppLocalizationsRu extends AppLocalizations { String get historyNoAlbums => 'Нет скачанных альбомов'; @override - String get historyNoAlbumsSubtitle => - 'Скачайте несколько треков из альбома, чтобы увидеть их здесь'; + String get historyNoAlbumsSubtitle => 'Скачайте несколько треков из альбома, чтобы увидеть их здесь'; @override String get historyNoSingles => 'Нет скачанных синглов'; @override - String get historyNoSinglesSubtitle => - 'Здесь будут отображаться загрузки синглов'; + String get historyNoSinglesSubtitle => 'Здесь будут отображаться загрузки синглов'; @override String get historySearchHint => 'Поиск в истории...'; @@ -154,8 +150,7 @@ class AppLocalizationsRu extends AppLocalizations { String get downloadDefaultService => 'Сервис по умолчанию'; @override - String get downloadDefaultServiceSubtitle => - 'Сервис, используемый для скачивания'; + String get downloadDefaultServiceSubtitle => 'Сервис, используемый для скачивания'; @override String get downloadDefaultQuality => 'Качество по умолчанию'; @@ -164,8 +159,7 @@ class AppLocalizationsRu extends AppLocalizations { String get downloadAskQuality => 'Спрашивать качество перед скачиванием'; @override - String get downloadAskQualitySubtitle => - 'Показывать выбор качества для каждого скачивания'; + String get downloadAskQualitySubtitle => 'Показывать выбор качества для каждого скачивания'; @override String get downloadFilenameFormat => 'Формат имени файла'; @@ -177,8 +171,7 @@ class AppLocalizationsRu extends AppLocalizations { String get downloadSeparateSingles => 'Разделять синглы'; @override - String get downloadSeparateSinglesSubtitle => - 'Помещать синглы в отдельную папку'; + String get downloadSeparateSinglesSubtitle => 'Помещать синглы в отдельную папку'; @override String get qualityBest => 'Лучшее из доступных'; @@ -211,8 +204,7 @@ class AppLocalizationsRu extends AppLocalizations { String get appearanceDynamicColor => 'Динамический цвет'; @override - String get appearanceDynamicColorSubtitle => - 'Использовать цвета из ваших обоев'; + String get appearanceDynamicColorSubtitle => 'Использовать цвета из ваших обоев'; @override String get appearanceAccentColor => 'Акцентный цвет'; @@ -236,8 +228,7 @@ class AppLocalizationsRu extends AppLocalizations { String get optionsPrimaryProvider => 'Основной провайдер'; @override - String get optionsPrimaryProviderSubtitle => - 'Сервис, используемый при поиске по названию трека.'; + String get optionsPrimaryProviderSubtitle => 'Сервис, используемый при поиске по названию трека.'; @override String optionsUsingExtension(String extensionName) { @@ -245,41 +236,34 @@ class AppLocalizationsRu extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Нажмите Deezer или Spotify для возврата с расширения'; + String get optionsSwitchBack => 'Нажмите Deezer или Spotify для возврата с расширения'; @override String get optionsAutoFallback => 'Автоматический переход'; @override - String get optionsAutoFallbackSubtitle => - 'Попробовать другие сервисы при сбое загрузки'; + String get optionsAutoFallbackSubtitle => 'Попробовать другие сервисы при сбое загрузки'; @override - String get optionsUseExtensionProviders => - 'Использовать провайдера расширений'; + String get optionsUseExtensionProviders => 'Использовать провайдера расширений'; @override - String get optionsUseExtensionProvidersOn => - 'Сначала будут опробованы расширения'; + String get optionsUseExtensionProvidersOn => 'Сначала будут опробованы расширения'; @override - String get optionsUseExtensionProvidersOff => - 'Использование только встроенных провайдеров'; + String get optionsUseExtensionProvidersOff => 'Использование только встроенных провайдеров'; @override String get optionsEmbedLyrics => 'Вставить текст песни'; @override - String get optionsEmbedLyricsSubtitle => - 'Вставить синхронизированные тексты в FLAC файлы'; + String get optionsEmbedLyricsSubtitle => 'Вставить синхронизированные тексты в FLAC файлы'; @override String get optionsMaxQualityCover => 'Максимальное качество обложки'; @override - String get optionsMaxQualityCoverSubtitle => - 'Скачивать обложку в макс. разрешении'; + String get optionsMaxQualityCoverSubtitle => 'Скачивать обложку в макс. разрешении'; @override String get optionsConcurrentDownloads => 'Одновременные загрузки'; @@ -293,15 +277,13 @@ class AppLocalizationsRu extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Параллельные загрузки могут вызвать ограничение скорости'; + String get optionsConcurrentWarning => 'Параллельные загрузки могут вызвать ограничение скорости'; @override String get optionsExtensionStore => 'Магазин расширений'; @override - String get optionsExtensionStoreSubtitle => - 'Показывать вкладку Магазин в гл. меню'; + String get optionsExtensionStoreSubtitle => 'Показывать вкладку Магазин в гл. меню'; @override String get optionsCheckUpdates => 'Проверить обновления'; @@ -319,15 +301,13 @@ class AppLocalizationsRu extends AppLocalizations { String get optionsUpdateChannelPreview => 'Предварительные версии'; @override - String get optionsUpdateChannelWarning => - 'Предварительная версия может содержать ошибки или неполные функции'; + String get optionsUpdateChannelWarning => 'Предварительная версия может содержать ошибки или неполные функции'; @override String get optionsClearHistory => 'Очистить историю загрузок'; @override - String get optionsClearHistorySubtitle => - 'Удалить все скачанные треки из истории'; + String get optionsClearHistorySubtitle => 'Удалить все скачанные треки из истории'; @override String get optionsDetailedLogging => 'Подробный лог'; @@ -347,12 +327,10 @@ class AppLocalizationsRu extends AppLocalizations { } @override - String get optionsSpotifyCredentialsRequired => - 'Необходимо - нажмите для настройки'; + String get optionsSpotifyCredentialsRequired => 'Необходимо - нажмите для настройки'; @override - String get optionsSpotifyWarning => - 'Spotify требует ваши собственные учетные данные API. Получите их бесплатно на сайте developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify требует ваши собственные учетные данные API. Получите их бесплатно на сайте developer.spotify.com'; @override String get extensionsTitle => 'Расширения'; @@ -364,8 +342,7 @@ class AppLocalizationsRu extends AppLocalizations { String get extensionsNone => 'Нет установленных расширений'; @override - String get extensionsNoneSubtitle => - 'Установка расширений из вкладки Магазин'; + String get extensionsNoneSubtitle => 'Установка расширений из вкладки Магазин'; @override String get extensionsEnabled => 'Включено'; @@ -417,8 +394,7 @@ class AppLocalizationsRu extends AppLocalizations { String get aboutOriginalCreator => 'Создатель оригинального SpotiFLAC'; @override - String get aboutLogoArtist => - 'Талантливый художник, который создал наш красивый логотип приложения!'; + String get aboutLogoArtist => 'Талантливый художник, который создал наш красивый логотип приложения!'; @override String get aboutTranslators => 'Переводчики'; @@ -445,8 +421,7 @@ class AppLocalizationsRu extends AppLocalizations { String get aboutFeatureRequest => 'Предложить новую функцию'; @override - String get aboutFeatureRequestSubtitle => - 'Предложить новые функции для приложения'; + String get aboutFeatureRequestSubtitle => 'Предложить новые функции для приложения'; @override String get aboutTelegramChannel => 'Telegram канал'; @@ -479,34 +454,28 @@ class AppLocalizationsRu extends AppLocalizations { String get aboutVersion => 'Версия'; @override - String get aboutBinimumDesc => - 'Создатель QQDL & HiFi API. Без этого API загрузки Tidal не существовали бы!'; + String get aboutBinimumDesc => 'Создатель QQDL & HiFi API. Без этого API загрузки Tidal не существовали бы!'; @override - String get aboutSachinsenalDesc => - 'Оригинальный создатель проекта HiFi. Основатель Tidal интеграции!'; + String get aboutSachinsenalDesc => 'Оригинальный создатель проекта HiFi. Основатель Tidal интеграции!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Удивительный API для загрузок Amazon Music. Спасибо за то, что сделали это бесплатно!'; + String get aboutDoubleDoubleDesc => 'Удивительный API для загрузок Amazon Music. Спасибо за то, что сделали это бесплатно!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'Лучший API для стриминга Qobuz. Без него загрузка файлов в высоком разрешении была бы невозможна!'; + String get aboutDabMusicDesc => 'Лучший API для стриминга Qobuz. Без него загрузка файлов в высоком разрешении была бы невозможна!'; @override - String get aboutAppDescription => - 'Скачайте треки Spotify в Lossless качестве из Tidal, Qobuz и Amazon Music.'; + String get aboutAppDescription => 'Скачайте треки Spotify в Lossless качестве из Tidal, Qobuz и Amazon Music.'; @override String get albumTitle => 'Альбом'; @@ -615,8 +584,7 @@ class AppLocalizationsRu extends AppLocalizations { String get setupStoragePermission => 'Доступ к хранилищу'; @override - String get setupStoragePermissionSubtitle => - 'Необходимо для сохранения загруженных файлов'; + String get setupStoragePermissionSubtitle => 'Необходимо для сохранения загруженных файлов'; @override String get setupStoragePermissionGranted => 'Разрешение предоставлено'; @@ -643,19 +611,16 @@ class AppLocalizationsRu extends AppLocalizations { String get setupStorageAccessRequired => 'Требуется доступ к хранилищу'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC требуется разрешение \"Доступ ко всем файлам\" для сохранения музыкальных файлов в выбранную папку.'; + String get setupStorageAccessMessage => 'SpotiFLAC требуется разрешение \"Доступ ко всем файлам\" для сохранения музыкальных файлов в выбранную папку.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Для Android 11+ требуется разрешение \"Доступ ко всем файлам\" для сохранения файлов в выбранную вами папку загрузки.'; + String get setupStorageAccessMessageAndroid11 => 'Для Android 11+ требуется разрешение \"Доступ ко всем файлам\" для сохранения файлов в выбранную вами папку загрузки.'; @override String get setupOpenSettings => 'Открыть настройки'; @override - String get setupPermissionDeniedMessage => - 'В разрешении отказано. Пожалуйста, предоставьте все разрешения для продолжения.'; + String get setupPermissionDeniedMessage => 'В разрешении отказано. Пожалуйста, предоставьте все разрешения для продолжения.'; @override String setupPermissionRequired(String permissionType) { @@ -674,8 +639,7 @@ class AppLocalizationsRu extends AppLocalizations { String get setupUseDefaultFolder => 'Использовать папку по умолчанию?'; @override - String get setupNoFolderSelected => - 'Папка не выбрана. Хотите использовать папку Музыка по умолчанию?'; + String get setupNoFolderSelected => 'Папка не выбрана. Хотите использовать папку Музыка по умолчанию?'; @override String get setupUseDefault => 'По умолчанию'; @@ -684,30 +648,25 @@ class AppLocalizationsRu extends AppLocalizations { String get setupDownloadLocationTitle => 'Папка для скачивания'; @override - String get setupDownloadLocationIosMessage => - 'В iOS загрузки сохраняются в папке Документы приложения. Вы можете получить к ним доступ через приложение Файлы.'; + String get setupDownloadLocationIosMessage => 'В iOS загрузки сохраняются в папке Документы приложения. Вы можете получить к ним доступ через приложение Файлы.'; @override String get setupAppDocumentsFolder => 'Папка Документы приложения'; @override - String get setupAppDocumentsFolderSubtitle => - 'Рекомендуется - доступ через Файлы'; + String get setupAppDocumentsFolderSubtitle => 'Рекомендуется - доступ через Файлы'; @override String get setupChooseFromFiles => 'Выбрать из файлов'; @override - String get setupChooseFromFilesSubtitle => - 'Выберите iCloud или другое местоположение'; + String get setupChooseFromFilesSubtitle => 'Выберите iCloud или другое местоположение'; @override - String get setupIosEmptyFolderWarning => - 'Ограничение iOS: пустые папки не могут быть выбраны. Выберите папку, содержащую хотя бы один файл.'; + String get setupIosEmptyFolderWarning => 'Ограничение iOS: пустые папки не могут быть выбраны. Выберите папку, содержащую хотя бы один файл.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Скачать Spotify треки во FLAC'; @@ -734,19 +693,16 @@ class AppLocalizationsRu extends AppLocalizations { String get setupStorageRequired => 'Требуется доступ к хранилищу'; @override - String get setupStorageDescription => - 'SpotiFLAC требуется разрешение на хранение для сохранения скачанных файлов.'; + String get setupStorageDescription => 'SpotiFLAC требуется разрешение на хранение для сохранения скачанных файлов.'; @override - String get setupNotificationGranted => - 'Разрешение на уведомление предоставлено!'; + String get setupNotificationGranted => 'Разрешение на уведомление предоставлено!'; @override String get setupNotificationEnable => 'Включить уведомления'; @override - String get setupNotificationDescription => - 'Получайте уведомления о завершении загрузки или о необходимости привлечения внимания.'; + String get setupNotificationDescription => 'Получайте уведомления о завершении загрузки или о необходимости привлечения внимания.'; @override String get setupFolderSelected => 'Папка для загрузки выбрана!'; @@ -755,8 +711,7 @@ class AppLocalizationsRu extends AppLocalizations { String get setupFolderChoose => 'Выбрать папку для скачивания'; @override - String get setupFolderDescription => - 'Выберите папку, в которой будет сохраняться скачанная музыка.'; + String get setupFolderDescription => 'Выберите папку, в которой будет сохраняться скачанная музыка.'; @override String get setupChangeFolder => 'Сменить папку'; @@ -768,8 +723,7 @@ class AppLocalizationsRu extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (необязательно)'; @override - String get setupSpotifyApiDescription => - 'Добавьте свои учётные данные Spotify для улучшения результатов поиска и доступа к эксклюзивному контенту Spotify.'; + String get setupSpotifyApiDescription => 'Добавьте свои учётные данные Spotify для улучшения результатов поиска и доступа к эксклюзивному контенту Spotify.'; @override String get setupUseSpotifyApi => 'Использовать Spotify API'; @@ -787,23 +741,19 @@ class AppLocalizationsRu extends AppLocalizations { String get setupEnterClientSecret => 'Введите Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Получите бесплатный API учётной записи на панели разработчика Spotify.'; + String get setupGetFreeCredentials => 'Получите бесплатный API учётной записи на панели разработчика Spotify.'; @override String get setupEnableNotifications => 'Включить уведомления'; @override - String get setupProceedToNextStep => - 'Теперь вы можете перейти к следующему шагу.'; + String get setupProceedToNextStep => 'Теперь вы можете перейти к следующему шагу.'; @override - String get setupNotificationProgressDescription => - 'Вы будете получать уведомления о ходе загрузки.'; + String get setupNotificationProgressDescription => 'Вы будете получать уведомления о ходе загрузки.'; @override - String get setupNotificationBackgroundDescription => - 'Получайте уведомления о ходе и завершении загрузки. Это поможет вам отслеживать загрузки, когда приложение находится в фоновом режиме.'; + String get setupNotificationBackgroundDescription => 'Получайте уведомления о ходе и завершении загрузки. Это поможет вам отслеживать загрузки, когда приложение находится в фоновом режиме.'; @override String get setupSkipForNow => 'Пропустить'; @@ -821,12 +771,10 @@ class AppLocalizationsRu extends AppLocalizations { String get setupSkipAndStart => 'Пропустить и начать'; @override - String get setupAllowAccessToManageFiles => - 'Пожалуйста, включите \"Разрешить доступ для управления всеми файлами\" на следующем экране.'; + String get setupAllowAccessToManageFiles => 'Пожалуйста, включите \"Разрешить доступ для управления всеми файлами\" на следующем экране.'; @override - String get setupGetCredentialsFromSpotify => - 'Получить учётные данные с developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Получить учётные данные с developer.spotify.com'; @override String get dialogCancel => 'Отмена'; @@ -877,8 +825,7 @@ class AppLocalizationsRu extends AppLocalizations { String get dialogDiscardChanges => 'Отменить изменения?'; @override - String get dialogUnsavedChanges => - 'Есть несохраненные изменения. Отменить их?'; + String get dialogUnsavedChanges => 'Есть несохраненные изменения. Отменить их?'; @override String get dialogDownloadFailed => 'Ошибка скачивания'; @@ -896,8 +843,7 @@ class AppLocalizationsRu extends AppLocalizations { String get dialogClearAll => 'Очистить всё'; @override - String get dialogClearAllDownloads => - 'Вы уверены, что хотите очистить все загрузки?'; + String get dialogClearAllDownloads => 'Вы уверены, что хотите очистить все загрузки?'; @override String get dialogRemoveFromDevice => 'Удалить с устройства?'; @@ -906,8 +852,7 @@ class AppLocalizationsRu extends AppLocalizations { String get dialogRemoveExtension => 'Удалить расширение'; @override - String get dialogRemoveExtensionMessage => - 'Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.'; + String get dialogRemoveExtensionMessage => 'Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.'; @override String get dialogUninstallExtension => 'Удалить расширение?'; @@ -921,8 +866,7 @@ class AppLocalizationsRu extends AppLocalizations { String get dialogClearHistoryTitle => 'Очистить историю'; @override - String get dialogClearHistoryMessage => - 'Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.'; + String get dialogClearHistoryMessage => 'Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.'; @override String get dialogDeleteSelectedTitle => 'Удалить выбранные'; @@ -1015,15 +959,13 @@ class AppLocalizationsRu extends AppLocalizations { String get snackbarFileNotFound => 'Файл не найден'; @override - String get snackbarSelectExtFile => - 'Пожалуйста, выберите .spotiflac-ext-файл'; + String get snackbarSelectExtFile => 'Пожалуйста, выберите .spotiflac-ext-файл'; @override String get snackbarProviderPrioritySaved => 'Приоритет провайдера сохранён'; @override - String get snackbarMetadataProviderSaved => - 'Приоритет провайдера метаданных сохранён'; + String get snackbarMetadataProviderSaved => 'Приоритет провайдера метаданных сохранён'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1045,8 +987,7 @@ class AppLocalizationsRu extends AppLocalizations { String get errorRateLimited => 'Слишком много запросов'; @override - String get errorRateLimitedMessage => - 'Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.'; + String get errorRateLimitedMessage => 'Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.'; @override String errorFailedToLoad(String item) { @@ -1215,23 +1156,19 @@ class AppLocalizationsRu extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Исполнитель/Альбом'; @override - String get folderOrganizationDescription => - 'Сортировать скачанные файлы по папкам'; + String get folderOrganizationDescription => 'Сортировать скачанные файлы по папкам'; @override String get folderOrganizationNoneSubtitle => 'Все файлы в папке загрузок'; @override - String get folderOrganizationByArtistSubtitle => - 'Отдельная папка для каждого исполнителя'; + String get folderOrganizationByArtistSubtitle => 'Отдельная папка для каждого исполнителя'; @override - String get folderOrganizationByAlbumSubtitle => - 'Отдельная папка для каждого альбома'; + String get folderOrganizationByAlbumSubtitle => 'Отдельная папка для каждого альбома'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Вложенные папки для исполнителей и альбомов'; + String get folderOrganizationByArtistAlbumSubtitle => 'Вложенные папки для исполнителей и альбомов'; @override String get updateAvailable => 'Доступно обновление'; @@ -1290,12 +1227,10 @@ class AppLocalizationsRu extends AppLocalizations { String get providerPriorityTitle => 'Приоритет провайдера'; @override - String get providerPriorityDescription => - 'Перетаскивайте, чтобы изменить порядок провайдеров загрузки. Приложение будет пробовать провайдеров сверху вниз при загрузке треков.'; + String get providerPriorityDescription => 'Перетаскивайте, чтобы изменить порядок провайдеров загрузки. Приложение будет пробовать провайдеров сверху вниз при загрузке треков.'; @override - String get providerPriorityInfo => - 'Если трек не доступен у первого провайдера, приложение автоматически попробует следующий.'; + String get providerPriorityInfo => 'Если трек не доступен у первого провайдера, приложение автоматически попробует следующий.'; @override String get providerBuiltIn => 'Встроенные'; @@ -1307,19 +1242,16 @@ class AppLocalizationsRu extends AppLocalizations { String get metadataProviderPriority => 'Приоритет провайдера метаданных'; @override - String get metadataProviderPrioritySubtitle => - 'Порядок, используемый при получении метаданных'; + String get metadataProviderPrioritySubtitle => 'Порядок, используемый при получении метаданных'; @override String get metadataProviderPriorityTitle => 'Приоритет метаданных'; @override - String get metadataProviderPriorityDescription => - 'Перетаскивайте, чтобы изменить порядок провайдеров метаданных. Приложение будет пробовать провайдеров сверху вниз при поиске треков и извлечении метаданных.'; + String get metadataProviderPriorityDescription => 'Перетаскивайте, чтобы изменить порядок провайдеров метаданных. Приложение будет пробовать провайдеров сверху вниз при поиске треков и извлечении метаданных.'; @override - String get metadataProviderPriorityInfo => - 'Deezer не имеет ограничений по скорости и рекомендуется в качестве основного. Spotify может ограничивать скорость после большого количества запросов.'; + String get metadataProviderPriorityInfo => 'Deezer не имеет ограничений по скорости и рекомендуется в качестве основного. Spotify может ограничивать скорость после большого количества запросов.'; @override String get metadataNoRateLimits => 'Без ограничений по скорости'; @@ -1385,26 +1317,22 @@ class AppLocalizationsRu extends AppLocalizations { String get logNoLogsYet => 'Логов нет'; @override - String get logNoLogsYetSubtitle => - 'Логи появятся здесь по мере использования приложения'; + String get logNoLogsYetSubtitle => 'Логи появятся здесь по мере использования приложения'; @override String get logIssueSummary => 'Краткое описание проблемы'; @override - String get logIspBlockingDescription => - 'Ваш провайдер может блокировать доступ к сервисам скачивания'; + String get logIspBlockingDescription => 'Ваш провайдер может блокировать доступ к сервисам скачивания'; @override - String get logIspBlockingSuggestion => - 'Попробуйте использовать VPN или измените DNS на 1.1.1.1 или 8.8.8.8'; + String get logIspBlockingSuggestion => 'Попробуйте использовать VPN или измените DNS на 1.1.1.1 или 8.8.8.8'; @override String get logRateLimitedDescription => 'Слишком много запросов к сервису'; @override - String get logRateLimitedSuggestion => - 'Подождите несколько минут, прежде чем повторить попытку'; + String get logRateLimitedSuggestion => 'Подождите несколько минут, прежде чем повторить попытку'; @override String get logNetworkErrorDescription => 'Обнаружены проблемы с подключением'; @@ -1413,12 +1341,10 @@ class AppLocalizationsRu extends AppLocalizations { String get logNetworkErrorSuggestion => 'Проверьте подключение к Интернету'; @override - String get logTrackNotFoundDescription => - 'Некоторые треки не найдены в сервисах загрузки'; + String get logTrackNotFoundDescription => 'Некоторые треки не найдены в сервисах загрузки'; @override - String get logTrackNotFoundSuggestion => - 'Трек может быть недоступен в lossless формате'; + String get logTrackNotFoundSuggestion => 'Трек может быть недоступен в lossless формате'; @override String logTotalErrors(int count) { @@ -1444,8 +1370,7 @@ class AppLocalizationsRu extends AppLocalizations { String get credentialsTitle => 'Учётные данные Spotify'; @override - String get credentialsDescription => - 'Введите свой Client ID и Secret, чтобы использовать собственные квоты в Spotify.'; + String get credentialsDescription => 'Введите свой Client ID и Secret, чтобы использовать собственные квоты в Spotify.'; @override String get credentialsClientId => 'Client ID'; @@ -1499,8 +1424,7 @@ class AppLocalizationsRu extends AppLocalizations { String get lyricsMode => 'Режим текстов песен'; @override - String get lyricsModeDescription => - 'Выберите как сохранить тексты песен при скачивании'; + String get lyricsModeDescription => 'Выберите как сохранить тексты песен при скачивании'; @override String get lyricsModeEmbed => 'Вставить в файл'; @@ -1512,8 +1436,7 @@ class AppLocalizationsRu extends AppLocalizations { String get lyricsModeExternal => 'Внешний файл .lrc'; @override - String get lyricsModeExternalSubtitle => - 'Отдельный файл .lrc для плееров, таких, как Samsung Music'; + String get lyricsModeExternalSubtitle => 'Отдельный файл .lrc для плееров, таких, как Samsung Music'; @override String get lyricsModeBoth => 'Оба варианта'; @@ -1543,12 +1466,10 @@ class AppLocalizationsRu extends AppLocalizations { String get settingsAppearanceSubtitle => 'Тема, цвета, дисплей'; @override - String get settingsDownloadSubtitle => - 'Сервисы, качество, формат имени файла'; + String get settingsDownloadSubtitle => 'Сервисы, качество, формат имени файла'; @override - String get settingsOptionsSubtitle => - 'Резерв. сервер, тексты песен, обложки, обновления'; + String get settingsOptionsSubtitle => 'Резерв. сервер, тексты песен, обложки, обновления'; @override String get settingsExtensionsSubtitle => 'Управление провайдерами скачивания'; @@ -1653,12 +1574,10 @@ class AppLocalizationsRu extends AppLocalizations { String get trackCopyLyrics => 'Копировать текст'; @override - String get trackLyricsNotAvailable => - 'Текст песни недоступен для этого трека'; + String get trackLyricsNotAvailable => 'Текст песни недоступен для этого трека'; @override - String get trackLyricsTimeout => - 'Время ожидания запроса истекло. Повторите попытку позже.'; + String get trackLyricsTimeout => 'Время ожидания запроса истекло. Повторите попытку позже.'; @override String get trackLyricsLoadFailed => 'Не удалось загрузить текст песни'; @@ -1679,8 +1598,7 @@ class AppLocalizationsRu extends AppLocalizations { String get trackDeleteConfirmTitle => 'Удалить с устройства?'; @override - String get trackDeleteConfirmMessage => - 'Это приведет к окончательному удалению загруженного файла и его удалению из истории.'; + String get trackDeleteConfirmMessage => 'Это приведет к окончательному удалению загруженного файла и его удалению из истории.'; @override String trackCannotOpen(String message) { @@ -1754,8 +1672,7 @@ class AppLocalizationsRu extends AppLocalizations { String get extensionDefaultProvider => 'По умолчанию (Deezer/Spotify)'; @override - String get extensionDefaultProviderSubtitle => - 'Использовать встроенный поиск'; + String get extensionDefaultProviderSubtitle => 'Использовать встроенный поиск'; @override String get extensionAuthor => 'Автор'; @@ -1803,8 +1720,7 @@ class AppLocalizationsRu extends AppLocalizations { String get extensionMinAppVersion => 'Мин. версия приложения'; @override - String get extensionCustomTrackMatching => - 'Соответствие пользовательских треков'; + String get extensionCustomTrackMatching => 'Соответствие пользовательских треков'; @override String get extensionPostProcessing => 'Постобработка'; @@ -1834,15 +1750,13 @@ class AppLocalizationsRu extends AppLocalizations { String get extensionsNoExtensions => 'Нет установленных расширений'; @override - String get extensionsNoExtensionsSubtitle => - 'Установите .spotiflac-ext файлы для добавления новых провайдеров'; + String get extensionsNoExtensionsSubtitle => 'Установите .spotiflac-ext файлы для добавления новых провайдеров'; @override String get extensionsInstallButton => 'Установить расширение'; @override - String get extensionsInfoTip => - 'Расширения могут добавлять новые метаданные и провайдеров загрузки. Устанавливайте только расширения из надежных источников.'; + String get extensionsInfoTip => 'Расширения могут добавлять новые метаданные и провайдеров загрузки. Устанавливайте только расширения из надежных источников.'; @override String get extensionsInstalledSuccess => 'Расширение успешно установлено'; @@ -1851,34 +1765,28 @@ class AppLocalizationsRu extends AppLocalizations { String get extensionsDownloadPriority => 'Приоритет скачивания'; @override - String get extensionsDownloadPrioritySubtitle => - 'Установка порядок сервисов скачивания'; + String get extensionsDownloadPrioritySubtitle => 'Установка порядок сервисов скачивания'; @override - String get extensionsNoDownloadProvider => - 'Нет расширений с провайдером загрузки'; + String get extensionsNoDownloadProvider => 'Нет расширений с провайдером загрузки'; @override String get extensionsMetadataPriority => 'Приоритет метаданных'; @override - String get extensionsMetadataPrioritySubtitle => - 'Установка порядка поиска и источника метаданных'; + String get extensionsMetadataPrioritySubtitle => 'Установка порядка поиска и источника метаданных'; @override - String get extensionsNoMetadataProvider => - 'Нет расширений с провайдером метаданных'; + String get extensionsNoMetadataProvider => 'Нет расширений с провайдером метаданных'; @override String get extensionsSearchProvider => 'Провайдер поиска'; @override - String get extensionsNoCustomSearch => - 'Нет расширений с пользовательским поиском'; + String get extensionsNoCustomSearch => 'Нет расширений с пользовательским поиском'; @override - String get extensionsSearchProviderDescription => - 'Выберите, какой сервис использовать для поиска треков'; + String get extensionsSearchProviderDescription => 'Выберите, какой сервис использовать для поиска треков'; @override String get extensionsCustomSearch => 'Пользовательский поиск'; @@ -1920,8 +1828,7 @@ class AppLocalizationsRu extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1933,12 +1840,10 @@ class AppLocalizationsRu extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Фактическое качество зависит от доступности треков в сервисе'; + String get qualityNote => 'Фактическое качество зависит от доступности треков в сервисе'; @override String get downloadAskBeforeDownload => 'Спрашивать перед скачиванием'; @@ -1974,8 +1879,7 @@ class AppLocalizationsRu extends AppLocalizations { String get folderNone => 'Отсутствует'; @override - String get folderNoneSubtitle => - 'Сохранить все файлы непосредственно в папку загрузки'; + String get folderNoneSubtitle => 'Сохранить все файлы непосредственно в папку загрузки'; @override String get folderArtist => 'Исполнитель'; @@ -2029,15 +1933,13 @@ class AppLocalizationsRu extends AppLocalizations { String get queueClearAll => 'Очистить всё'; @override - String get queueClearAllMessage => - 'Вы уверены, что хотите очистить все загрузки?'; + String get queueClearAllMessage => 'Вы уверены, что хотите очистить все загрузки?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2049,8 +1951,7 @@ class AppLocalizationsRu extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2062,170 +1963,7 @@ class AppLocalizationsRu extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'Нет загрузок в очереди'; @@ -2255,15 +1993,13 @@ class AppLocalizationsRu extends AppLocalizations { String get albumFolderArtistAlbum => 'Исполнитель / Альбом'; @override - String get albumFolderArtistAlbumSubtitle => - 'Альбомы/Исполнитель/Название Альбома/'; + String get albumFolderArtistAlbumSubtitle => 'Альбомы/Исполнитель/Название Альбома/'; @override String get albumFolderArtistYearAlbum => 'Исполнитель / [Год] Альбом'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Альбомы/Исполнитель/[2005] Название Альбома/'; + String get albumFolderArtistYearAlbumSubtitle => 'Альбомы/Исполнитель/[2005] Название Альбома/'; @override String get albumFolderAlbumOnly => 'Только альбом'; @@ -2275,15 +2011,13 @@ class AppLocalizationsRu extends AppLocalizations { String get albumFolderYearAlbum => '[Год] Альбом'; @override - String get albumFolderYearAlbumSubtitle => - 'Альбомы/[2005] Название Альбома /'; + String get albumFolderYearAlbumSubtitle => 'Альбомы/[2005] Название Альбома /'; @override String get albumFolderArtistAlbumSingles => 'Исполнитель / Альбом + Синглы'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Исполнитель/Альбом и Исполнитель/Сингл/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Исполнитель/Альбом и Исполнитель/Сингл/'; @override String get downloadedAlbumDeleteSelected => 'Удалить выбранные'; @@ -2397,8 +2131,7 @@ class AppLocalizationsRu extends AppLocalizations { String get discographySelectAlbums => 'Выбрать альбомы...'; @override - String get discographySelectAlbumsSubtitle => - 'Выберите конкретные альбомы или синглы'; + String get discographySelectAlbumsSubtitle => 'Выберите конкретные альбомы или синглы'; @override String get discographyFetchingTracks => 'Получение треков...'; @@ -2430,8 +2163,7 @@ class AppLocalizationsRu extends AppLocalizations { String get discographyNoAlbums => 'Нет доступных альбомов'; @override - String get discographyFailedToFetch => - 'Не удалось получить некоторые альбомы'; + String get discographyFailedToFetch => 'Не удалось получить некоторые альбомы'; @override String get sectionStorageAccess => 'Storage Access'; @@ -2446,16 +2178,13 @@ class AppLocalizationsRu extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2476,8 +2205,7 @@ class AppLocalizationsRu extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2489,8 +2217,7 @@ class AppLocalizationsRu extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2508,8 +2235,7 @@ class AppLocalizationsRu extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2521,15 +2247,13 @@ class AppLocalizationsRu extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2567,8 +2291,7 @@ class AppLocalizationsRu extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2659,81 +2382,4 @@ class AppLocalizationsRu extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart index b05da45a..2022a224 100644 --- a/lib/l10n/app_localizations_tr.dart +++ b/lib/l10n/app_localizations_tr.dart @@ -12,8 +12,7 @@ class AppLocalizationsTr extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Spotify şarkılarını Tidal, Qobuz ve Amazon Music\'den yüksek kalitede indir.'; + String get appDescription => 'Spotify şarkılarını Tidal, Qobuz ve Amazon Music\'den yüksek kalitede indir.'; @override String get navHome => 'Ara'; @@ -45,8 +44,7 @@ class AppLocalizationsTr extends AppLocalizations { String get homeSubtitle => 'Spotify linki yapıştır veya isimle arat'; @override - String get homeSupports => - 'Desteklenen linkler: Şarkı, Albüm, Çalma Listesi, Sanatçı linkleri'; + String get homeSupports => 'Desteklenen linkler: Şarkı, Albüm, Çalma Listesi, Sanatçı linkleri'; @override String get homeRecent => 'En son'; @@ -97,15 +95,13 @@ class AppLocalizationsTr extends AppLocalizations { String get historyNoDownloads => 'İndirme geçmişi yok'; @override - String get historyNoDownloadsSubtitle => - 'İndirilen şarkılar burada gözükecek'; + String get historyNoDownloadsSubtitle => 'İndirilen şarkılar burada gözükecek'; @override String get historyNoAlbums => 'İndirilen albüm yok'; @override - String get historyNoAlbumsSubtitle => - 'Albümleri burada görmek için bir albümden birden fazla şarkı indir'; + String get historyNoAlbumsSubtitle => 'Albümleri burada görmek için bir albümden birden fazla şarkı indir'; @override String get historyNoSingles => 'Single indirilmemiş'; @@ -141,8 +137,7 @@ class AppLocalizationsTr extends AppLocalizations { String get downloadLocation => 'İndirme Konumu'; @override - String get downloadLocationSubtitle => - 'Dosyaları nereye kaydedeceğinizi seçin'; + String get downloadLocationSubtitle => 'Dosyaları nereye kaydedeceğinizi seçin'; @override String get downloadLocationDefault => 'Varsayılan dizin'; @@ -151,8 +146,7 @@ class AppLocalizationsTr extends AppLocalizations { String get downloadDefaultService => 'Varsayılan Hizmet'; @override - String get downloadDefaultServiceSubtitle => - 'İndirmeler için kullanılan hizmet'; + String get downloadDefaultServiceSubtitle => 'İndirmeler için kullanılan hizmet'; @override String get downloadDefaultQuality => 'Varsayılan Kalite'; @@ -161,8 +155,7 @@ class AppLocalizationsTr extends AppLocalizations { String get downloadAskQuality => 'İndirmeden Önce Kaliteyi Sor'; @override - String get downloadAskQualitySubtitle => - 'Her indirmeden önce kalite seçim ekranını göster'; + String get downloadAskQualitySubtitle => 'Her indirmeden önce kalite seçim ekranını göster'; @override String get downloadFilenameFormat => 'Dosya adı formatı'; @@ -174,8 +167,7 @@ class AppLocalizationsTr extends AppLocalizations { String get downloadSeparateSingles => 'Single\'ları Ayır'; @override - String get downloadSeparateSinglesSubtitle => - 'Single şarkıları ayrı dosyaya koy'; + String get downloadSeparateSinglesSubtitle => 'Single şarkıları ayrı dosyaya koy'; @override String get qualityBest => 'Mevcut en iyi'; @@ -208,8 +200,7 @@ class AppLocalizationsTr extends AppLocalizations { String get appearanceDynamicColor => 'Dinamik Renk'; @override - String get appearanceDynamicColorSubtitle => - 'Duvar kağıdının renklerini kullan'; + String get appearanceDynamicColorSubtitle => 'Duvar kağıdının renklerini kullan'; @override String get appearanceAccentColor => 'Vurgu Rengi'; @@ -233,8 +224,7 @@ class AppLocalizationsTr extends AppLocalizations { String get optionsPrimaryProvider => 'Ana Kaynek'; @override - String get optionsPrimaryProviderSubtitle => - 'Şarkı ismi aratılırken kullanılan kaynak.'; + String get optionsPrimaryProviderSubtitle => 'Şarkı ismi aratılırken kullanılan kaynak.'; @override String optionsUsingExtension(String extensionName) { @@ -242,15 +232,13 @@ class AppLocalizationsTr extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Dahili kaynaklara dönmek için Deezer veya Spotify\'a tıkla'; + String get optionsSwitchBack => 'Dahili kaynaklara dönmek için Deezer veya Spotify\'a tıkla'; @override String get optionsAutoFallback => 'Diğerlerini dene'; @override - String get optionsAutoFallbackSubtitle => - 'İndirme başarısız olursa diğer hizmetleri dene'; + String get optionsAutoFallbackSubtitle => 'İndirme başarısız olursa diğer hizmetleri dene'; @override String get optionsUseExtensionProviders => 'Eklenti sağlayıcılarını kullan'; @@ -259,22 +247,19 @@ class AppLocalizationsTr extends AppLocalizations { String get optionsUseExtensionProvidersOn => 'Eklentiler ilk denenecek'; @override - String get optionsUseExtensionProvidersOff => - 'Sadece dahili sağlayıcıları kullan'; + String get optionsUseExtensionProvidersOff => 'Sadece dahili sağlayıcıları kullan'; @override String get optionsEmbedLyrics => 'Şarkı Sözlerini Göm'; @override - String get optionsEmbedLyricsSubtitle => - 'Senkronize şarkı sözlerini FLAC dosyalarına göm'; + String get optionsEmbedLyricsSubtitle => 'Senkronize şarkı sözlerini FLAC dosyalarına göm'; @override String get optionsMaxQualityCover => 'En Yüksek Kapak Kalitesi'; @override - String get optionsMaxQualityCoverSubtitle => - 'En yüksek kalitedeki albüm kapaklarını indir'; + String get optionsMaxQualityCoverSubtitle => 'En yüksek kalitedeki albüm kapaklarını indir'; @override String get optionsConcurrentDownloads => 'Eş Zamanlı İndirmeler'; @@ -288,8 +273,7 @@ class AppLocalizationsTr extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Aynı anda birden fazla indirme sınırlamaya takılabilir'; + String get optionsConcurrentWarning => 'Aynı anda birden fazla indirme sınırlamaya takılabilir'; @override String get optionsExtensionStore => 'Eklenti Dükkanı'; @@ -313,15 +297,13 @@ class AppLocalizationsTr extends AppLocalizations { String get optionsUpdateChannelPreview => 'Önizleme sürümlerini al'; @override - String get optionsUpdateChannelWarning => - 'Önizleme sürümleri hatalar veya tamamlanmamış özellikler içerebilir'; + String get optionsUpdateChannelWarning => 'Önizleme sürümleri hatalar veya tamamlanmamış özellikler içerebilir'; @override String get optionsClearHistory => 'İndirme Geçmişini Temizle'; @override - String get optionsClearHistorySubtitle => - 'İndirilen bütün şarkıları geçmişten temizle'; + String get optionsClearHistorySubtitle => 'İndirilen bütün şarkıları geçmişten temizle'; @override String get optionsDetailedLogging => 'Detaylı Günlükleme'; @@ -341,12 +323,10 @@ class AppLocalizationsTr extends AppLocalizations { } @override - String get optionsSpotifyCredentialsRequired => - 'Zorunlu - değiştirmek için tıkla'; + String get optionsSpotifyCredentialsRequired => 'Zorunlu - değiştirmek için tıkla'; @override - String get optionsSpotifyWarning => - 'Spotify\'ın senin API kimlik bilgilerine ihtiyacı var. Onları developer.spotify.com\'dan alabilirsin'; + String get optionsSpotifyWarning => 'Spotify\'ın senin API kimlik bilgilerine ihtiyacı var. Onları developer.spotify.com\'dan alabilirsin'; @override String get extensionsTitle => 'Eklentiler'; @@ -410,8 +390,7 @@ class AppLocalizationsTr extends AppLocalizations { String get aboutOriginalCreator => 'Orijinal SpotiFLAC\'ın kurucusu'; @override - String get aboutLogoArtist => - 'Uygulama logomuzu yaratmış yetenekli sanatçımız!'; + String get aboutLogoArtist => 'Uygulama logomuzu yaratmış yetenekli sanatçımız!'; @override String get aboutTranslators => 'Çevirmenler'; @@ -432,15 +411,13 @@ class AppLocalizationsTr extends AppLocalizations { String get aboutReportIssue => 'Sorun bildir'; @override - String get aboutReportIssueSubtitle => - 'Karşılaştığın herhangi bir problemi bildir'; + String get aboutReportIssueSubtitle => 'Karşılaştığın herhangi bir problemi bildir'; @override String get aboutFeatureRequest => 'Özellik isteği'; @override - String get aboutFeatureRequestSubtitle => - 'Uygulama için yeni özellikler isteyin'; + String get aboutFeatureRequestSubtitle => 'Uygulama için yeni özellikler isteyin'; @override String get aboutTelegramChannel => 'Telegram Kanalı'; @@ -473,34 +450,28 @@ class AppLocalizationsTr extends AppLocalizations { String get aboutVersion => 'Versiyon'; @override - String get aboutBinimumDesc => - 'QQDL ve HiFi API\'ın kurucusu. Bu API olmadan, Tidal indirmeleri olmazdı!'; + String get aboutBinimumDesc => 'QQDL ve HiFi API\'ın kurucusu. Bu API olmadan, Tidal indirmeleri olmazdı!'; @override - String get aboutSachinsenalDesc => - 'Orijinal HiFi projesi kurucusu. Tidal entegrasyonun temeli!'; + String get aboutSachinsenalDesc => 'Orijinal HiFi projesi kurucusu. Tidal entegrasyonun temeli!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazom Music indirmeleri için harika bir API. Ücretsiz yaptığın için teşekkürler!'; + String get aboutDoubleDoubleDesc => 'Amazom Music indirmeleri için harika bir API. Ücretsiz yaptığın için teşekkürler!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'En iyi Qobuz streaming API\'ı. Yüksek kalite indirmeler bunun sayesinde!'; + String get aboutDabMusicDesc => 'En iyi Qobuz streaming API\'ı. Yüksek kalite indirmeler bunun sayesinde!'; @override - String get aboutAppDescription => - 'Spotify şarkılarını Tidal, Qobuz ve Amazon Music\'den yüksek kalitede indir.'; + String get aboutAppDescription => 'Spotify şarkılarını Tidal, Qobuz ve Amazon Music\'den yüksek kalitede indir.'; @override String get albumTitle => 'Albüm'; @@ -605,8 +576,7 @@ class AppLocalizationsTr extends AppLocalizations { String get setupStoragePermission => 'Depolama İzni'; @override - String get setupStoragePermissionSubtitle => - 'İndirilen dosyaları kaydetmek için gerekli'; + String get setupStoragePermissionSubtitle => 'İndirilen dosyaları kaydetmek için gerekli'; @override String get setupStoragePermissionGranted => 'İzin verildi'; @@ -633,19 +603,16 @@ class AppLocalizationsTr extends AppLocalizations { String get setupStorageAccessRequired => 'Depolama Erişimi Gerekli'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC\'ın şarkıları seçili klasörünüze kaydetmek için \"Bütün dosyalara eriş\" iznine ihtiyacı var.'; + String get setupStorageAccessMessage => 'SpotiFLAC\'ın şarkıları seçili klasörünüze kaydetmek için \"Bütün dosyalara eriş\" iznine ihtiyacı var.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11 ve sonrasında şarkıların seçili klasörünüze kaydedilebilmesi için \"Bütün dosyalara eriş\" iznine ihtiyaç var.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11 ve sonrasında şarkıların seçili klasörünüze kaydedilebilmesi için \"Bütün dosyalara eriş\" iznine ihtiyaç var.'; @override String get setupOpenSettings => 'Ayarları Aç'; @override - String get setupPermissionDeniedMessage => - 'İzin reddedildi. Devam etmek için lütfen bütün izinleri verin.'; + String get setupPermissionDeniedMessage => 'İzin reddedildi. Devam etmek için lütfen bütün izinleri verin.'; @override String setupPermissionRequired(String permissionType) { @@ -664,8 +631,7 @@ class AppLocalizationsTr extends AppLocalizations { String get setupUseDefaultFolder => 'Varsayılan Klasörü Kullan?'; @override - String get setupNoFolderSelected => - 'Klasör seçilmedi. Varsayılan \"Music\" klasörünü kullanmak ister misiniz?'; + String get setupNoFolderSelected => 'Klasör seçilmedi. Varsayılan \"Music\" klasörünü kullanmak ister misiniz?'; @override String get setupUseDefault => 'Varsayılanı Kullan'; @@ -674,15 +640,13 @@ class AppLocalizationsTr extends AppLocalizations { String get setupDownloadLocationTitle => 'İndirme Konumu'; @override - String get setupDownloadLocationIosMessage => - 'iOS\'ta indirilenler uygulamanın \"Documents\" dosyasına kaydedilir. Onlara Dosyalar uygulamasından erişebilirsiniz.'; + String get setupDownloadLocationIosMessage => 'iOS\'ta indirilenler uygulamanın \"Documents\" dosyasına kaydedilir. Onlara Dosyalar uygulamasından erişebilirsiniz.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Tavsiye edilen - Dosyalar uygulamasından erişilebilir'; + String get setupAppDocumentsFolderSubtitle => 'Tavsiye edilen - Dosyalar uygulamasından erişilebilir'; @override String get setupChooseFromFiles => 'Dosyalar\'dan Seç'; @@ -691,12 +655,10 @@ class AppLocalizationsTr extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'iCloud veya başka konum seç'; @override - String get setupIosEmptyFolderWarning => - 'iOS\'un sınırlaması: Boş klasörler seçilemiyor. İçinde en az bir dosya bulunan bir klasör seçin.'; + String get setupIosEmptyFolderWarning => 'iOS\'un sınırlaması: Boş klasörler seçilemiyor. İçinde en az bir dosya bulunan bir klasör seçin.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Spotify şarkılarını FLAC olarak indirin'; @@ -723,8 +685,7 @@ class AppLocalizationsTr extends AppLocalizations { String get setupStorageRequired => 'Depolama İzni Gerekli'; @override - String get setupStorageDescription => - 'SpotiFLAC\'ın şarkılarınızı kaydetmek için depolama iznine ihtiyacı var.'; + String get setupStorageDescription => 'SpotiFLAC\'ın şarkılarınızı kaydetmek için depolama iznine ihtiyacı var.'; @override String get setupNotificationGranted => 'Bildirim İzni Verildi!'; @@ -733,8 +694,7 @@ class AppLocalizationsTr extends AppLocalizations { String get setupNotificationEnable => 'Bildirimleri Etkinleştir'; @override - String get setupNotificationDescription => - 'İndirmeler bittiğinde veya bakılması gereken bir şey olduğunda haberdar olun.'; + String get setupNotificationDescription => 'İndirmeler bittiğinde veya bakılması gereken bir şey olduğunda haberdar olun.'; @override String get setupFolderSelected => 'İndirilecek Klasör Seçildi!'; @@ -743,8 +703,7 @@ class AppLocalizationsTr extends AppLocalizations { String get setupFolderChoose => 'İndirilecek Klasörü Seç'; @override - String get setupFolderDescription => - 'İndirdiğin şarkıların kaydedileceği klasörü seç.'; + String get setupFolderDescription => 'İndirdiğin şarkıların kaydedileceği klasörü seç.'; @override String get setupChangeFolder => 'Klasörü Değiştir'; @@ -756,8 +715,7 @@ class AppLocalizationsTr extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (İsteğe Bağlı)'; @override - String get setupSpotifyApiDescription => - 'Daha iyi arama sonuçları ve Spotify\'a özel içeriklere erişmek için Spotify API kimlik bilgilerini gir.'; + String get setupSpotifyApiDescription => 'Daha iyi arama sonuçları ve Spotify\'a özel içeriklere erişmek için Spotify API kimlik bilgilerini gir.'; @override String get setupUseSpotifyApi => 'Spotify API\'ı kullan'; @@ -775,8 +733,7 @@ class AppLocalizationsTr extends AppLocalizations { String get setupEnterClientSecret => 'Spotify Client Secret gir'; @override - String get setupGetFreeCredentials => - 'Spotify Developer Dashboard\'tan API kimlik bilgilerini ücretsiz alın.'; + String get setupGetFreeCredentials => 'Spotify Developer Dashboard\'tan API kimlik bilgilerini ücretsiz alın.'; @override String get setupEnableNotifications => 'Bildirimleri Etkinleştir'; @@ -785,12 +742,10 @@ class AppLocalizationsTr extends AppLocalizations { String get setupProceedToNextStep => 'Bir sonraki adıma geçebilirsin.'; @override - String get setupNotificationProgressDescription => - 'İndirme ilerlemelerinin bildirimlerini alacaksın.'; + String get setupNotificationProgressDescription => 'İndirme ilerlemelerinin bildirimlerini alacaksın.'; @override - String get setupNotificationBackgroundDescription => - 'İndirmelerin durumu hakkında bildirim al. Bunu açmak uygulama arka plandayken indirmelerinizi takip etmenizi sağlar.'; + String get setupNotificationBackgroundDescription => 'İndirmelerin durumu hakkında bildirim al. Bunu açmak uygulama arka plandayken indirmelerinizi takip etmenizi sağlar.'; @override String get setupSkipForNow => 'Şimdilik atla'; @@ -808,12 +763,10 @@ class AppLocalizationsTr extends AppLocalizations { String get setupSkipAndStart => 'Kurulumu atla'; @override - String get setupAllowAccessToManageFiles => - 'Lütfen bir sonraki ekranda \"Bütün dosyalara eriş\" iznini sağlayın.'; + String get setupAllowAccessToManageFiles => 'Lütfen bir sonraki ekranda \"Bütün dosyalara eriş\" iznini sağlayın.'; @override - String get setupGetCredentialsFromSpotify => - 'Kimlik bilgilerini developer.spotify.com\'dan alın'; + String get setupGetCredentialsFromSpotify => 'Kimlik bilgilerini developer.spotify.com\'dan alın'; @override String get dialogCancel => 'İptal'; @@ -864,8 +817,7 @@ class AppLocalizationsTr extends AppLocalizations { String get dialogDiscardChanges => 'Değişiklikleri İptal Et?'; @override - String get dialogUnsavedChanges => - 'Kaydedilmeyen değişiklikler mevcut. Bu değişiklikleri iptal etmek istiyor musunuz?'; + String get dialogUnsavedChanges => 'Kaydedilmeyen değişiklikler mevcut. Bu değişiklikleri iptal etmek istiyor musunuz?'; @override String get dialogDownloadFailed => 'İndirme Başarısız'; @@ -883,8 +835,7 @@ class AppLocalizationsTr extends AppLocalizations { String get dialogClearAll => 'Tümünü Temizle'; @override - String get dialogClearAllDownloads => - 'Bütün indirmeleri temizlemek istediğinize emin misiniz?'; + String get dialogClearAllDownloads => 'Bütün indirmeleri temizlemek istediğinize emin misiniz?'; @override String get dialogRemoveFromDevice => 'Cihazdan kaldır?'; @@ -893,8 +844,7 @@ class AppLocalizationsTr extends AppLocalizations { String get dialogRemoveExtension => 'Eklentiyi Kaldır'; @override - String get dialogRemoveExtensionMessage => - 'Bu eklentiyi kaldırmak istediğine emin misin? Bu işlem geri alınamaz.'; + String get dialogRemoveExtensionMessage => 'Bu eklentiyi kaldırmak istediğine emin misin? Bu işlem geri alınamaz.'; @override String get dialogUninstallExtension => 'Eklentiyi Kaldır?'; @@ -908,8 +858,7 @@ class AppLocalizationsTr extends AppLocalizations { String get dialogClearHistoryTitle => 'Geçmişi Temizle'; @override - String get dialogClearHistoryMessage => - 'Tüm indirme geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.'; + String get dialogClearHistoryMessage => 'Tüm indirme geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.'; @override String get dialogDeleteSelectedTitle => 'Seçileni Sil'; @@ -1004,8 +953,7 @@ class AppLocalizationsTr extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Sağlayıcı önceliği kaydedildi'; @override - String get snackbarMetadataProviderSaved => - 'Metadata sağlayıcı önceliği kaydedildi'; + String get snackbarMetadataProviderSaved => 'Metadata sağlayıcı önceliği kaydedildi'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1027,8 +975,7 @@ class AppLocalizationsTr extends AppLocalizations { String get errorRateLimited => 'Aşırı istek gönderildi'; @override - String get errorRateLimitedMessage => - 'Çok fazla istek. Lütfen arama yapmadan önce biraz bekleyin.'; + String get errorRateLimitedMessage => 'Çok fazla istek. Lütfen arama yapmadan önce biraz bekleyin.'; @override String errorFailedToLoad(String item) { @@ -1195,23 +1142,19 @@ class AppLocalizationsTr extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Sanatçı/Albüm'; @override - String get folderOrganizationDescription => - 'İndirilenleri klasörlerle organize et'; + String get folderOrganizationDescription => 'İndirilenleri klasörlerle organize et'; @override - String get folderOrganizationNoneSubtitle => - 'Her şey indirilen dosyasına kaydedilecek'; + String get folderOrganizationNoneSubtitle => 'Her şey indirilen dosyasına kaydedilecek'; @override - String get folderOrganizationByArtistSubtitle => - 'Her sanatçı için ayrı klasör'; + String get folderOrganizationByArtistSubtitle => 'Her sanatçı için ayrı klasör'; @override String get folderOrganizationByAlbumSubtitle => 'Her albüm için ayrı klasör'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Sanatçı klasörlerinin içinde Albüm klasörleri'; + String get folderOrganizationByArtistAlbumSubtitle => 'Sanatçı klasörlerinin içinde Albüm klasörleri'; @override String get updateAvailable => 'Güncelleme Mevcut'; @@ -1264,19 +1207,16 @@ class AppLocalizationsTr extends AppLocalizations { String get providerPriority => 'İndirme hizmetleri öncelik sırası'; @override - String get providerPrioritySubtitle => - 'İndirme hizmetlerini sıralamak için kaydır'; + String get providerPrioritySubtitle => 'İndirme hizmetlerini sıralamak için kaydır'; @override String get providerPriorityTitle => 'İndirme hizmetleri öncelik sırası'; @override - String get providerPriorityDescription => - 'İndirme hizmetlerini sıralamak için kaydır. Uygulama şarkı indirirken hizmetleri yukarıdan aşağıya doğru deneyecektir.'; + String get providerPriorityDescription => 'İndirme hizmetlerini sıralamak için kaydır. Uygulama şarkı indirirken hizmetleri yukarıdan aşağıya doğru deneyecektir.'; @override - String get providerPriorityInfo => - 'Eğer bir şarkı ilk hizmette mevcut değilse uygulama otomatik olarak bir sonrakini deneyecektir.'; + String get providerPriorityInfo => 'Eğer bir şarkı ilk hizmette mevcut değilse uygulama otomatik olarak bir sonrakini deneyecektir.'; @override String get providerBuiltIn => 'Dahili'; @@ -1288,19 +1228,16 @@ class AppLocalizationsTr extends AppLocalizations { String get metadataProviderPriority => 'Metadata Sağlayıcı Önceliği'; @override - String get metadataProviderPrioritySubtitle => - 'Şarkı metadata\'sı alınırken kullanılan sıra'; + String get metadataProviderPrioritySubtitle => 'Şarkı metadata\'sı alınırken kullanılan sıra'; @override String get metadataProviderPriorityTitle => 'Metadata Önceliği'; @override - String get metadataProviderPriorityDescription => - 'Metadata sağlayıcılarını sıralamak için kaydır. Uygulama şarkı ararken ve metadata alırken sağlayıcıları yukarıdan aşağıya doğru deneyecektir.'; + String get metadataProviderPriorityDescription => 'Metadata sağlayıcılarını sıralamak için kaydır. Uygulama şarkı ararken ve metadata alırken sağlayıcıları yukarıdan aşağıya doğru deneyecektir.'; @override - String get metadataProviderPriorityInfo => - 'Deezer\'ın istek sınırı yok ve birincil olarak önerilir. Spotify çok fazla istekten sonra sınırlama yapabilir.'; + String get metadataProviderPriorityInfo => 'Deezer\'ın istek sınırı yok ve birincil olarak önerilir. Spotify çok fazla istekten sonra sınırlama yapabilir.'; @override String get metadataNoRateLimits => 'İstek sınırı yok'; @@ -1345,8 +1282,7 @@ class AppLocalizationsTr extends AppLocalizations { String get logClearLogsTitle => 'Kayıtları temizle'; @override - String get logClearLogsMessage => - 'Tüm kayıtları temizlemek istediğinize emin misiniz?'; + String get logClearLogsMessage => 'Tüm kayıtları temizlemek istediğinize emin misiniz?'; @override String get logIspBlocking => 'ISP BLOCKING DETECTED'; @@ -1367,26 +1303,22 @@ class AppLocalizationsTr extends AppLocalizations { String get logNoLogsYet => 'Henüz kayıt yok'; @override - String get logNoLogsYetSubtitle => - 'Uygulamayı kullandıkça kayıtlar burada görünecek'; + String get logNoLogsYetSubtitle => 'Uygulamayı kullandıkça kayıtlar burada görünecek'; @override String get logIssueSummary => 'Sorun Özeti'; @override - String get logIspBlockingDescription => - 'İnternet sağlayıcınız indirme hizmetlerine erişimi engelliyor olabilir'; + String get logIspBlockingDescription => 'İnternet sağlayıcınız indirme hizmetlerine erişimi engelliyor olabilir'; @override - String get logIspBlockingSuggestion => - 'VPN kullanmayı veya DNS\'i 1.1.1.1 ya da 8.8.8.8 olarak değiştirmeyi deneyin'; + String get logIspBlockingSuggestion => 'VPN kullanmayı veya DNS\'i 1.1.1.1 ya da 8.8.8.8 olarak değiştirmeyi deneyin'; @override String get logRateLimitedDescription => 'Hizmete çok fazla istek gönderildi'; @override - String get logRateLimitedSuggestion => - 'Tekrar denemeden önce birkaç dakika bekleyin'; + String get logRateLimitedSuggestion => 'Tekrar denemeden önce birkaç dakika bekleyin'; @override String get logNetworkErrorDescription => 'Bağlantı sorunları tespit edildi'; @@ -1395,12 +1327,10 @@ class AppLocalizationsTr extends AppLocalizations { String get logNetworkErrorSuggestion => 'İnternet bağlantınızı kontrol edin'; @override - String get logTrackNotFoundDescription => - 'Bazı şarkılar indirme hizmetlerinde bulunamadı'; + String get logTrackNotFoundDescription => 'Bazı şarkılar indirme hizmetlerinde bulunamadı'; @override - String get logTrackNotFoundSuggestion => - 'Şarkı kayıpsız kalitede mevcut olmayabilir'; + String get logTrackNotFoundSuggestion => 'Şarkı kayıpsız kalitede mevcut olmayabilir'; @override String logTotalErrors(int count) { @@ -1426,8 +1356,7 @@ class AppLocalizationsTr extends AppLocalizations { String get credentialsTitle => 'Spotify Kimlik Bilgileri'; @override - String get credentialsDescription => - 'Kendi Spotify uygulama kotanızı kullanmak için Client ID ve Secret girin.'; + String get credentialsDescription => 'Kendi Spotify uygulama kotanızı kullanmak için Client ID ve Secret girin.'; @override String get credentialsClientId => 'Client ID'; @@ -1481,22 +1410,19 @@ class AppLocalizationsTr extends AppLocalizations { String get lyricsMode => 'Şarkı Sözü Modu'; @override - String get lyricsModeDescription => - 'Şarkı sözlerinin indirmelerle nasıl kaydedileceğini seçin'; + String get lyricsModeDescription => 'Şarkı sözlerinin indirmelerle nasıl kaydedileceğini seçin'; @override String get lyricsModeEmbed => 'Dosyaya göm'; @override - String get lyricsModeEmbedSubtitle => - 'Şarkı sözleri FLAC metadata içinde saklanır'; + String get lyricsModeEmbedSubtitle => 'Şarkı sözleri FLAC metadata içinde saklanır'; @override String get lyricsModeExternal => 'Harici .lrc dosyası'; @override - String get lyricsModeExternalSubtitle => - 'Samsung Music gibi oynatıcılar için ayrı .lrc dosyası'; + String get lyricsModeExternalSubtitle => 'Samsung Music gibi oynatıcılar için ayrı .lrc dosyası'; @override String get lyricsModeBoth => 'Her ikisi'; @@ -1529,15 +1455,13 @@ class AppLocalizationsTr extends AppLocalizations { String get settingsDownloadSubtitle => 'Hizmet, kalite, dosya adı formatı'; @override - String get settingsOptionsSubtitle => - 'Yedek, şarkı sözleri, kapak resmi, güncellemeler'; + String get settingsOptionsSubtitle => 'Yedek, şarkı sözleri, kapak resmi, güncellemeler'; @override String get settingsExtensionsSubtitle => 'İndirme sağlayıcılarını yönet'; @override - String get settingsLogsSubtitle => - 'Hata ayıklama için uygulama kayıtlarını görüntüle'; + String get settingsLogsSubtitle => 'Hata ayıklama için uygulama kayıtlarını görüntüle'; @override String get loadingSharedLink => 'Paylaşılan bağlantı yükleniyor...'; @@ -1637,8 +1561,7 @@ class AppLocalizationsTr extends AppLocalizations { String get trackLyricsNotAvailable => 'Bu şarkı için şarkı sözü mevcut değil'; @override - String get trackLyricsTimeout => - 'İstek zaman aşımına uğradı. Daha sonra tekrar deneyin.'; + String get trackLyricsTimeout => 'İstek zaman aşımına uğradı. Daha sonra tekrar deneyin.'; @override String get trackLyricsLoadFailed => 'Şarkı sözleri yüklenemedi'; @@ -1659,8 +1582,7 @@ class AppLocalizationsTr extends AppLocalizations { String get trackDeleteConfirmTitle => 'Cihazdan kaldırılsın mı?'; @override - String get trackDeleteConfirmMessage => - 'Bu işlem indirilen dosyayı kalıcı olarak silecek ve geçmişten kaldıracaktır.'; + String get trackDeleteConfirmMessage => 'Bu işlem indirilen dosyayı kalıcı olarak silecek ve geçmişten kaldıracaktır.'; @override String trackCannotOpen(String message) { @@ -1812,15 +1734,13 @@ class AppLocalizationsTr extends AppLocalizations { String get extensionsNoExtensions => 'Yüklü eklenti yok'; @override - String get extensionsNoExtensionsSubtitle => - 'Yeni sağlayıcılar eklemek için .spotiflac-ext dosyalarını yükleyin'; + String get extensionsNoExtensionsSubtitle => 'Yeni sağlayıcılar eklemek için .spotiflac-ext dosyalarını yükleyin'; @override String get extensionsInstallButton => 'Eklenti Yükle'; @override - String get extensionsInfoTip => - 'Eklentiler yeni metadata ve indirme sağlayıcıları ekleyebilir. Sadece güvenilir kaynaklardan eklenti yükleyin.'; + String get extensionsInfoTip => 'Eklentiler yeni metadata ve indirme sağlayıcıları ekleyebilir. Sadece güvenilir kaynaklardan eklenti yükleyin.'; @override String get extensionsInstalledSuccess => 'Eklenti başarıyla yüklendi'; @@ -1829,23 +1749,19 @@ class AppLocalizationsTr extends AppLocalizations { String get extensionsDownloadPriority => 'İndirme Önceliği'; @override - String get extensionsDownloadPrioritySubtitle => - 'İndirme hizmeti sırasını ayarla'; + String get extensionsDownloadPrioritySubtitle => 'İndirme hizmeti sırasını ayarla'; @override - String get extensionsNoDownloadProvider => - 'İndirme sağlayıcısı olan eklenti yok'; + String get extensionsNoDownloadProvider => 'İndirme sağlayıcısı olan eklenti yok'; @override String get extensionsMetadataPriority => 'Metadata Önceliği'; @override - String get extensionsMetadataPrioritySubtitle => - 'Arama ve metadata kaynağı sırasını ayarla'; + String get extensionsMetadataPrioritySubtitle => 'Arama ve metadata kaynağı sırasını ayarla'; @override - String get extensionsNoMetadataProvider => - 'Metadata sağlayıcısı olan eklenti yok'; + String get extensionsNoMetadataProvider => 'Metadata sağlayıcısı olan eklenti yok'; @override String get extensionsSearchProvider => 'Arama Sağlayıcı'; @@ -1854,8 +1770,7 @@ class AppLocalizationsTr extends AppLocalizations { String get extensionsNoCustomSearch => 'Özel arama olan eklenti yok'; @override - String get extensionsSearchProviderDescription => - 'Şarkı aramak için hangi hizmetin kullanılacağını seçin'; + String get extensionsSearchProviderDescription => 'Şarkı aramak için hangi hizmetin kullanılacağını seçin'; @override String get extensionsCustomSearch => 'Özel arama'; @@ -1897,8 +1812,7 @@ class AppLocalizationsTr extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1910,12 +1824,10 @@ class AppLocalizationsTr extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -2005,15 +1917,13 @@ class AppLocalizationsTr extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2025,8 +1935,7 @@ class AppLocalizationsTr extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2038,170 +1947,7 @@ class AppLocalizationsTr extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2237,8 +1983,7 @@ class AppLocalizationsTr extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2256,8 +2001,7 @@ class AppLocalizationsTr extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2367,8 +2111,7 @@ class AppLocalizationsTr extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2415,16 +2158,13 @@ class AppLocalizationsTr extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2445,8 +2185,7 @@ class AppLocalizationsTr extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2458,8 +2197,7 @@ class AppLocalizationsTr extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2477,8 +2215,7 @@ class AppLocalizationsTr extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2490,15 +2227,13 @@ class AppLocalizationsTr extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2536,8 +2271,7 @@ class AppLocalizationsTr extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2628,81 +2362,4 @@ class AppLocalizationsTr extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index c77c3b0f..8772515c 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -12,8 +12,7 @@ class AppLocalizationsZh extends AppLocalizations { String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -102,15 +101,13 @@ class AppLocalizationsZh extends AppLocalizations { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -158,8 +155,7 @@ class AppLocalizationsZh extends AppLocalizations { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -171,8 +167,7 @@ class AppLocalizationsZh extends AppLocalizations { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -229,8 +224,7 @@ class AppLocalizationsZh extends AppLocalizations { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -238,15 +232,13 @@ class AppLocalizationsZh extends AppLocalizations { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -261,15 +253,13 @@ class AppLocalizationsZh extends AppLocalizations { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -283,8 +273,7 @@ class AppLocalizationsZh extends AppLocalizations { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -296,8 +285,7 @@ class AppLocalizationsZh extends AppLocalizations { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -309,15 +297,13 @@ class AppLocalizationsZh extends AppLocalizations { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -340,8 +326,7 @@ class AppLocalizationsZh extends AppLocalizations { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -405,8 +390,7 @@ class AppLocalizationsZh extends AppLocalizations { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -466,34 +450,28 @@ class AppLocalizationsZh extends AppLocalizations { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override - String get aboutSjdonadoDesc => - 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; + String get aboutSjdonadoDesc => 'Creator of I Don\'t Have Spotify (IDHS). The fallback link resolver that saves the day!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -598,8 +576,7 @@ class AppLocalizationsZh extends AppLocalizations { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -626,19 +603,16 @@ class AppLocalizationsZh extends AppLocalizations { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -657,8 +631,7 @@ class AppLocalizationsZh extends AppLocalizations { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -667,15 +640,13 @@ class AppLocalizationsZh extends AppLocalizations { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -684,12 +655,10 @@ class AppLocalizationsZh extends AppLocalizations { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override - String get setupIcloudNotSupported => - 'iCloud Drive is not supported. Please use the app Documents folder.'; + String get setupIcloudNotSupported => 'iCloud Drive is not supported. Please use the app Documents folder.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -716,8 +685,7 @@ class AppLocalizationsZh extends AppLocalizations { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -726,8 +694,7 @@ class AppLocalizationsZh extends AppLocalizations { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -736,8 +703,7 @@ class AppLocalizationsZh extends AppLocalizations { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -749,8 +715,7 @@ class AppLocalizationsZh extends AppLocalizations { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -768,8 +733,7 @@ class AppLocalizationsZh extends AppLocalizations { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -778,12 +742,10 @@ class AppLocalizationsZh extends AppLocalizations { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -801,12 +763,10 @@ class AppLocalizationsZh extends AppLocalizations { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -857,8 +817,7 @@ class AppLocalizationsZh extends AppLocalizations { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -876,8 +835,7 @@ class AppLocalizationsZh extends AppLocalizations { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -886,8 +844,7 @@ class AppLocalizationsZh extends AppLocalizations { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -901,8 +858,7 @@ class AppLocalizationsZh extends AppLocalizations { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -997,8 +953,7 @@ class AppLocalizationsZh extends AppLocalizations { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -1020,8 +975,7 @@ class AppLocalizationsZh extends AppLocalizations { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -1188,23 +1142,19 @@ class AppLocalizationsZh extends AppLocalizations { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -1263,12 +1213,10 @@ class AppLocalizationsZh extends AppLocalizations { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -1280,19 +1228,16 @@ class AppLocalizationsZh extends AppLocalizations { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -1364,19 +1309,16 @@ class AppLocalizationsZh extends AppLocalizations { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -1385,12 +1327,10 @@ class AppLocalizationsZh extends AppLocalizations { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -1416,8 +1356,7 @@ class AppLocalizationsZh extends AppLocalizations { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -1471,8 +1410,7 @@ class AppLocalizationsZh extends AppLocalizations { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -1484,8 +1422,7 @@ class AppLocalizationsZh extends AppLocalizations { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -1645,8 +1582,7 @@ class AppLocalizationsZh extends AppLocalizations { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -1798,15 +1734,13 @@ class AppLocalizationsZh extends AppLocalizations { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -1818,19 +1752,16 @@ class AppLocalizationsZh extends AppLocalizations { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -1839,8 +1770,7 @@ class AppLocalizationsZh extends AppLocalizations { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -1882,8 +1812,7 @@ class AppLocalizationsZh extends AppLocalizations { String get enableLossyOptionSubtitleOn => 'Lossy quality option is available'; @override - String get enableLossyOptionSubtitleOff => - 'Downloads FLAC then converts to lossy format'; + String get enableLossyOptionSubtitleOff => 'Downloads FLAC then converts to lossy format'; @override String get lossyFormat => 'Lossy Format'; @@ -1895,12 +1824,10 @@ class AppLocalizationsZh extends AppLocalizations { String get lossyFormatMp3Subtitle => '320kbps, best compatibility'; @override - String get lossyFormatOpusSubtitle => - '128kbps, better quality at smaller size'; + String get lossyFormatOpusSubtitle => '128kbps, better quality at smaller size'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -1990,15 +1917,13 @@ class AppLocalizationsZh extends AppLocalizations { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueExportFailed => 'Export'; @override - String get queueExportFailedSuccess => - 'Failed downloads exported to TXT file'; + String get queueExportFailedSuccess => 'Failed downloads exported to TXT file'; @override String get queueExportFailedClear => 'Clear Failed'; @@ -2010,8 +1935,7 @@ class AppLocalizationsZh extends AppLocalizations { String get settingsAutoExportFailed => 'Auto-export failed downloads'; @override - String get settingsAutoExportFailedSubtitle => - 'Save failed downloads to TXT file automatically'; + String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; @override String get settingsDownloadNetwork => 'Download Network'; @@ -2023,170 +1947,7 @@ class AppLocalizationsZh extends AppLocalizations { String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; @override - String get settingsDownloadNetworkSubtitle => - 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; - - @override - String get settingsCloudSave => 'Cloud Save'; - - @override - String get settingsCloudSaveSubtitle => 'Auto-upload to NAS or cloud storage'; - - @override - String get cloudSettingsTitle => 'Cloud Save'; - - @override - String get cloudSettingsSectionGeneral => 'General'; - - @override - String get cloudSettingsEnable => 'Enable Cloud Upload'; - - @override - String get cloudSettingsEnableSubtitle => - 'Automatically upload files after download completes'; - - @override - String get cloudSettingsSectionProvider => 'Cloud Provider'; - - @override - String get cloudSettingsProvider => 'Provider'; - - @override - String get cloudSettingsProviderDescription => - 'Select where to upload your downloaded files'; - - @override - String get cloudSettingsSectionServer => 'Server Configuration'; - - @override - String get cloudSettingsServerUrl => 'Server URL'; - - @override - String get cloudSettingsUsername => 'Username'; - - @override - String get cloudSettingsPassword => 'Password'; - - @override - String get cloudSettingsRemotePath => 'Remote Folder Path'; - - @override - String get cloudSettingsTestConnection => 'Test Connection'; - - @override - String get cloudSettingsInfo => - 'Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.'; - - @override - String get cloudSettingsUploadQueue => 'Upload Queue'; - - @override - String get cloudSettingsRetryFailed => 'Retry Failed'; - - @override - String get cloudSettingsClearDone => 'Clear Done'; - - @override - String get cloudSettingsRecentUploads => 'Recent Uploads'; - - @override - String get cloudSettingsResetSftpHostKey => 'Reset SFTP Host Key'; - - @override - String get cloudSettingsResetAllSftpHostKeys => 'Reset All SFTP Host Keys'; - - @override - String get cloudSettingsResetSftpHostKeyMessage => - 'This will forget the saved host key for this server. The next connection will save a new key.'; - - @override - String get cloudSettingsResetAllSftpHostKeysMessage => - 'This will forget all saved SFTP host keys. Next connections will save new keys.'; - - @override - String get cloudSettingsResetConfirm => 'Reset'; - - @override - String get cloudSettingsResetAllConfirm => 'Reset All'; - - @override - String get cloudSettingsServerUrlRequired => 'Server URL is required'; - - @override - String get cloudSettingsResetSftpHostKeySuccess => - 'SFTP host key reset. Connect again to save a new key.'; - - @override - String get cloudSettingsResetSftpHostKeyNotFound => - 'No stored host key found for this server.'; - - @override - String cloudSettingsResetAllSftpHostKeysCleared(num count) { - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'Cleared $count SFTP host keys.', - one: 'Cleared 1 SFTP host key.', - ); - return '$_temp0'; - } - - @override - String get cloudSettingsResetAllSftpHostKeysNone => - 'No stored SFTP host keys found.'; - - @override - String get cloudSettingsAllowHttpTitle => 'Allow HTTP (Insecure)'; - - @override - String get cloudSettingsAllowHttpSubtitle => - 'Sends credentials without TLS. Not recommended.'; - - @override - String get cloudSettingsAllowHttpMessage => - 'HTTP does not encrypt your credentials. Only enable if you trust the network.'; - - @override - String get cloudSettingsAllowHttpConfirm => 'Allow HTTP'; - - @override - String get webdavErrorInvalidScheme => 'Invalid URL: scheme is required'; - - @override - String get webdavErrorHttpsRequired => 'WebDAV URL must use https'; - - @override - String get webdavErrorInvalidHost => 'Invalid URL: hostname is required'; - - @override - String get webdavErrorAuthFailed => - 'Authentication failed. Check username and password.'; - - @override - String get webdavErrorForbidden => - 'Access denied. Check permissions on the server.'; - - @override - String get webdavErrorNotFound => 'Server path not found. Check the URL.'; - - @override - String get webdavErrorConnectionFailed => - 'Cannot connect to server. Check URL and network.'; - - @override - String get webdavErrorTlsError => - 'SSL/TLS error. Server certificate may be invalid.'; - - @override - String get webdavErrorTimeout => - 'Connection timed out. Server may be unreachable.'; - - @override - String get webdavErrorInsufficientStorage => - 'Insufficient storage on server.'; - - @override - String get webdavErrorUnknown => 'Upload failed. Please try again.'; + String get settingsDownloadNetworkSubtitle => 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; @override String get queueEmpty => 'No downloads in queue'; @@ -2222,8 +1983,7 @@ class AppLocalizationsZh extends AppLocalizations { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -2241,8 +2001,7 @@ class AppLocalizationsZh extends AppLocalizations { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -2352,8 +2111,7 @@ class AppLocalizationsZh extends AppLocalizations { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -2400,16 +2158,13 @@ class AppLocalizationsZh extends AppLocalizations { String get allFilesAccessDisabledSubtitle => 'Limited to media folders only'; @override - String get allFilesAccessDescription => - 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; + String get allFilesAccessDescription => 'Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.'; @override - String get allFilesAccessDeniedMessage => - 'Permission was denied. Please enable \'All files access\' manually in system settings.'; + String get allFilesAccessDeniedMessage => 'Permission was denied. Please enable \'All files access\' manually in system settings.'; @override - String get allFilesAccessDisabledMessage => - 'All Files Access disabled. The app will use limited storage access.'; + String get allFilesAccessDisabledMessage => 'All Files Access disabled. The app will use limited storage access.'; @override String get settingsLocalLibrary => 'Local Library'; @@ -2430,8 +2185,7 @@ class AppLocalizationsZh extends AppLocalizations { String get libraryEnableLocalLibrary => 'Enable Local Library'; @override - String get libraryEnableLocalLibrarySubtitle => - 'Scan and track your existing music'; + String get libraryEnableLocalLibrarySubtitle => 'Scan and track your existing music'; @override String get libraryFolder => 'Library Folder'; @@ -2443,8 +2197,7 @@ class AppLocalizationsZh extends AppLocalizations { String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator'; @override - String get libraryShowDuplicateIndicatorSubtitle => - 'Show when searching for existing tracks'; + String get libraryShowDuplicateIndicatorSubtitle => 'Show when searching for existing tracks'; @override String get libraryActions => 'Actions'; @@ -2462,8 +2215,7 @@ class AppLocalizationsZh extends AppLocalizations { String get libraryCleanupMissingFiles => 'Cleanup Missing Files'; @override - String get libraryCleanupMissingFilesSubtitle => - 'Remove entries for files that no longer exist'; + String get libraryCleanupMissingFilesSubtitle => 'Remove entries for files that no longer exist'; @override String get libraryClear => 'Clear Library'; @@ -2475,15 +2227,13 @@ class AppLocalizationsZh extends AppLocalizations { String get libraryClearConfirmTitle => 'Clear Library'; @override - String get libraryClearConfirmMessage => - 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; + String get libraryClearConfirmMessage => 'This will remove all scanned tracks from your library. Your actual music files will not be deleted.'; @override String get libraryAbout => 'About Local Library'; @override - String get libraryAboutDescription => - 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; + String get libraryAboutDescription => 'Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.'; @override String libraryTracksCount(int count) { @@ -2521,8 +2271,7 @@ class AppLocalizationsZh extends AppLocalizations { String get libraryStorageAccessRequired => 'Storage Access Required'; @override - String get libraryStorageAccessMessage => - 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; + String get libraryStorageAccessMessage => 'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.'; @override String get libraryFolderNotExist => 'Selected folder does not exist'; @@ -2613,95 +2362,17 @@ class AppLocalizationsZh extends AppLocalizations { ); return '$_temp0'; } - - @override - String get cloudProviderWebdav => 'WebDAV (Synology, Nextcloud, QNAP)'; - - @override - String get cloudProviderSftp => 'SFTP (SSH File Transfer)'; - - @override - String get cloudProviderNotConfigured => 'Not Configured'; - - @override - String get cloudProviderWebdavTitle => 'WebDAV'; - - @override - String get cloudProviderWebdavSubtitle => - 'Synology, Nextcloud, QNAP, ownCloud'; - - @override - String get cloudProviderSftpTitle => 'SFTP'; - - @override - String get cloudProviderSftpSubtitle => 'SSH File Transfer Protocol'; - - @override - String get cloudTestErrorServerUrlRequired => 'Server URL is required'; - - @override - String get cloudTestErrorCredentialsRequired => - 'Username and password are required'; - - @override - String get cloudTestSuccessWebdav => 'Connected to WebDAV server'; - - @override - String get cloudTestSuccessSftp => 'Connected to SFTP server'; - - @override - String get cloudTestErrorNoProvider => 'No provider selected'; - - @override - String connectionTestSuccess(String message) { - return 'Success: $message'; - } - - @override - String get uploadStatusPending => 'Pending'; - - @override - String get uploadStatusUploading => 'Uploading'; - - @override - String get uploadStatusDone => 'Done'; - - @override - String get uploadStatusFailed => 'Failed'; - - @override - String get cloudStatusDisabled => 'Cloud Save Off'; - - @override - String get cloudStatusDisabledSubtitle => 'Enable to auto-upload tracks'; - - @override - String get cloudStatusNoProvider => 'Select Provider'; - - @override - String get cloudStatusNoProviderSubtitle => 'Choose a cloud service'; - - @override - String get cloudStatusNotConfigured => 'Setup Required'; - - @override - String get cloudStatusNotConfiguredSubtitle => - 'Configure your server details'; - - @override - String get cloudStatusActive => 'Connected'; } /// The translations for Chinese, as used in China (`zh_CN`). class AppLocalizationsZhCn extends AppLocalizationsZh { - AppLocalizationsZhCn() : super('zh_CN'); + AppLocalizationsZhCn(): super('zh_CN'); @override String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -2787,15 +2458,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -2843,8 +2512,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -2856,8 +2524,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -2914,8 +2581,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -2923,15 +2589,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -2946,15 +2610,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -2968,8 +2630,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -2981,8 +2642,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -2994,15 +2654,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -3025,8 +2683,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -3090,8 +2747,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -3151,30 +2807,25 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -3279,8 +2930,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -3307,19 +2957,16 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -3338,8 +2985,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -3348,15 +2994,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -3365,8 +3009,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -3393,8 +3036,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -3403,8 +3045,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -3413,8 +3054,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -3426,8 +3066,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -3445,8 +3084,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -3455,12 +3093,10 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -3478,12 +3114,10 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -3534,8 +3168,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -3553,8 +3186,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -3563,8 +3195,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -3578,8 +3209,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -3674,8 +3304,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -3697,8 +3326,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -3865,23 +3493,19 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -3940,12 +3564,10 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -3957,19 +3579,16 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -4041,19 +3660,16 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -4062,12 +3678,10 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -4093,8 +3707,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -4148,8 +3761,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -4161,8 +3773,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -4322,8 +3933,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -4475,15 +4085,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -4495,19 +4103,16 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -4516,8 +4121,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -4544,8 +4148,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get qualityHiResFlacMaxSubtitle => '24-bit / up to 192kHz'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -4635,8 +4238,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueEmpty => 'No downloads in queue'; @@ -4672,8 +4274,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -4691,8 +4292,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -4802,8 +4402,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; @@ -4840,14 +4439,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { /// The translations for Chinese, as used in Taiwan (`zh_TW`). class AppLocalizationsZhTw extends AppLocalizationsZh { - AppLocalizationsZhTw() : super('zh_TW'); + AppLocalizationsZhTw(): super('zh_TW'); @override String get appName => 'SpotiFLAC'; @override - String get appDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get appDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get navHome => 'Home'; @@ -4933,15 +4531,13 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get historyNoAlbums => 'No album downloads'; @override - String get historyNoAlbumsSubtitle => - 'Download multiple tracks from an album to see them here'; + String get historyNoAlbumsSubtitle => 'Download multiple tracks from an album to see them here'; @override String get historyNoSingles => 'No single downloads'; @override - String get historyNoSinglesSubtitle => - 'Single track downloads will appear here'; + String get historyNoSinglesSubtitle => 'Single track downloads will appear here'; @override String get historySearchHint => 'Search history...'; @@ -4989,8 +4585,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get downloadAskQuality => 'Ask Quality Before Download'; @override - String get downloadAskQualitySubtitle => - 'Show quality picker for each download'; + String get downloadAskQualitySubtitle => 'Show quality picker for each download'; @override String get downloadFilenameFormat => 'Filename Format'; @@ -5002,8 +4597,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get downloadSeparateSingles => 'Separate Singles'; @override - String get downloadSeparateSinglesSubtitle => - 'Put single tracks in a separate folder'; + String get downloadSeparateSinglesSubtitle => 'Put single tracks in a separate folder'; @override String get qualityBest => 'Best Available'; @@ -5060,8 +4654,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get optionsPrimaryProvider => 'Primary Provider'; @override - String get optionsPrimaryProviderSubtitle => - 'Service used when searching by track name.'; + String get optionsPrimaryProviderSubtitle => 'Service used when searching by track name.'; @override String optionsUsingExtension(String extensionName) { @@ -5069,15 +4662,13 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { } @override - String get optionsSwitchBack => - 'Tap Deezer or Spotify to switch back from extension'; + String get optionsSwitchBack => 'Tap Deezer or Spotify to switch back from extension'; @override String get optionsAutoFallback => 'Auto Fallback'; @override - String get optionsAutoFallbackSubtitle => - 'Try other services if download fails'; + String get optionsAutoFallbackSubtitle => 'Try other services if download fails'; @override String get optionsUseExtensionProviders => 'Use Extension Providers'; @@ -5092,15 +4683,13 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get optionsEmbedLyrics => 'Embed Lyrics'; @override - String get optionsEmbedLyricsSubtitle => - 'Embed synced lyrics into FLAC files'; + String get optionsEmbedLyricsSubtitle => 'Embed synced lyrics into FLAC files'; @override String get optionsMaxQualityCover => 'Max Quality Cover'; @override - String get optionsMaxQualityCoverSubtitle => - 'Download highest resolution cover art'; + String get optionsMaxQualityCoverSubtitle => 'Download highest resolution cover art'; @override String get optionsConcurrentDownloads => 'Concurrent Downloads'; @@ -5114,8 +4703,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { } @override - String get optionsConcurrentWarning => - 'Parallel downloads may trigger rate limiting'; + String get optionsConcurrentWarning => 'Parallel downloads may trigger rate limiting'; @override String get optionsExtensionStore => 'Extension Store'; @@ -5127,8 +4715,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get optionsCheckUpdates => 'Check for Updates'; @override - String get optionsCheckUpdatesSubtitle => - 'Notify when new version is available'; + String get optionsCheckUpdatesSubtitle => 'Notify when new version is available'; @override String get optionsUpdateChannel => 'Update Channel'; @@ -5140,15 +4727,13 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get optionsUpdateChannelPreview => 'Get preview releases'; @override - String get optionsUpdateChannelWarning => - 'Preview may contain bugs or incomplete features'; + String get optionsUpdateChannelWarning => 'Preview may contain bugs or incomplete features'; @override String get optionsClearHistory => 'Clear Download History'; @override - String get optionsClearHistorySubtitle => - 'Remove all downloaded tracks from history'; + String get optionsClearHistorySubtitle => 'Remove all downloaded tracks from history'; @override String get optionsDetailedLogging => 'Detailed Logging'; @@ -5171,8 +4756,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get optionsSpotifyCredentialsRequired => 'Required - tap to configure'; @override - String get optionsSpotifyWarning => - 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; + String get optionsSpotifyWarning => 'Spotify requires your own API credentials. Get them free from developer.spotify.com'; @override String get extensionsTitle => 'Extensions'; @@ -5236,8 +4820,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get aboutOriginalCreator => 'Creator of the original SpotiFLAC'; @override - String get aboutLogoArtist => - 'The talented artist who created our beautiful app logo!'; + String get aboutLogoArtist => 'The talented artist who created our beautiful app logo!'; @override String get aboutTranslators => 'Translators'; @@ -5297,30 +4880,25 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get aboutVersion => 'Version'; @override - String get aboutBinimumDesc => - 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; + String get aboutBinimumDesc => 'The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn\'t exist!'; @override - String get aboutSachinsenalDesc => - 'The original HiFi project creator. The foundation of Tidal integration!'; + String get aboutSachinsenalDesc => 'The original HiFi project creator. The foundation of Tidal integration!'; @override String get aboutDoubleDouble => 'DoubleDouble'; @override - String get aboutDoubleDoubleDesc => - 'Amazing API for Amazon Music downloads. Thank you for making it free!'; + String get aboutDoubleDoubleDesc => 'Amazing API for Amazon Music downloads. Thank you for making it free!'; @override String get aboutDabMusic => 'DAB Music'; @override - String get aboutDabMusicDesc => - 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; + String get aboutDabMusicDesc => 'The best Qobuz streaming API. Hi-Res downloads wouldn\'t be possible without this!'; @override - String get aboutAppDescription => - 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; + String get aboutAppDescription => 'Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.'; @override String get albumTitle => 'Album'; @@ -5425,8 +5003,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupStoragePermission => 'Storage Permission'; @override - String get setupStoragePermissionSubtitle => - 'Required to save downloaded files'; + String get setupStoragePermissionSubtitle => 'Required to save downloaded files'; @override String get setupStoragePermissionGranted => 'Permission granted'; @@ -5453,19 +5030,16 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupStorageAccessRequired => 'Storage Access Required'; @override - String get setupStorageAccessMessage => - 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; + String get setupStorageAccessMessage => 'SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.'; @override - String get setupStorageAccessMessageAndroid11 => - 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; + String get setupStorageAccessMessageAndroid11 => 'Android 11+ requires \"All files access\" permission to save files to your chosen download folder.'; @override String get setupOpenSettings => 'Open Settings'; @override - String get setupPermissionDeniedMessage => - 'Permission denied. Please grant all permissions to continue.'; + String get setupPermissionDeniedMessage => 'Permission denied. Please grant all permissions to continue.'; @override String setupPermissionRequired(String permissionType) { @@ -5484,8 +5058,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupUseDefaultFolder => 'Use Default Folder?'; @override - String get setupNoFolderSelected => - 'No folder selected. Would you like to use the default Music folder?'; + String get setupNoFolderSelected => 'No folder selected. Would you like to use the default Music folder?'; @override String get setupUseDefault => 'Use Default'; @@ -5494,15 +5067,13 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupDownloadLocationTitle => 'Download Location'; @override - String get setupDownloadLocationIosMessage => - 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; + String get setupDownloadLocationIosMessage => 'On iOS, downloads are saved to the app\'s Documents folder. You can access them via the Files app.'; @override String get setupAppDocumentsFolder => 'App Documents Folder'; @override - String get setupAppDocumentsFolderSubtitle => - 'Recommended - accessible via Files app'; + String get setupAppDocumentsFolderSubtitle => 'Recommended - accessible via Files app'; @override String get setupChooseFromFiles => 'Choose from Files'; @@ -5511,8 +5082,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupChooseFromFilesSubtitle => 'Select iCloud or other location'; @override - String get setupIosEmptyFolderWarning => - 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; + String get setupIosEmptyFolderWarning => 'iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.'; @override String get setupDownloadInFlac => 'Download Spotify tracks in FLAC'; @@ -5539,8 +5109,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupStorageRequired => 'Storage Permission Required'; @override - String get setupStorageDescription => - 'SpotiFLAC needs storage permission to save your downloaded music files.'; + String get setupStorageDescription => 'SpotiFLAC needs storage permission to save your downloaded music files.'; @override String get setupNotificationGranted => 'Notification Permission Granted!'; @@ -5549,8 +5118,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupNotificationEnable => 'Enable Notifications'; @override - String get setupNotificationDescription => - 'Get notified when downloads complete or require attention.'; + String get setupNotificationDescription => 'Get notified when downloads complete or require attention.'; @override String get setupFolderSelected => 'Download Folder Selected!'; @@ -5559,8 +5127,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupFolderChoose => 'Choose Download Folder'; @override - String get setupFolderDescription => - 'Select a folder where your downloaded music will be saved.'; + String get setupFolderDescription => 'Select a folder where your downloaded music will be saved.'; @override String get setupChangeFolder => 'Change Folder'; @@ -5572,8 +5139,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupSpotifyApiOptional => 'Spotify API (Optional)'; @override - String get setupSpotifyApiDescription => - 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; + String get setupSpotifyApiDescription => 'Add your Spotify API credentials for better search results and access to Spotify-exclusive content.'; @override String get setupUseSpotifyApi => 'Use Spotify API'; @@ -5591,8 +5157,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupEnterClientSecret => 'Enter Spotify Client Secret'; @override - String get setupGetFreeCredentials => - 'Get your free API credentials from the Spotify Developer Dashboard.'; + String get setupGetFreeCredentials => 'Get your free API credentials from the Spotify Developer Dashboard.'; @override String get setupEnableNotifications => 'Enable Notifications'; @@ -5601,12 +5166,10 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupProceedToNextStep => 'You can now proceed to the next step.'; @override - String get setupNotificationProgressDescription => - 'You will receive download progress notifications.'; + String get setupNotificationProgressDescription => 'You will receive download progress notifications.'; @override - String get setupNotificationBackgroundDescription => - 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; + String get setupNotificationBackgroundDescription => 'Get notified about download progress and completion. This helps you track downloads when the app is in background.'; @override String get setupSkipForNow => 'Skip for now'; @@ -5624,12 +5187,10 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get setupSkipAndStart => 'Skip & Start'; @override - String get setupAllowAccessToManageFiles => - 'Please enable \"Allow access to manage all files\" in the next screen.'; + String get setupAllowAccessToManageFiles => 'Please enable \"Allow access to manage all files\" in the next screen.'; @override - String get setupGetCredentialsFromSpotify => - 'Get credentials from developer.spotify.com'; + String get setupGetCredentialsFromSpotify => 'Get credentials from developer.spotify.com'; @override String get dialogCancel => 'Cancel'; @@ -5680,8 +5241,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get dialogDiscardChanges => 'Discard Changes?'; @override - String get dialogUnsavedChanges => - 'You have unsaved changes. Do you want to discard them?'; + String get dialogUnsavedChanges => 'You have unsaved changes. Do you want to discard them?'; @override String get dialogDownloadFailed => 'Download Failed'; @@ -5699,8 +5259,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get dialogClearAll => 'Clear All'; @override - String get dialogClearAllDownloads => - 'Are you sure you want to clear all downloads?'; + String get dialogClearAllDownloads => 'Are you sure you want to clear all downloads?'; @override String get dialogRemoveFromDevice => 'Remove from device?'; @@ -5709,8 +5268,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get dialogRemoveExtension => 'Remove Extension'; @override - String get dialogRemoveExtensionMessage => - 'Are you sure you want to remove this extension? This cannot be undone.'; + String get dialogRemoveExtensionMessage => 'Are you sure you want to remove this extension? This cannot be undone.'; @override String get dialogUninstallExtension => 'Uninstall Extension?'; @@ -5724,8 +5282,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get dialogClearHistoryTitle => 'Clear History'; @override - String get dialogClearHistoryMessage => - 'Are you sure you want to clear all download history? This cannot be undone.'; + String get dialogClearHistoryMessage => 'Are you sure you want to clear all download history? This cannot be undone.'; @override String get dialogDeleteSelectedTitle => 'Delete Selected'; @@ -5820,8 +5377,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get snackbarProviderPrioritySaved => 'Provider priority saved'; @override - String get snackbarMetadataProviderSaved => - 'Metadata provider priority saved'; + String get snackbarMetadataProviderSaved => 'Metadata provider priority saved'; @override String snackbarExtensionInstalled(String extensionName) { @@ -5843,8 +5399,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get errorRateLimited => 'Rate Limited'; @override - String get errorRateLimitedMessage => - 'Too many requests. Please wait a moment before searching again.'; + String get errorRateLimitedMessage => 'Too many requests. Please wait a moment before searching again.'; @override String errorFailedToLoad(String item) { @@ -6011,23 +5566,19 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get folderOrganizationByArtistAlbum => 'Artist/Album'; @override - String get folderOrganizationDescription => - 'Organize downloaded files into folders'; + String get folderOrganizationDescription => 'Organize downloaded files into folders'; @override String get folderOrganizationNoneSubtitle => 'All files in download folder'; @override - String get folderOrganizationByArtistSubtitle => - 'Separate folder for each artist'; + String get folderOrganizationByArtistSubtitle => 'Separate folder for each artist'; @override - String get folderOrganizationByAlbumSubtitle => - 'Separate folder for each album'; + String get folderOrganizationByAlbumSubtitle => 'Separate folder for each album'; @override - String get folderOrganizationByArtistAlbumSubtitle => - 'Nested folders for artist and album'; + String get folderOrganizationByArtistAlbumSubtitle => 'Nested folders for artist and album'; @override String get updateAvailable => 'Update Available'; @@ -6086,12 +5637,10 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get providerPriorityTitle => 'Provider Priority'; @override - String get providerPriorityDescription => - 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; + String get providerPriorityDescription => 'Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.'; @override - String get providerPriorityInfo => - 'If a track is not available on the first provider, the app will automatically try the next one.'; + String get providerPriorityInfo => 'If a track is not available on the first provider, the app will automatically try the next one.'; @override String get providerBuiltIn => 'Built-in'; @@ -6103,19 +5652,16 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get metadataProviderPriority => 'Metadata Provider Priority'; @override - String get metadataProviderPrioritySubtitle => - 'Order used when fetching track metadata'; + String get metadataProviderPrioritySubtitle => 'Order used when fetching track metadata'; @override String get metadataProviderPriorityTitle => 'Metadata Priority'; @override - String get metadataProviderPriorityDescription => - 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; + String get metadataProviderPriorityDescription => 'Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.'; @override - String get metadataProviderPriorityInfo => - 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; + String get metadataProviderPriorityInfo => 'Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.'; @override String get metadataNoRateLimits => 'No rate limits'; @@ -6187,19 +5733,16 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get logIssueSummary => 'Issue Summary'; @override - String get logIspBlockingDescription => - 'Your ISP may be blocking access to download services'; + String get logIspBlockingDescription => 'Your ISP may be blocking access to download services'; @override - String get logIspBlockingSuggestion => - 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; + String get logIspBlockingSuggestion => 'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8'; @override String get logRateLimitedDescription => 'Too many requests to the service'; @override - String get logRateLimitedSuggestion => - 'Wait a few minutes before trying again'; + String get logRateLimitedSuggestion => 'Wait a few minutes before trying again'; @override String get logNetworkErrorDescription => 'Connection issues detected'; @@ -6208,12 +5751,10 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get logNetworkErrorSuggestion => 'Check your internet connection'; @override - String get logTrackNotFoundDescription => - 'Some tracks could not be found on download services'; + String get logTrackNotFoundDescription => 'Some tracks could not be found on download services'; @override - String get logTrackNotFoundSuggestion => - 'The track may not be available in lossless quality'; + String get logTrackNotFoundSuggestion => 'The track may not be available in lossless quality'; @override String logTotalErrors(int count) { @@ -6239,8 +5780,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get credentialsTitle => 'Spotify Credentials'; @override - String get credentialsDescription => - 'Enter your Client ID and Secret to use your own Spotify application quota.'; + String get credentialsDescription => 'Enter your Client ID and Secret to use your own Spotify application quota.'; @override String get credentialsClientId => 'Client ID'; @@ -6294,8 +5834,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get lyricsMode => 'Lyrics Mode'; @override - String get lyricsModeDescription => - 'Choose how lyrics are saved with your downloads'; + String get lyricsModeDescription => 'Choose how lyrics are saved with your downloads'; @override String get lyricsModeEmbed => 'Embed in file'; @@ -6307,8 +5846,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get lyricsModeExternal => 'External .lrc file'; @override - String get lyricsModeExternalSubtitle => - 'Separate .lrc file for players like Samsung Music'; + String get lyricsModeExternalSubtitle => 'Separate .lrc file for players like Samsung Music'; @override String get lyricsModeBoth => 'Both'; @@ -6468,8 +6006,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get trackDeleteConfirmTitle => 'Remove from device?'; @override - String get trackDeleteConfirmMessage => - 'This will permanently delete the downloaded file and remove it from your history.'; + String get trackDeleteConfirmMessage => 'This will permanently delete the downloaded file and remove it from your history.'; @override String trackCannotOpen(String message) { @@ -6621,15 +6158,13 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get extensionsNoExtensions => 'No extensions installed'; @override - String get extensionsNoExtensionsSubtitle => - 'Install .spotiflac-ext files to add new providers'; + String get extensionsNoExtensionsSubtitle => 'Install .spotiflac-ext files to add new providers'; @override String get extensionsInstallButton => 'Install Extension'; @override - String get extensionsInfoTip => - 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; + String get extensionsInfoTip => 'Extensions can add new metadata and download providers. Only install extensions from trusted sources.'; @override String get extensionsInstalledSuccess => 'Extension installed successfully'; @@ -6641,19 +6176,16 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get extensionsDownloadPrioritySubtitle => 'Set download service order'; @override - String get extensionsNoDownloadProvider => - 'No extensions with download provider'; + String get extensionsNoDownloadProvider => 'No extensions with download provider'; @override String get extensionsMetadataPriority => 'Metadata Priority'; @override - String get extensionsMetadataPrioritySubtitle => - 'Set search & metadata source order'; + String get extensionsMetadataPrioritySubtitle => 'Set search & metadata source order'; @override - String get extensionsNoMetadataProvider => - 'No extensions with metadata provider'; + String get extensionsNoMetadataProvider => 'No extensions with metadata provider'; @override String get extensionsSearchProvider => 'Search Provider'; @@ -6662,8 +6194,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get extensionsNoCustomSearch => 'No extensions with custom search'; @override - String get extensionsSearchProviderDescription => - 'Choose which service to use for searching tracks'; + String get extensionsSearchProviderDescription => 'Choose which service to use for searching tracks'; @override String get extensionsCustomSearch => 'Custom search'; @@ -6690,8 +6221,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get qualityHiResFlacMaxSubtitle => '24-bit / up to 192kHz'; @override - String get qualityNote => - 'Actual quality depends on track availability from the service'; + String get qualityNote => 'Actual quality depends on track availability from the service'; @override String get downloadAskBeforeDownload => 'Ask Before Download'; @@ -6781,8 +6311,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get queueClearAll => 'Clear All'; @override - String get queueClearAllMessage => - 'Are you sure you want to clear all downloads?'; + String get queueClearAllMessage => 'Are you sure you want to clear all downloads?'; @override String get queueEmpty => 'No downloads in queue'; @@ -6818,8 +6347,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get albumFolderArtistYearAlbum => 'Artist / [Year] Album'; @override - String get albumFolderArtistYearAlbumSubtitle => - 'Albums/Artist Name/[2005] Album Name/'; + String get albumFolderArtistYearAlbumSubtitle => 'Albums/Artist Name/[2005] Album Name/'; @override String get albumFolderAlbumOnly => 'Album Only'; @@ -6837,8 +6365,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get albumFolderArtistAlbumSingles => 'Artist / Album + Singles'; @override - String get albumFolderArtistAlbumSinglesSubtitle => - 'Artist/Album/ and Artist/Singles/'; + String get albumFolderArtistAlbumSinglesSubtitle => 'Artist/Album/ and Artist/Singles/'; @override String get downloadedAlbumDeleteSelected => 'Delete Selected'; @@ -6948,8 +6475,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { String get discographySelectAlbums => 'Select Albums...'; @override - String get discographySelectAlbumsSubtitle => - 'Choose specific albums or singles'; + String get discographySelectAlbumsSubtitle => 'Choose specific albums or singles'; @override String get discographyFetchingTracks => 'Fetching tracks...'; diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 9d5b82ea..97eadb1f 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -1488,100 +1488,6 @@ "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", "@settingsDownloadNetworkSubtitle": {"description": "Subtitle explaining network preference"}, - "settingsCloudSave": "Cloud Save", - "@settingsCloudSave": {"description": "Settings menu item for cloud upload"}, - "settingsCloudSaveSubtitle": "Auto-upload to NAS or cloud storage", - "@settingsCloudSaveSubtitle": {"description": "Subtitle for cloud save menu item"}, - - "cloudSettingsTitle": "Cloud Save", - "@cloudSettingsTitle": {"description": "Cloud settings page title"}, - "cloudSettingsSectionGeneral": "General", - "@cloudSettingsSectionGeneral": {"description": "General section header"}, - "cloudSettingsEnable": "Enable Cloud Upload", - "@cloudSettingsEnable": {"description": "Toggle to enable cloud upload"}, - "cloudSettingsEnableSubtitle": "Automatically upload files after download completes", - "@cloudSettingsEnableSubtitle": {"description": "Subtitle for enable toggle"}, - "cloudSettingsSectionProvider": "Cloud Provider", - "@cloudSettingsSectionProvider": {"description": "Provider section header"}, - "cloudSettingsProvider": "Provider", - "@cloudSettingsProvider": {"description": "Provider selection setting"}, - "cloudSettingsProviderDescription": "Select where to upload your downloaded files", - "@cloudSettingsProviderDescription": {"description": "Provider picker description"}, - "cloudSettingsSectionServer": "Server Configuration", - "@cloudSettingsSectionServer": {"description": "Server config section header"}, - "cloudSettingsServerUrl": "Server URL", - "@cloudSettingsServerUrl": {"description": "Server URL field label"}, - "cloudSettingsUsername": "Username", - "@cloudSettingsUsername": {"description": "Username field label"}, - "cloudSettingsPassword": "Password", - "@cloudSettingsPassword": {"description": "Password field label"}, - "cloudSettingsRemotePath": "Remote Folder Path", - "@cloudSettingsRemotePath": {"description": "Remote path field label"}, - "cloudSettingsTestConnection": "Test Connection", - "@cloudSettingsTestConnection": {"description": "Test connection button"}, - "cloudSettingsInfo": "Downloaded files will be automatically uploaded to your cloud storage after download completes. Original files are kept on your device.", - "@cloudSettingsInfo": {"description": "Info card explaining the feature"}, - "cloudSettingsUploadQueue": "Upload Queue", - "@cloudSettingsUploadQueue": {"description": "Section header for upload queue status"}, - "cloudSettingsRetryFailed": "Retry Failed", - "@cloudSettingsRetryFailed": {"description": "Button to retry failed uploads"}, - "cloudSettingsClearDone": "Clear Done", - "@cloudSettingsClearDone": {"description": "Button to clear completed uploads"}, - "cloudSettingsRecentUploads": "Recent Uploads", - "@cloudSettingsRecentUploads": {"description": "Section header for recent uploads list"}, - "cloudSettingsResetSftpHostKey": "Reset SFTP Host Key", - "@cloudSettingsResetSftpHostKey": {"description": "Button/title to reset SFTP host key for current server"}, - "cloudSettingsResetAllSftpHostKeys": "Reset All SFTP Host Keys", - "@cloudSettingsResetAllSftpHostKeys": {"description": "Button/title to reset all saved SFTP host keys"}, - "cloudSettingsResetSftpHostKeyMessage": "This will forget the saved host key for this server. The next connection will save a new key.", - "@cloudSettingsResetSftpHostKeyMessage": {"description": "Dialog message for resetting SFTP host key"}, - "cloudSettingsResetAllSftpHostKeysMessage": "This will forget all saved SFTP host keys. Next connections will save new keys.", - "@cloudSettingsResetAllSftpHostKeysMessage": {"description": "Dialog message for resetting all SFTP host keys"}, - "cloudSettingsResetConfirm": "Reset", - "@cloudSettingsResetConfirm": {"description": "Dialog confirm button for reset action"}, - "cloudSettingsResetAllConfirm": "Reset All", - "@cloudSettingsResetAllConfirm": {"description": "Dialog confirm button for reset all action"}, - "cloudSettingsServerUrlRequired": "Server URL is required", - "@cloudSettingsServerUrlRequired": {"description": "Validation message when server URL is missing"}, - "cloudSettingsResetSftpHostKeySuccess": "SFTP host key reset. Connect again to save a new key.", - "@cloudSettingsResetSftpHostKeySuccess": {"description": "Snackbar after resetting SFTP host key"}, - "cloudSettingsResetSftpHostKeyNotFound": "No stored host key found for this server.", - "@cloudSettingsResetSftpHostKeyNotFound": {"description": "Snackbar when no host key exists for the current server"}, - "cloudSettingsResetAllSftpHostKeysCleared": "{count, plural, =1{Cleared 1 SFTP host key.} other{Cleared {count} SFTP host keys.}}", - "@cloudSettingsResetAllSftpHostKeysCleared": {"description": "Snackbar after clearing all SFTP host keys", "placeholders": {"count": {}}}, - "cloudSettingsResetAllSftpHostKeysNone": "No stored SFTP host keys found.", - "@cloudSettingsResetAllSftpHostKeysNone": {"description": "Snackbar when no SFTP host keys exist"}, - "cloudSettingsAllowHttpTitle": "Allow HTTP (Insecure)", - "@cloudSettingsAllowHttpTitle": {"description": "Toggle/title for allowing insecure HTTP WebDAV connections"}, - "cloudSettingsAllowHttpSubtitle": "Sends credentials without TLS. Not recommended.", - "@cloudSettingsAllowHttpSubtitle": {"description": "Subtitle warning for allowing insecure HTTP"}, - "cloudSettingsAllowHttpMessage": "HTTP does not encrypt your credentials. Only enable if you trust the network.", - "@cloudSettingsAllowHttpMessage": {"description": "Dialog warning message for enabling insecure HTTP"}, - "cloudSettingsAllowHttpConfirm": "Allow HTTP", - "@cloudSettingsAllowHttpConfirm": {"description": "Dialog confirm button for enabling insecure HTTP"}, - "webdavErrorInvalidScheme": "Invalid URL: scheme is required", - "@webdavErrorInvalidScheme": {"description": "WebDAV error when URL scheme is missing"}, - "webdavErrorHttpsRequired": "WebDAV URL must use https", - "@webdavErrorHttpsRequired": {"description": "WebDAV error when HTTPS is required"}, - "webdavErrorInvalidHost": "Invalid URL: hostname is required", - "@webdavErrorInvalidHost": {"description": "WebDAV error when hostname is missing"}, - "webdavErrorAuthFailed": "Authentication failed. Check username and password.", - "@webdavErrorAuthFailed": {"description": "WebDAV error when authentication fails"}, - "webdavErrorForbidden": "Access denied. Check permissions on the server.", - "@webdavErrorForbidden": {"description": "WebDAV error when access is forbidden"}, - "webdavErrorNotFound": "Server path not found. Check the URL.", - "@webdavErrorNotFound": {"description": "WebDAV error when path is not found"}, - "webdavErrorConnectionFailed": "Cannot connect to server. Check URL and network.", - "@webdavErrorConnectionFailed": {"description": "WebDAV error when connection fails"}, - "webdavErrorTlsError": "SSL/TLS error. Server certificate may be invalid.", - "@webdavErrorTlsError": {"description": "WebDAV error for TLS issues"}, - "webdavErrorTimeout": "Connection timed out. Server may be unreachable.", - "@webdavErrorTimeout": {"description": "WebDAV error when connection times out"}, - "webdavErrorInsufficientStorage": "Insufficient storage on server.", - "@webdavErrorInsufficientStorage": {"description": "WebDAV error when server storage is full"}, - "webdavErrorUnknown": "Upload failed. Please try again.", - "@webdavErrorUnknown": {"description": "WebDAV fallback error message"}, - "queueEmpty": "No downloads in queue", "@queueEmpty": {"description": "Empty queue state title"}, "queueEmptySubtitle": "Add tracks from the home screen", @@ -1934,63 +1840,5 @@ "placeholders": { "count": {"type": "int"} } - }, - - "cloudProviderWebdav": "WebDAV (Synology, Nextcloud, QNAP)", - "@cloudProviderWebdav": {"description": "WebDAV provider option with examples"}, - "cloudProviderSftp": "SFTP (SSH File Transfer)", - "@cloudProviderSftp": {"description": "SFTP provider option"}, - "cloudProviderNotConfigured": "Not Configured", - "@cloudProviderNotConfigured": {"description": "No cloud provider selected"}, - "cloudProviderWebdavTitle": "WebDAV", - "@cloudProviderWebdavTitle": {"description": "WebDAV provider title in picker"}, - "cloudProviderWebdavSubtitle": "Synology, Nextcloud, QNAP, ownCloud", - "@cloudProviderWebdavSubtitle": {"description": "WebDAV provider subtitle in picker"}, - "cloudProviderSftpTitle": "SFTP", - "@cloudProviderSftpTitle": {"description": "SFTP provider title in picker"}, - "cloudProviderSftpSubtitle": "SSH File Transfer Protocol", - "@cloudProviderSftpSubtitle": {"description": "SFTP provider subtitle in picker"}, - - "cloudTestErrorServerUrlRequired": "Server URL is required", - "@cloudTestErrorServerUrlRequired": {"description": "Error when testing connection without server URL"}, - "cloudTestErrorCredentialsRequired": "Username and password are required", - "@cloudTestErrorCredentialsRequired": {"description": "Error when testing connection without credentials"}, - "cloudTestSuccessWebdav": "Connected to WebDAV server", - "@cloudTestSuccessWebdav": {"description": "Success message for WebDAV connection test"}, - "cloudTestSuccessSftp": "Connected to SFTP server", - "@cloudTestSuccessSftp": {"description": "Success message for SFTP connection test"}, - "cloudTestErrorNoProvider": "No provider selected", - "@cloudTestErrorNoProvider": {"description": "Error when testing connection without provider"}, - - "connectionTestSuccess": "Success: {message}", - "@connectionTestSuccess": { - "description": "Connection test success message", - "placeholders": { - "message": {"type": "String"} - } - }, - - "uploadStatusPending": "Pending", - "@uploadStatusPending": {"description": "Upload queue status - waiting"}, - "uploadStatusUploading": "Uploading", - "@uploadStatusUploading": {"description": "Upload queue status - in progress"}, - "uploadStatusDone": "Done", - "@uploadStatusDone": {"description": "Upload queue status - completed"}, - "uploadStatusFailed": "Failed", - "@uploadStatusFailed": {"description": "Upload queue status - error"}, - - "cloudStatusDisabled": "Cloud Save Off", - "@cloudStatusDisabled": {"description": "Status when cloud save is disabled"}, - "cloudStatusDisabledSubtitle": "Enable to auto-upload tracks", - "@cloudStatusDisabledSubtitle": {"description": "Subtitle when cloud save is disabled"}, - "cloudStatusNoProvider": "Select Provider", - "@cloudStatusNoProvider": {"description": "Status when no provider selected"}, - "cloudStatusNoProviderSubtitle": "Choose a cloud service", - "@cloudStatusNoProviderSubtitle": {"description": "Subtitle when no provider selected"}, - "cloudStatusNotConfigured": "Setup Required", - "@cloudStatusNotConfigured": {"description": "Status when settings missing"}, - "cloudStatusNotConfiguredSubtitle": "Configure your server details", - "@cloudStatusNotConfiguredSubtitle": {"description": "Subtitle when settings missing"}, - "cloudStatusActive": "Connected", - "@cloudStatusActive": {"description": "Status when cloud save is active"} + } } diff --git a/lib/models/settings.dart b/lib/models/settings.dart index 755e0d53..7de175c3 100644 --- a/lib/models/settings.dart +++ b/lib/models/settings.dart @@ -37,15 +37,6 @@ class AppSettings { final bool autoExportFailedDownloads; // Auto export failed downloads to TXT file final String downloadNetworkMode; // 'any' = WiFi + Mobile, 'wifi_only' = WiFi only - // Cloud Upload Settings - final bool cloudUploadEnabled; // Enable auto-upload after download - final String cloudProvider; // 'none', 'webdav', 'sftp', 'gdrive' - final String cloudServerUrl; // WebDAV/SFTP server URL - final String cloudUsername; // Server username - final String cloudPassword; // Server password (stored securely) - final String cloudRemotePath; // Remote folder path (e.g. /Music/SpotiFLAC) - final bool cloudAllowInsecureHttp; // Allow HTTP for WebDAV (insecure) - // Local Library Settings final bool localLibraryEnabled; // Enable local library scanning final String localLibraryPath; // Path to scan for audio files @@ -84,14 +75,6 @@ class AppSettings { this.useAllFilesAccess = false, this.autoExportFailedDownloads = false, this.downloadNetworkMode = 'any', - // Cloud Upload defaults - this.cloudUploadEnabled = false, - this.cloudProvider = 'none', - this.cloudServerUrl = '', - this.cloudUsername = '', - this.cloudPassword = '', - this.cloudRemotePath = '/Music/SpotiFLAC', - this.cloudAllowInsecureHttp = false, // Local Library defaults this.localLibraryEnabled = false, this.localLibraryPath = '', @@ -132,14 +115,6 @@ class AppSettings { bool? useAllFilesAccess, bool? autoExportFailedDownloads, String? downloadNetworkMode, - // Cloud Upload - bool? cloudUploadEnabled, - String? cloudProvider, - String? cloudServerUrl, - String? cloudUsername, - String? cloudPassword, - String? cloudRemotePath, - bool? cloudAllowInsecureHttp, // Local Library bool? localLibraryEnabled, String? localLibraryPath, @@ -178,15 +153,6 @@ class AppSettings { useAllFilesAccess: useAllFilesAccess ?? this.useAllFilesAccess, autoExportFailedDownloads: autoExportFailedDownloads ?? this.autoExportFailedDownloads, downloadNetworkMode: downloadNetworkMode ?? this.downloadNetworkMode, - // Cloud Upload - cloudUploadEnabled: cloudUploadEnabled ?? this.cloudUploadEnabled, - cloudProvider: cloudProvider ?? this.cloudProvider, - cloudServerUrl: cloudServerUrl ?? this.cloudServerUrl, - cloudUsername: cloudUsername ?? this.cloudUsername, - cloudPassword: cloudPassword ?? this.cloudPassword, - cloudRemotePath: cloudRemotePath ?? this.cloudRemotePath, - cloudAllowInsecureHttp: - cloudAllowInsecureHttp ?? this.cloudAllowInsecureHttp, // Local Library localLibraryEnabled: localLibraryEnabled ?? this.localLibraryEnabled, localLibraryPath: localLibraryPath ?? this.localLibraryPath, diff --git a/lib/models/settings.g.dart b/lib/models/settings.g.dart index 3ef7c6e8..287828f4 100644 --- a/lib/models/settings.g.dart +++ b/lib/models/settings.g.dart @@ -42,14 +42,6 @@ AppSettings _$AppSettingsFromJson(Map json) => AppSettings( autoExportFailedDownloads: json['autoExportFailedDownloads'] as bool? ?? false, downloadNetworkMode: json['downloadNetworkMode'] as String? ?? 'any', - cloudUploadEnabled: json['cloudUploadEnabled'] as bool? ?? false, - cloudProvider: json['cloudProvider'] as String? ?? 'none', - cloudServerUrl: json['cloudServerUrl'] as String? ?? '', - cloudUsername: json['cloudUsername'] as String? ?? '', - cloudPassword: json['cloudPassword'] as String? ?? '', - cloudRemotePath: json['cloudRemotePath'] as String? ?? '/Music/SpotiFLAC', - cloudAllowInsecureHttp: - json['cloudAllowInsecureHttp'] as bool? ?? false, localLibraryEnabled: json['localLibraryEnabled'] as bool? ?? false, localLibraryPath: json['localLibraryPath'] as String? ?? '', localLibraryShowDuplicates: @@ -90,13 +82,6 @@ Map _$AppSettingsToJson(AppSettings instance) => 'useAllFilesAccess': instance.useAllFilesAccess, 'autoExportFailedDownloads': instance.autoExportFailedDownloads, 'downloadNetworkMode': instance.downloadNetworkMode, - 'cloudUploadEnabled': instance.cloudUploadEnabled, - 'cloudProvider': instance.cloudProvider, - 'cloudServerUrl': instance.cloudServerUrl, - 'cloudUsername': instance.cloudUsername, - 'cloudPassword': instance.cloudPassword, - 'cloudRemotePath': instance.cloudRemotePath, - 'cloudAllowInsecureHttp': instance.cloudAllowInsecureHttp, 'localLibraryEnabled': instance.localLibraryEnabled, 'localLibraryPath': instance.localLibraryPath, 'localLibraryShowDuplicates': instance.localLibraryShowDuplicates, diff --git a/lib/providers/download_queue_provider.dart b/lib/providers/download_queue_provider.dart index 718bd572..54c20328 100644 --- a/lib/providers/download_queue_provider.dart +++ b/lib/providers/download_queue_provider.dart @@ -15,7 +15,6 @@ import 'package:spotiflac_android/services/platform_bridge.dart'; import 'package:spotiflac_android/services/ffmpeg_service.dart'; import 'package:spotiflac_android/services/notification_service.dart'; import 'package:spotiflac_android/services/history_database.dart'; -import 'package:spotiflac_android/providers/upload_queue_provider.dart'; import 'package:spotiflac_android/utils/logger.dart'; final _log = AppLogger('DownloadQueue'); @@ -1020,35 +1019,6 @@ void removeItem(String id) { _saveQueueToStorage(); } - /// Trigger cloud upload for a completed download - void _triggerCloudUpload({ - required String filePath, - required String trackName, - required String artistName, - }) { - final settings = ref.read(settingsProvider); - - // Check if cloud upload is enabled - if (!settings.cloudUploadEnabled || settings.cloudProvider == 'none') { - return; - } - - // Check if server is configured - if (settings.cloudServerUrl.isEmpty) { - _log.w('Cloud upload enabled but server URL not configured'); - return; - } - - // Add to upload queue - ref.read(uploadQueueProvider.notifier).addToQueue( - localPath: filePath, - trackName: trackName, - artistName: artistName, - ); - - _log.d('Added to cloud upload queue: $trackName - $artistName'); - } - /// Export failed downloads to a TXT file /// Returns the file path if successful, null otherwise /// Uses daily files: same day = append to existing file, new day = new file @@ -2459,13 +2429,6 @@ result = await PlatformBridge.downloadWithExtensions( ); removeItem(item.id); - - // Trigger cloud upload if enabled - _triggerCloudUpload( - filePath: filePath, - trackName: trackToDownload.name, - artistName: trackToDownload.artistName, - ); } } else { final itemAfterFailure = state.items.firstWhere( diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index acfb3ddd..0d8991f7 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -9,7 +9,6 @@ import 'package:spotiflac_android/utils/logger.dart'; const _settingsKey = 'app_settings'; const _migrationVersionKey = 'settings_migration_version'; const _currentMigrationVersion = 1; -const _cloudPasswordKey = 'cloud_password'; const _spotifyClientSecretKey = 'spotify_client_secret'; class SettingsNotifier extends Notifier { @@ -31,7 +30,6 @@ class SettingsNotifier extends Notifier { await _runMigrations(prefs); } - await _loadCloudPassword(prefs); await _loadSpotifyClientSecret(prefs); _applySpotifyCredentials(); @@ -57,42 +55,11 @@ class SettingsNotifier extends Notifier { Future _saveSettings() async { final prefs = await _prefs; final settingsToSave = state.copyWith( - cloudPassword: '', spotifyClientSecret: '', ); await prefs.setString(_settingsKey, jsonEncode(settingsToSave.toJson())); } - Future _loadCloudPassword(SharedPreferences prefs) async { - final storedPassword = await _secureStorage.read(key: _cloudPasswordKey); - final prefsPassword = state.cloudPassword; - - if ((storedPassword == null || storedPassword.isEmpty) && - prefsPassword.isNotEmpty) { - await _secureStorage.write(key: _cloudPasswordKey, value: prefsPassword); - } - - final effectivePassword = (storedPassword != null && storedPassword.isNotEmpty) - ? storedPassword - : (prefsPassword.isNotEmpty ? prefsPassword : ''); - - if (effectivePassword != state.cloudPassword) { - state = state.copyWith(cloudPassword: effectivePassword); - } - - if (prefsPassword.isNotEmpty) { - await _saveSettings(); - } - } - - Future _storeCloudPassword(String password) async { - if (password.isEmpty) { - await _secureStorage.delete(key: _cloudPasswordKey); - } else { - await _secureStorage.write(key: _cloudPasswordKey, value: password); - } - } - Future _loadSpotifyClientSecret(SharedPreferences prefs) async { final storedSecret = await _secureStorage.read(key: _spotifyClientSecretKey); final prefsSecret = state.spotifyClientSecret; @@ -325,69 +292,6 @@ void setUseAllFilesAccess(bool enabled) { _saveSettings(); } - // Cloud Upload Settings - void setCloudUploadEnabled(bool enabled) { - state = state.copyWith(cloudUploadEnabled: enabled); - _saveSettings(); - } - - void setCloudProvider(String provider) { - state = state.copyWith(cloudProvider: provider); - _saveSettings(); - } - - void setCloudServerUrl(String url) { - state = state.copyWith(cloudServerUrl: url); - _saveSettings(); - } - - void setCloudUsername(String username) { - state = state.copyWith(cloudUsername: username); - _saveSettings(); - } - - Future setCloudPassword(String password) async { - state = state.copyWith(cloudPassword: password); - await _storeCloudPassword(password); - _saveSettings(); - } - - void setCloudRemotePath(String path) { - state = state.copyWith(cloudRemotePath: path); - _saveSettings(); - } - - void setCloudAllowInsecureHttp(bool allowed) { - state = state.copyWith(cloudAllowInsecureHttp: allowed); - _saveSettings(); - } - - Future setCloudSettings({ - bool? enabled, - String? provider, - String? serverUrl, - String? username, - String? password, - String? remotePath, - bool? allowInsecureHttp, - }) async { - final nextPassword = password ?? state.cloudPassword; - state = state.copyWith( - cloudUploadEnabled: enabled ?? state.cloudUploadEnabled, - cloudProvider: provider ?? state.cloudProvider, - cloudServerUrl: serverUrl ?? state.cloudServerUrl, - cloudUsername: username ?? state.cloudUsername, - cloudPassword: nextPassword, - cloudRemotePath: remotePath ?? state.cloudRemotePath, - cloudAllowInsecureHttp: - allowInsecureHttp ?? state.cloudAllowInsecureHttp, - ); - if (password != null) { - await _storeCloudPassword(nextPassword); - } - _saveSettings(); - } - // Local Library Settings void setLocalLibraryEnabled(bool enabled) { state = state.copyWith(localLibraryEnabled: enabled); diff --git a/lib/providers/upload_queue_provider.dart b/lib/providers/upload_queue_provider.dart deleted file mode 100644 index 40387773..00000000 --- a/lib/providers/upload_queue_provider.dart +++ /dev/null @@ -1,302 +0,0 @@ -import 'dart:async'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:spotiflac_android/services/cloud_upload_service.dart'; -import 'package:spotiflac_android/providers/settings_provider.dart'; - -/// Status of an upload item -enum UploadStatus { - pending, - uploading, - completed, - failed, -} - -/// An item in the upload queue -class UploadQueueItem { - final String id; - final String localPath; - final String remotePath; - final String trackName; - final String artistName; - final UploadStatus status; - final double progress; - final String? error; - final DateTime queuedAt; - final DateTime? completedAt; - - const UploadQueueItem({ - required this.id, - required this.localPath, - required this.remotePath, - required this.trackName, - required this.artistName, - this.status = UploadStatus.pending, - this.progress = 0.0, - this.error, - required this.queuedAt, - this.completedAt, - }); - - UploadQueueItem copyWith({ - UploadStatus? status, - double? progress, - String? error, - DateTime? completedAt, - }) { - return UploadQueueItem( - id: id, - localPath: localPath, - remotePath: remotePath, - trackName: trackName, - artistName: artistName, - status: status ?? this.status, - progress: progress ?? this.progress, - error: error ?? this.error, - queuedAt: queuedAt, - completedAt: completedAt ?? this.completedAt, - ); - } -} - -/// State of the upload queue -class UploadQueueState { - final List items; - final bool isProcessing; - final int completedCount; - final int failedCount; - - const UploadQueueState({ - this.items = const [], - this.isProcessing = false, - this.completedCount = 0, - this.failedCount = 0, - }); - - UploadQueueState copyWith({ - List? items, - bool? isProcessing, - int? completedCount, - int? failedCount, - }) { - return UploadQueueState( - items: items ?? this.items, - isProcessing: isProcessing ?? this.isProcessing, - completedCount: completedCount ?? this.completedCount, - failedCount: failedCount ?? this.failedCount, - ); - } - - int get pendingCount => items.where((i) => i.status == UploadStatus.pending).length; - int get uploadingCount => items.where((i) => i.status == UploadStatus.uploading).length; -} - -/// Provider for managing the cloud upload queue -class UploadQueueNotifier extends Notifier { - final CloudUploadService _uploadService = CloudUploadService.instance; - bool _isProcessing = false; - - @override - UploadQueueState build() { - return const UploadQueueState(); - } - - /// Add a file to the upload queue - void addToQueue({ - required String localPath, - required String trackName, - required String artistName, - }) { - final settings = ref.read(settingsProvider); - - // Don't add if cloud upload is disabled - if (!settings.cloudUploadEnabled || settings.cloudProvider == 'none') { - return; - } - - final remotePath = _uploadService.getRemotePath( - localFilePath: localPath, - baseRemotePath: settings.cloudRemotePath, - downloadDirectory: settings.downloadDirectory, - ); - - final item = UploadQueueItem( - id: '${DateTime.now().millisecondsSinceEpoch}_${localPath.hashCode}', - localPath: localPath, - remotePath: remotePath, - trackName: trackName, - artistName: artistName, - queuedAt: DateTime.now(), - ); - - state = state.copyWith( - items: [...state.items, item], - ); - - // Start processing if not already - _processQueue(); - } - - /// Process the upload queue - Future _processQueue() async { - if (_isProcessing) return; - _isProcessing = true; - state = state.copyWith(isProcessing: true); - - while (true) { - final settings = ref.read(settingsProvider); - - // Stop processing if cloud upload is disabled or provider is unset - if (!settings.cloudUploadEnabled || settings.cloudProvider == 'none') { - break; - } - - // Find next pending item - final pendingIndex = state.items.indexWhere( - (i) => i.status == UploadStatus.pending, - ); - - if (pendingIndex == -1) break; - - // Update status to uploading - final item = state.items[pendingIndex]; - _updateItem(pendingIndex, item.copyWith(status: UploadStatus.uploading)); - - // Perform upload based on provider - CloudUploadResult result; - if (settings.cloudProvider == 'webdav') { - result = await _uploadService.uploadFileWebDAV( - localPath: item.localPath, - remotePath: item.remotePath, - serverUrl: settings.cloudServerUrl, - username: settings.cloudUsername, - password: settings.cloudPassword, - allowInsecureHttp: settings.cloudAllowInsecureHttp, - onProgress: (sent, total) { - if (total > 0) { - final progress = sent / total; - _updateItem(pendingIndex, item.copyWith( - status: UploadStatus.uploading, - progress: progress, - )); - } - }, - ); - } else if (settings.cloudProvider == 'sftp') { - result = await _uploadService.uploadFileSFTP( - localPath: item.localPath, - remotePath: item.remotePath, - serverUrl: settings.cloudServerUrl, - username: settings.cloudUsername, - password: settings.cloudPassword, - onProgress: (sent, total) { - if (total > 0) { - final progress = sent / total; - _updateItem(pendingIndex, item.copyWith( - status: UploadStatus.uploading, - progress: progress, - )); - } - }, - ); - } else { - result = CloudUploadResult.failure('Unknown cloud provider: ${settings.cloudProvider}'); - } - - // Update status based on result - if (result.success) { - _updateItem(pendingIndex, item.copyWith( - status: UploadStatus.completed, - progress: 1.0, - completedAt: DateTime.now(), - )); - state = state.copyWith(completedCount: state.completedCount + 1); - } else { - _updateItem(pendingIndex, item.copyWith( - status: UploadStatus.failed, - error: result.error, - )); - state = state.copyWith(failedCount: state.failedCount + 1); - } - - // Small delay between uploads to prevent overwhelming the server - await Future.delayed(const Duration(milliseconds: 500)); - } - - _isProcessing = false; - state = state.copyWith(isProcessing: false); - } - - void _updateItem(int index, UploadQueueItem item) { - if (index < 0 || index >= state.items.length) return; - - final items = [...state.items]; - items[index] = item; - state = state.copyWith(items: items); - } - - /// Retry a failed upload - void retryFailed(String id) { - final index = state.items.indexWhere((i) => i.id == id); - if (index == -1) return; - - final item = state.items[index]; - if (item.status != UploadStatus.failed) return; - - _updateItem(index, item.copyWith( - status: UploadStatus.pending, - progress: 0.0, - error: null, - )); - - state = state.copyWith(failedCount: state.failedCount - 1); - _processQueue(); - } - - /// Retry all failed uploads - void retryAllFailed() { - final items = state.items.map((item) { - if (item.status == UploadStatus.failed) { - return item.copyWith( - status: UploadStatus.pending, - progress: 0.0, - error: null, - ); - } - return item; - }).toList(); - - state = state.copyWith( - items: items, - failedCount: 0, - ); - - _processQueue(); - } - - /// Remove completed items from queue - void clearCompleted() { - final items = state.items.where( - (i) => i.status != UploadStatus.completed, - ).toList(); - - state = state.copyWith( - items: items, - completedCount: 0, - ); - } - - /// Remove a specific item from queue - void removeItem(String id) { - final items = state.items.where((i) => i.id != id).toList(); - state = state.copyWith(items: items); - } - - /// Clear all items from queue - void clearAll() { - state = const UploadQueueState(); - } -} - -final uploadQueueProvider = NotifierProvider( - UploadQueueNotifier.new, -); diff --git a/lib/screens/settings/cloud_settings_page.dart b/lib/screens/settings/cloud_settings_page.dart deleted file mode 100644 index 9fe49c1e..00000000 --- a/lib/screens/settings/cloud_settings_page.dart +++ /dev/null @@ -1,833 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:spotiflac_android/l10n/l10n.dart'; -import 'package:spotiflac_android/providers/settings_provider.dart'; -import 'package:spotiflac_android/providers/upload_queue_provider.dart'; -import 'package:spotiflac_android/services/cloud_upload_service.dart'; -import 'package:spotiflac_android/widgets/settings_group.dart'; - -class CloudSettingsPage extends ConsumerStatefulWidget { - const CloudSettingsPage({super.key}); - - @override - ConsumerState createState() => _CloudSettingsPageState(); -} - -class _CloudSettingsPageState extends ConsumerState { - late TextEditingController _serverUrlController; - late TextEditingController _usernameController; - late TextEditingController _passwordController; - late TextEditingController _remotePathController; - bool _isTestingConnection = false; - bool _isResettingHostKey = false; - bool _isResettingAllHostKeys = false; - String? _connectionTestResult; - - @override - void initState() { - super.initState(); - final settings = ref.read(settingsProvider); - _serverUrlController = TextEditingController(text: settings.cloudServerUrl); - _usernameController = TextEditingController(text: settings.cloudUsername); - _passwordController = TextEditingController(text: settings.cloudPassword); - _remotePathController = TextEditingController(text: settings.cloudRemotePath); - } - - @override - void dispose() { - _serverUrlController.dispose(); - _usernameController.dispose(); - _passwordController.dispose(); - _remotePathController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final settings = ref.watch(settingsProvider); - final colorScheme = Theme.of(context).colorScheme; - final topPadding = MediaQuery.of(context).padding.top; - - return PopScope( - canPop: true, - child: Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 120 + topPadding, - collapsedHeight: kToolbarHeight, - floating: false, - pinned: true, - backgroundColor: colorScheme.surface, - surfaceTintColor: Colors.transparent, - leading: IconButton( - icon: const Icon(Icons.arrow_back), - onPressed: () => Navigator.pop(context), - ), - flexibleSpace: LayoutBuilder( - builder: (context, constraints) { - final maxHeight = 120 + topPadding; - final minHeight = kToolbarHeight + topPadding; - final expandRatio = - ((constraints.maxHeight - minHeight) / - (maxHeight - minHeight)) - .clamp(0.0, 1.0); - final leftPadding = 56 - (32 * expandRatio); - return FlexibleSpaceBar( - expandedTitleScale: 1.0, - titlePadding: EdgeInsets.only( - left: leftPadding, - bottom: 16, - ), - title: Text( - context.l10n.cloudSettingsTitle, - style: TextStyle( - fontSize: 20 + (8 * expandRatio), - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - ), - ), - ); - }, - ), - ), - - // Enable Cloud Upload - SliverToBoxAdapter( - child: SettingsSectionHeader(title: context.l10n.cloudSettingsSectionGeneral), - ), - SliverToBoxAdapter( - child: SettingsGroup( - children: [ - SettingsSwitchItem( - icon: Icons.cloud_upload_outlined, - title: context.l10n.cloudSettingsEnable, - subtitle: context.l10n.cloudSettingsEnableSubtitle, - value: settings.cloudUploadEnabled, - onChanged: (value) { - ref.read(settingsProvider.notifier).setCloudUploadEnabled(value); - }, - showDivider: false, - ), - ], - ), - ), - - // Provider Selection - if (settings.cloudUploadEnabled) ...[ - SliverToBoxAdapter( - child: SettingsSectionHeader(title: context.l10n.cloudSettingsSectionProvider), - ), - SliverToBoxAdapter( - child: SettingsGroup( - children: [ - SettingsItem( - icon: Icons.dns_outlined, - title: context.l10n.cloudSettingsProvider, - subtitle: _getProviderName(settings.cloudProvider), - onTap: () => _showProviderPicker(context, settings.cloudProvider), - showDivider: false, - ), - ], - ), - ), - - // Server Configuration (for WebDAV/SFTP) - if (settings.cloudProvider != 'none' && settings.cloudProvider != 'gdrive') ...[ - SliverToBoxAdapter( - child: SettingsSectionHeader(title: context.l10n.cloudSettingsSectionServer), - ), - SliverToBoxAdapter( - child: SettingsGroup( - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(16, 16, 16, 8), - child: TextField( - controller: _serverUrlController, - decoration: InputDecoration( - labelText: context.l10n.cloudSettingsServerUrl, - hintText: settings.cloudProvider == 'webdav' - ? 'https://your-server.com/webdav' - : 'sftp://your-server.com:22', - border: const OutlineInputBorder(), - prefixIcon: const Icon(Icons.link), - ), - onChanged: (value) { - ref.read(settingsProvider.notifier).setCloudServerUrl(value); - }, - ), - ), - Padding( - padding: const EdgeInsets.fromLTRB(16, 8, 16, 8), - child: TextField( - controller: _usernameController, - decoration: InputDecoration( - labelText: context.l10n.cloudSettingsUsername, - border: const OutlineInputBorder(), - prefixIcon: const Icon(Icons.person_outline), - ), - onChanged: (value) { - ref.read(settingsProvider.notifier).setCloudUsername(value); - }, - ), - ), - Padding( - padding: const EdgeInsets.fromLTRB(16, 8, 16, 8), - child: TextField( - controller: _passwordController, - obscureText: true, - decoration: InputDecoration( - labelText: context.l10n.cloudSettingsPassword, - border: const OutlineInputBorder(), - prefixIcon: const Icon(Icons.lock_outline), - ), - onChanged: (value) { - ref.read(settingsProvider.notifier).setCloudPassword(value); - }, - ), - ), - Padding( - padding: const EdgeInsets.fromLTRB(16, 8, 16, 16), - child: TextField( - controller: _remotePathController, - decoration: InputDecoration( - labelText: context.l10n.cloudSettingsRemotePath, - hintText: '/Music/SpotiFLAC', - border: const OutlineInputBorder(), - prefixIcon: const Icon(Icons.folder_outlined), - ), - onChanged: (value) { - ref.read(settingsProvider.notifier).setCloudRemotePath(value); - }, - ), - ), - ], - ), - ), - if (settings.cloudProvider == 'webdav') - SliverToBoxAdapter( - child: SettingsGroup( - children: [ - SettingsSwitchItem( - icon: Icons.warning_amber_outlined, - title: context.l10n.cloudSettingsAllowHttpTitle, - subtitle: context.l10n.cloudSettingsAllowHttpSubtitle, - value: settings.cloudAllowInsecureHttp, - onChanged: _handleAllowHttpChanged, - showDivider: false, - ), - ], - ), - ), - - // Test Connection Button - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - child: FilledButton.icon( - onPressed: _isTestingConnection ? null : _testConnection, - icon: _isTestingConnection - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator(strokeWidth: 2), - ) - : const Icon(Icons.sync), - label: Text(context.l10n.cloudSettingsTestConnection), - ), - ), - ), - if (settings.cloudProvider == 'sftp') - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), - child: OutlinedButton.icon( - onPressed: (_isResettingHostKey || settings.cloudServerUrl.isEmpty) - ? null - : _resetSftpHostKey, - icon: _isResettingHostKey - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator(strokeWidth: 2), - ) - : const Icon(Icons.security), - label: Text(context.l10n.cloudSettingsResetSftpHostKey), - ), - ), - ), - if (settings.cloudProvider == 'sftp') - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), - child: OutlinedButton.icon( - onPressed: _isResettingAllHostKeys ? null : _resetAllSftpHostKeys, - icon: _isResettingAllHostKeys - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator(strokeWidth: 2), - ) - : const Icon(Icons.delete_sweep), - label: Text(context.l10n.cloudSettingsResetAllSftpHostKeys), - ), - ), - ), - - // Connection Test Result - if (_connectionTestResult != null) - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - child: Card( - color: _connectionTestResult!.startsWith('Success') - ? colorScheme.primaryContainer - : colorScheme.errorContainer, - child: Padding( - padding: const EdgeInsets.all(12), - child: Row( - children: [ - Icon( - _connectionTestResult!.startsWith('Success') - ? Icons.check_circle - : Icons.error, - color: _connectionTestResult!.startsWith('Success') - ? colorScheme.onPrimaryContainer - : colorScheme.onErrorContainer, - ), - const SizedBox(width: 12), - Expanded( - child: Text( - _connectionTestResult!, - style: TextStyle( - color: _connectionTestResult!.startsWith('Success') - ? colorScheme.onPrimaryContainer - : colorScheme.onErrorContainer, - ), - ), - ), - ], - ), - ), - ), - ), - ), - ], - - // Info about the feature - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.fromLTRB(16, 16, 16, 8), - child: Card( - color: colorScheme.tertiaryContainer.withValues(alpha: 0.3), - child: Padding( - padding: const EdgeInsets.all(12), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Icon( - Icons.info_outline, - size: 20, - color: colorScheme.tertiary, - ), - const SizedBox(width: 12), - Expanded( - child: Text( - context.l10n.cloudSettingsInfo, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: colorScheme.onTertiaryContainer, - ), - ), - ), - ], - ), - ), - ), - ), - ), - - // Upload Queue Section - SliverToBoxAdapter( - child: _buildUploadQueueSection(context), - ), - ], - - const SliverToBoxAdapter(child: SizedBox(height: 32)), - ], - ), - ), - ); - } - - String _getProviderName(String provider) { - switch (provider) { - case 'webdav': - return context.l10n.cloudProviderWebdav; - case 'sftp': - return context.l10n.cloudProviderSftp; - default: - return context.l10n.cloudProviderNotConfigured; - } - } - - void _showProviderPicker(BuildContext context, String current) { - final colorScheme = Theme.of(context).colorScheme; - showModalBottomSheet( - context: context, - backgroundColor: colorScheme.surfaceContainerHigh, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.vertical(top: Radius.circular(28)), - ), - builder: (context) => SafeArea( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(24, 24, 24, 8), - child: Text( - context.l10n.cloudSettingsProvider, - style: Theme.of(context).textTheme.titleLarge?.copyWith( - fontWeight: FontWeight.bold, - ), - ), - ), - Padding( - padding: const EdgeInsets.fromLTRB(24, 0, 24, 16), - child: Text( - context.l10n.cloudSettingsProviderDescription, - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: colorScheme.onSurfaceVariant, - ), - ), - ), - ListTile( - leading: const Icon(Icons.web), - title: Text(context.l10n.cloudProviderWebdavTitle), - subtitle: Text(context.l10n.cloudProviderWebdavSubtitle), - trailing: current == 'webdav' ? Icon(Icons.check, color: colorScheme.primary) : null, - onTap: () { - ref.read(settingsProvider.notifier).setCloudProvider('webdav'); - Navigator.pop(context); - }, - ), - ListTile( - leading: const Icon(Icons.terminal), - title: Text(context.l10n.cloudProviderSftpTitle), - subtitle: Text(context.l10n.cloudProviderSftpSubtitle), - trailing: current == 'sftp' ? Icon(Icons.check, color: colorScheme.primary) : null, - onTap: () { - ref.read(settingsProvider.notifier).setCloudProvider('sftp'); - Navigator.pop(context); - }, - ), - const SizedBox(height: 16), - ], - ), - ), - ); - } - - Future _testConnection() async { - setState(() { - _isTestingConnection = true; - _connectionTestResult = null; - }); - - final settings = ref.read(settingsProvider); - - if (settings.cloudServerUrl.isEmpty) { - setState(() { - _isTestingConnection = false; - _connectionTestResult = context.l10n.errorGeneric(context.l10n.cloudTestErrorServerUrlRequired); - }); - return; - } - - if (settings.cloudUsername.isEmpty || settings.cloudPassword.isEmpty) { - setState(() { - _isTestingConnection = false; - _connectionTestResult = context.l10n.errorGeneric(context.l10n.cloudTestErrorCredentialsRequired); - }); - return; - } - - if (settings.cloudProvider == 'webdav') { - final result = await CloudUploadService.instance.testWebDAVConnection( - serverUrl: settings.cloudServerUrl, - username: settings.cloudUsername, - password: settings.cloudPassword, - allowInsecureHttp: settings.cloudAllowInsecureHttp, - ); - - setState(() { - _isTestingConnection = false; - _connectionTestResult = result.success - ? context.l10n.connectionTestSuccess(context.l10n.cloudTestSuccessWebdav) - : context.l10n.errorGeneric(_localizeWebDavError(context, result)); - }); - } else if (settings.cloudProvider == 'sftp') { - final result = await CloudUploadService.instance.testSFTPConnection( - serverUrl: settings.cloudServerUrl, - username: settings.cloudUsername, - password: settings.cloudPassword, - ); - - setState(() { - _isTestingConnection = false; - _connectionTestResult = result.success - ? context.l10n.connectionTestSuccess(context.l10n.cloudTestSuccessSftp) - : context.l10n.errorGeneric(result.error ?? ''); - }); - } else { - setState(() { - _isTestingConnection = false; - _connectionTestResult = context.l10n.errorGeneric(context.l10n.cloudTestErrorNoProvider); - }); - } - } - - Future _handleAllowHttpChanged(bool value) async { - if (!value) { - ref.read(settingsProvider.notifier).setCloudAllowInsecureHttp(false); - return; - } - - final confirmed = await showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: Text(context.l10n.cloudSettingsAllowHttpTitle), - content: Text(context.l10n.cloudSettingsAllowHttpMessage), - actions: [ - TextButton( - onPressed: () => Navigator.pop(context, false), - child: Text(context.l10n.dialogCancel), - ), - FilledButton( - onPressed: () => Navigator.pop(context, true), - child: Text(context.l10n.cloudSettingsAllowHttpConfirm), - ), - ], - ); - }, - ); - - if (confirmed == true) { - ref.read(settingsProvider.notifier).setCloudAllowInsecureHttp(true); - } - } - - String _localizeWebDavError( - BuildContext context, - CloudUploadResult result, - ) { - switch (result.errorCode) { - case 'webdav_invalid_scheme': - return context.l10n.webdavErrorInvalidScheme; - case 'webdav_https_required': - return context.l10n.webdavErrorHttpsRequired; - case 'webdav_invalid_host': - return context.l10n.webdavErrorInvalidHost; - case 'webdav_auth_failed': - return context.l10n.webdavErrorAuthFailed; - case 'webdav_forbidden': - return context.l10n.webdavErrorForbidden; - case 'webdav_not_found': - return context.l10n.webdavErrorNotFound; - case 'webdav_connection_failed': - return context.l10n.webdavErrorConnectionFailed; - case 'webdav_tls_error': - return context.l10n.webdavErrorTlsError; - case 'webdav_timeout': - return context.l10n.webdavErrorTimeout; - case 'webdav_insufficient_storage': - return context.l10n.webdavErrorInsufficientStorage; - case 'webdav_unknown': - return result.error ?? context.l10n.webdavErrorUnknown; - default: - return result.error ?? context.l10n.webdavErrorUnknown; - } - } - - Future _resetSftpHostKey() async { - final settings = ref.read(settingsProvider); - if (settings.cloudServerUrl.isEmpty) { - if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(context.l10n.cloudSettingsServerUrlRequired)), - ); - return; - } - - final confirmed = await showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: Text(context.l10n.cloudSettingsResetSftpHostKey), - content: Text(context.l10n.cloudSettingsResetSftpHostKeyMessage), - actions: [ - TextButton( - onPressed: () => Navigator.pop(context, false), - child: Text(context.l10n.dialogCancel), - ), - FilledButton( - onPressed: () => Navigator.pop(context, true), - child: Text(context.l10n.cloudSettingsResetConfirm), - ), - ], - ); - }, - ); - - if (confirmed != true) return; - - setState(() { - _isResettingHostKey = true; - }); - - final cleared = await CloudUploadService.instance.clearSftpHostKey( - serverUrl: settings.cloudServerUrl, - ); - - if (!mounted) return; - setState(() { - _isResettingHostKey = false; - }); - - final message = cleared - ? context.l10n.cloudSettingsResetSftpHostKeySuccess - : context.l10n.cloudSettingsResetSftpHostKeyNotFound; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(message)), - ); - } - - Future _resetAllSftpHostKeys() async { - final confirmed = await showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: Text(context.l10n.cloudSettingsResetAllSftpHostKeys), - content: Text(context.l10n.cloudSettingsResetAllSftpHostKeysMessage), - actions: [ - TextButton( - onPressed: () => Navigator.pop(context, false), - child: Text(context.l10n.dialogCancel), - ), - FilledButton( - onPressed: () => Navigator.pop(context, true), - child: Text(context.l10n.cloudSettingsResetAllConfirm), - ), - ], - ); - }, - ); - - if (confirmed != true) return; - - setState(() { - _isResettingAllHostKeys = true; - }); - - final clearedCount = await CloudUploadService.instance.clearAllSftpHostKeys(); - - if (!mounted) return; - setState(() { - _isResettingAllHostKeys = false; - }); - - final message = clearedCount > 0 - ? context.l10n.cloudSettingsResetAllSftpHostKeysCleared(clearedCount) - : context.l10n.cloudSettingsResetAllSftpHostKeysNone; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(message)), - ); - } - - Widget _buildUploadQueueSection(BuildContext context) { - final uploadState = ref.watch(uploadQueueProvider); - final colorScheme = Theme.of(context).colorScheme; - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SettingsSectionHeader(title: context.l10n.cloudSettingsUploadQueue), - SettingsGroup( - children: [ - // Stats row - Padding( - padding: const EdgeInsets.all(16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - _buildStatItem( - context, - Icons.hourglass_empty, - uploadState.pendingCount.toString(), - context.l10n.uploadStatusPending, - colorScheme.tertiary, - ), - _buildStatItem( - context, - Icons.cloud_upload, - uploadState.uploadingCount.toString(), - context.l10n.uploadStatusUploading, - colorScheme.primary, - ), - _buildStatItem( - context, - Icons.check_circle, - uploadState.completedCount.toString(), - context.l10n.uploadStatusDone, - Colors.green, - ), - _buildStatItem( - context, - Icons.error, - uploadState.failedCount.toString(), - context.l10n.uploadStatusFailed, - colorScheme.error, - ), - ], - ), - ), - - // Action buttons - if (uploadState.failedCount > 0 || uploadState.completedCount > 0) - Padding( - padding: const EdgeInsets.fromLTRB(16, 0, 16, 16), - child: Row( - children: [ - if (uploadState.failedCount > 0) - Expanded( - child: OutlinedButton.icon( - onPressed: () { - ref.read(uploadQueueProvider.notifier).retryAllFailed(); - }, - icon: const Icon(Icons.refresh, size: 18), - label: Text(context.l10n.cloudSettingsRetryFailed), - ), - ), - if (uploadState.failedCount > 0 && uploadState.completedCount > 0) - const SizedBox(width: 12), - if (uploadState.completedCount > 0) - Expanded( - child: OutlinedButton.icon( - onPressed: () { - ref.read(uploadQueueProvider.notifier).clearCompleted(); - }, - icon: const Icon(Icons.clear_all, size: 18), - label: Text(context.l10n.cloudSettingsClearDone), - ), - ), - ], - ), - ), - ], - ), - - // Recent uploads list (show last 5) - if (uploadState.items.isNotEmpty) ...[ - Padding( - padding: const EdgeInsets.fromLTRB(16, 16, 16, 8), - child: Text( - context.l10n.cloudSettingsRecentUploads, - style: Theme.of(context).textTheme.titleSmall?.copyWith( - color: colorScheme.onSurfaceVariant, - ), - ), - ), - ...uploadState.items.reversed.take(5).map((item) => _buildUploadItem(context, item)), - ], - ], - ); - } - - Widget _buildStatItem( - BuildContext context, - IconData icon, - String value, - String label, - Color color, - ) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon(icon, color: color, size: 24), - const SizedBox(height: 4), - Text( - value, - style: Theme.of(context).textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.bold, - color: color, - ), - ), - Text( - label, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - ), - ], - ); - } - - Widget _buildUploadItem(BuildContext context, UploadQueueItem item) { - final colorScheme = Theme.of(context).colorScheme; - - IconData icon; - Color iconColor; - Widget? trailing; - - switch (item.status) { - case UploadStatus.pending: - icon = Icons.hourglass_empty; - iconColor = colorScheme.tertiary; - break; - case UploadStatus.uploading: - icon = Icons.cloud_upload; - iconColor = colorScheme.primary; - trailing = SizedBox( - width: 40, - child: Text( - '${(item.progress * 100).toInt()}%', - style: TextStyle(color: colorScheme.primary), - ), - ); - break; - case UploadStatus.completed: - icon = Icons.check_circle; - iconColor = Colors.green; - break; - case UploadStatus.failed: - icon = Icons.error; - iconColor = colorScheme.error; - trailing = IconButton( - icon: Icon(Icons.refresh, color: colorScheme.primary), - onPressed: () { - ref.read(uploadQueueProvider.notifier).retryFailed(item.id); - }, - tooltip: context.l10n.dialogRetry, - ); - break; - } - - return ListTile( - leading: Icon(icon, color: iconColor), - title: Text( - item.trackName, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - subtitle: Text( - item.artistName, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(color: colorScheme.onSurfaceVariant), - ), - trailing: trailing, - dense: true, - ); - } -} diff --git a/lib/screens/settings/library_settings_page.dart b/lib/screens/settings/library_settings_page.dart index 160bcedd..32ac57b5 100644 --- a/lib/screens/settings/library_settings_page.dart +++ b/lib/screens/settings/library_settings_page.dart @@ -13,7 +13,8 @@ class LibrarySettingsPage extends ConsumerStatefulWidget { const LibrarySettingsPage({super.key}); @override - ConsumerState createState() => _LibrarySettingsPageState(); + ConsumerState createState() => + _LibrarySettingsPageState(); } class _LibrarySettingsPageState extends ConsumerState { @@ -31,7 +32,7 @@ class _LibrarySettingsPageState extends ConsumerState { final deviceInfo = DeviceInfoPlugin(); final androidInfo = await deviceInfo.androidInfo; final sdkVersion = androidInfo.version.sdkInt; - + // Check appropriate storage permission based on Android version bool hasPermission; if (sdkVersion >= 30) { @@ -39,7 +40,7 @@ class _LibrarySettingsPageState extends ConsumerState { } else { hasPermission = await Permission.storage.isGranted; } - + if (mounted) { setState(() { _androidSdkVersion = sdkVersion; @@ -54,14 +55,14 @@ class _LibrarySettingsPageState extends ConsumerState { Future _requestStoragePermission() async { if (Platform.isIOS) return true; - + PermissionStatus status; if (_androidSdkVersion >= 30) { status = await Permission.manageExternalStorage.request(); } else { status = await Permission.storage.request(); } - + if (status.isGranted) { setState(() => _hasStoragePermission = true); return true; @@ -108,7 +109,7 @@ class _LibrarySettingsPageState extends ConsumerState { Future _startScan() async { final settings = ref.read(settingsProvider); final libraryPath = settings.localLibraryPath; - + if (libraryPath.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(context.l10n.libraryScanSelectFolderFirst)), @@ -158,18 +159,22 @@ class _LibrarySettingsPageState extends ConsumerState { if (confirmed == true) { await ref.read(localLibraryProvider.notifier).clearLibrary(); if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(context.l10n.libraryCleared)), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(context.l10n.libraryCleared))); } } } Future _cleanupMissingFiles() async { - final removed = await ref.read(localLibraryProvider.notifier).cleanupMissingFiles(); + final removed = await ref + .read(localLibraryProvider.notifier) + .cleanupMissingFiles(); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(context.l10n.libraryRemovedMissingFiles(removed))), + SnackBar( + content: Text(context.l10n.libraryRemovedMissingFiles(removed)), + ), ); } } @@ -199,9 +204,10 @@ class _LibrarySettingsPageState extends ConsumerState { builder: (context, constraints) { final maxHeight = 120 + topPadding; final minHeight = kToolbarHeight + topPadding; - final expandRatio = ((constraints.maxHeight - minHeight) / - (maxHeight - minHeight)) - .clamp(0.0, 1.0); + final expandRatio = + ((constraints.maxHeight - minHeight) / + (maxHeight - minHeight)) + .clamp(0.0, 1.0); final leftPadding = 56 - (32 * expandRatio); return FlexibleSpaceBar( expandedTitleScale: 1.0, @@ -219,28 +225,22 @@ class _LibrarySettingsPageState extends ConsumerState { ), ), - // Library Status Section SliverToBoxAdapter( - child: SettingsSectionHeader(title: context.l10n.libraryStatus), - ), - SliverToBoxAdapter( - child: SettingsGroup( - children: [ - _LibraryStatusCard( - itemCount: libraryState.items.length, - isScanning: libraryState.isScanning, - scanProgress: libraryState.scanProgress, - scanCurrentFile: libraryState.scanCurrentFile, - scanTotalFiles: libraryState.scanTotalFiles, - lastScannedAt: libraryState.lastScannedAt, - ), - ], + child: _LibraryHeroCard( + itemCount: libraryState.items.length, + isScanning: libraryState.isScanning, + scanProgress: libraryState.scanProgress, + scanCurrentFile: libraryState.scanCurrentFile, + scanTotalFiles: libraryState.scanTotalFiles, + lastScannedAt: libraryState.lastScannedAt, ), ), // Scan Settings Section SliverToBoxAdapter( - child: SettingsSectionHeader(title: context.l10n.libraryScanSettings), + child: SettingsSectionHeader( + title: context.l10n.libraryScanSettings, + ), ), SliverToBoxAdapter( child: SettingsGroup( @@ -264,7 +264,9 @@ class _LibrarySettingsPageState extends ConsumerState { subtitle: settings.localLibraryPath.isEmpty ? context.l10n.libraryFolderHint : settings.localLibraryPath, - onTap: settings.localLibraryEnabled ? _pickLibraryFolder : null, + onTap: settings.localLibraryEnabled + ? _pickLibraryFolder + : null, ), ), SettingsSwitchItem( @@ -308,7 +310,9 @@ class _LibrarySettingsPageState extends ConsumerState { subtitle: settings.localLibraryPath.isEmpty ? context.l10n.libraryScanSelectFolderFirst : context.l10n.libraryScanSubtitle, - onTap: settings.localLibraryPath.isNotEmpty ? _startScan : null, + onTap: settings.localLibraryPath.isNotEmpty + ? _startScan + : null, ), ), Opacity( @@ -317,7 +321,9 @@ class _LibrarySettingsPageState extends ConsumerState { icon: Icons.cleaning_services_outlined, title: context.l10n.libraryCleanupMissingFiles, subtitle: context.l10n.libraryCleanupMissingFilesSubtitle, - onTap: libraryState.items.isNotEmpty ? _cleanupMissingFiles : null, + onTap: libraryState.items.isNotEmpty + ? _cleanupMissingFiles + : null, ), ), Opacity( @@ -326,7 +332,9 @@ class _LibrarySettingsPageState extends ConsumerState { icon: Icons.delete_outline, title: context.l10n.libraryClear, subtitle: context.l10n.libraryClearSubtitle, - onTap: libraryState.items.isNotEmpty ? _clearLibrary : null, + onTap: libraryState.items.isNotEmpty + ? _clearLibrary + : null, showDivider: false, ), ), @@ -358,20 +366,23 @@ class _LibrarySettingsPageState extends ConsumerState { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - context.l10n.libraryAbout, - style: Theme.of(context).textTheme.titleSmall?.copyWith( - fontWeight: FontWeight.bold, - color: colorScheme.onPrimaryContainer, + Text( + context.l10n.libraryAbout, + style: Theme.of(context).textTheme.titleSmall + ?.copyWith( + fontWeight: FontWeight.bold, + color: colorScheme.onPrimaryContainer, + ), ), - ), - const SizedBox(height: 4), - Text( - context.l10n.libraryAboutDescription, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: colorScheme.onPrimaryContainer.withValues(alpha: 0.8), + const SizedBox(height: 4), + Text( + context.l10n.libraryAboutDescription, + style: Theme.of(context).textTheme.bodySmall + ?.copyWith( + color: colorScheme.onPrimaryContainer + .withValues(alpha: 0.8), + ), ), - ), ], ), ), @@ -388,7 +399,7 @@ class _LibrarySettingsPageState extends ConsumerState { } } -class _LibraryStatusCard extends StatelessWidget { +class _LibraryHeroCard extends StatelessWidget { final int itemCount; final bool isScanning; final double scanProgress; @@ -396,7 +407,7 @@ class _LibraryStatusCard extends StatelessWidget { final int scanTotalFiles; final DateTime? lastScannedAt; - const _LibraryStatusCard({ + const _LibraryHeroCard({ required this.itemCount, required this.isScanning, required this.scanProgress, @@ -409,87 +420,178 @@ class _LibraryStatusCard extends StatelessWidget { if (lastScannedAt == null) return context.l10n.libraryLastScannedNever; final now = DateTime.now(); final diff = now.difference(lastScannedAt!); - + if (diff.inMinutes < 1) return context.l10n.timeJustNow; if (diff.inHours < 1) return context.l10n.timeMinutesAgo(diff.inMinutes); if (diff.inDays < 1) return context.l10n.timeHoursAgo(diff.inHours); if (diff.inDays < 7) return context.l10n.dateDaysAgo(diff.inDays); - + return '${lastScannedAt!.day}/${lastScannedAt!.month}/${lastScannedAt!.year}'; } @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; + final isDark = Theme.of(context).brightness == Brightness.dark; - return Padding( - padding: const EdgeInsets.all(16), - child: Column( + return Container( + margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + height: 220, + decoration: BoxDecoration( + color: colorScheme.surfaceContainerHighest, + borderRadius: BorderRadius.circular(28), + boxShadow: [ + if (!isDark) + BoxShadow( + color: colorScheme.shadow.withOpacity(0.05), + blurRadius: 20, + offset: const Offset(0, 4), + ), + ], + ), + clipBehavior: Clip.antiAlias, + child: Stack( children: [ - Row( - children: [ - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: colorScheme.primaryContainer, - borderRadius: BorderRadius.circular(12), - ), - child: Icon( - Icons.library_music, - color: colorScheme.onPrimaryContainer, - size: 28, - ), + // Background decorative elements + Positioned( + right: -20, + top: -20, + child: Icon( + Icons.library_music, + size: 200, + color: colorScheme.primary.withOpacity(0.05), + ), + ), + Positioned( + left: -40, + bottom: -40, + child: Container( + width: 150, + height: 150, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorScheme.secondaryContainer.withOpacity(0.3), ), - const SizedBox(width: 16), - Expanded( - child: Column( + ), + ), + + // Content + Padding( + padding: const EdgeInsets.all(24), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - context.l10n.libraryTracksCount(itemCount), - style: Theme.of(context).textTheme.headlineSmall?.copyWith( - fontWeight: FontWeight.bold, + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: colorScheme.primaryContainer, + borderRadius: BorderRadius.circular(16), + ), + child: Icon( + isScanning ? Icons.sync : Icons.music_note, + color: colorScheme.onPrimaryContainer, + size: 32, ), ), - Text( - context.l10n.libraryLastScanned(_formatLastScanned(context)), - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: colorScheme.onSurfaceVariant, + const Spacer(), + if (isScanning) + Container( + padding: const EdgeInsets.symmetric( + horizontal: 12, + vertical: 6, + ), + decoration: BoxDecoration( + color: colorScheme.primary, + borderRadius: BorderRadius.circular(20), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: 12, + height: 12, + child: CircularProgressIndicator( + strokeWidth: 2, + color: colorScheme.onPrimary, + ), + ), + const SizedBox(width: 8), + Text( + 'Scanning...', + style: TextStyle( + color: colorScheme.onPrimary, + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + ], + ), ), - ), ], ), - ), - if (isScanning) - SizedBox( - width: 24, - height: 24, - child: CircularProgressIndicator( - strokeWidth: 2, - value: scanProgress / 100, - color: colorScheme.primary, + const Spacer(), + FittedBox( + fit: BoxFit.scaleDown, + alignment: Alignment.centerLeft, + child: Text( + itemCount.toString(), + style: TextStyle( + fontSize: 48, + fontWeight: FontWeight.bold, + color: colorScheme.onSurface, + height: 1.0, + letterSpacing: -2, + ), ), ), - ], + const SizedBox(height: 4), + Text( + context.l10n + .libraryTracksCount(itemCount) + .replaceAll(itemCount.toString(), '') + .trim(), // Getting just the label part if possible, or just use the full string if not + style: TextStyle( + fontSize: 16, + color: colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w500, + ), + ), + if (isScanning && scanCurrentFile != null) ...[ + const SizedBox(height: 16), + LinearProgressIndicator( + value: scanProgress / 100, + backgroundColor: colorScheme.surfaceContainerHighest, + color: colorScheme.primary, + borderRadius: BorderRadius.circular(4), + ), + ] else ...[ + const SizedBox(height: 8), + Row( + children: [ + Icon( + Icons.history, + size: 14, + color: colorScheme.onSurfaceVariant.withOpacity(0.7), + ), + const SizedBox(width: 6), + Text( + context.l10n.libraryLastScanned( + _formatLastScanned(context), + ), + style: TextStyle( + fontSize: 12, + color: colorScheme.onSurfaceVariant.withOpacity(0.7), + ), + ), + ], + ), + ], + ], + ), ), - if (isScanning && scanCurrentFile != null) ...[ - const SizedBox(height: 12), - LinearProgressIndicator( - value: scanProgress / 100, - backgroundColor: colorScheme.surfaceContainerHighest, - color: colorScheme.primary, - borderRadius: BorderRadius.circular(4), - ), - const SizedBox(height: 8), - Text( - scanCurrentFile!, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: colorScheme.onSurfaceVariant, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ], ], ), ); @@ -533,7 +635,10 @@ class _ScanProgressTile extends StatelessWidget { ), ), Text( - context.l10n.libraryScanProgress(progress.toStringAsFixed(0), totalFiles), + context.l10n.libraryScanProgress( + progress.toStringAsFixed(0), + totalFiles, + ), style: Theme.of(context).textTheme.bodySmall?.copyWith( color: colorScheme.onSurfaceVariant, ), diff --git a/lib/screens/settings/settings_tab.dart b/lib/screens/settings/settings_tab.dart index 80ecd55e..27e39e60 100644 --- a/lib/screens/settings/settings_tab.dart +++ b/lib/screens/settings/settings_tab.dart @@ -7,7 +7,6 @@ import 'package:spotiflac_android/screens/settings/download_settings_page.dart'; import 'package:spotiflac_android/screens/settings/extensions_page.dart'; import 'package:spotiflac_android/screens/settings/library_settings_page.dart'; import 'package:spotiflac_android/screens/settings/options_settings_page.dart'; -import 'package:spotiflac_android/screens/settings/cloud_settings_page.dart'; import 'package:spotiflac_android/screens/settings/about_page.dart'; import 'package:spotiflac_android/screens/settings/log_screen.dart'; import 'package:spotiflac_android/widgets/settings_group.dart'; @@ -75,12 +74,6 @@ class SettingsTab extends ConsumerWidget { subtitle: l10n.settingsDownloadSubtitle, onTap: () => _navigateTo(context, const DownloadSettingsPage()), ), - SettingsItem( - icon: Icons.cloud_upload_outlined, - title: l10n.settingsCloudSave, - subtitle: l10n.settingsCloudSaveSubtitle, - onTap: () => _navigateTo(context, const CloudSettingsPage()), - ), SettingsItem( icon: Icons.library_music_outlined, title: l10n.settingsLocalLibrary, diff --git a/lib/services/cloud_upload_service.dart b/lib/services/cloud_upload_service.dart deleted file mode 100644 index 1b2d5018..00000000 --- a/lib/services/cloud_upload_service.dart +++ /dev/null @@ -1,718 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'dart:typed_data'; -import 'package:webdav_client/webdav_client.dart' as webdav; -import 'package:dartssh2/dartssh2.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:spotiflac_android/utils/logger.dart'; - -/// Result of a cloud upload operation -class CloudUploadResult { - final bool success; - final String? error; - final String? errorCode; - final String? remotePath; - - const CloudUploadResult({ - required this.success, - this.error, - this.errorCode, - this.remotePath, - }); - - factory CloudUploadResult.success(String remotePath) => CloudUploadResult( - success: true, - remotePath: remotePath, - ); - - factory CloudUploadResult.failure(String error, {String? errorCode}) => - CloudUploadResult( - success: false, - error: error, - errorCode: errorCode, - ); -} - -/// Parsed SFTP server URL -class SftpServerInfo { - final String host; - final int port; - - const SftpServerInfo({required this.host, required this.port}); -} - -class _WebDavError { - final String code; - final String message; - - const _WebDavError({required this.code, required this.message}); -} - -/// Service for uploading files to cloud storage (WebDAV, SFTP) -class CloudUploadService { - static CloudUploadService? _instance; - static CloudUploadService get instance => _instance ??= CloudUploadService._(); - - CloudUploadService._(); - - final LogBuffer _log = LogBuffer(); - final Future _prefs = SharedPreferences.getInstance(); - - webdav.Client? _webdavClient; - String? _currentServerUrl; - String? _currentUsername; - String? _currentPassword; - bool? _currentAllowInsecureHttp; - - static const _sftpHostKeysKey = 'sftp_known_host_keys'; - Map>? _knownHostKeys; - - void _logInfo(String tag, String message) { - _log.add(LogEntry( - timestamp: DateTime.now(), - level: 'INFO', - tag: tag, - message: message, - )); - } - - void _logError(String tag, String message, [String? error]) { - _log.add(LogEntry( - timestamp: DateTime.now(), - level: 'ERROR', - tag: tag, - message: message, - error: error, - )); - } - - // ============================================================ - // WebDAV Methods - // ============================================================ - - _WebDavError? _validateWebDavUrl( - String url, { - required bool allowInsecureHttp, - }) { - final uri = Uri.tryParse(url.trim()); - if (uri == null || uri.scheme.isEmpty) { - return const _WebDavError( - code: 'webdav_invalid_scheme', - message: 'Invalid URL: scheme is required', - ); - } - final scheme = uri.scheme.toLowerCase(); - if (scheme != 'https') { - if (scheme == 'http' && allowInsecureHttp) { - // Explicitly allowed by user - } else { - return const _WebDavError( - code: 'webdav_https_required', - message: 'WebDAV URL must use https', - ); - } - } - if (uri.host.isEmpty) { - return const _WebDavError( - code: 'webdav_invalid_host', - message: 'Invalid URL: hostname is required', - ); - } - return null; - } - - /// Initialize WebDAV client with server credentials - Future initializeWebDAV({ - required String serverUrl, - required String username, - required String password, - bool allowInsecureHttp = false, - }) async { - final urlError = _validateWebDavUrl( - serverUrl, - allowInsecureHttp: allowInsecureHttp, - ); - if (urlError != null) { - throw ArgumentError(urlError.message); - } - - // Reuse existing client if credentials haven't changed - if (_webdavClient != null && - _currentServerUrl == serverUrl && - _currentUsername == username && - _currentPassword == password && - _currentAllowInsecureHttp == allowInsecureHttp) { - return; - } - - _webdavClient = webdav.newClient( - serverUrl, - user: username, - password: password, - debug: false, - ); - - _currentServerUrl = serverUrl; - _currentUsername = username; - _currentPassword = password; - _currentAllowInsecureHttp = allowInsecureHttp; - - _logInfo('CloudUpload', 'WebDAV client initialized for $serverUrl'); - } - - /// Test connection to WebDAV server - Future testWebDAVConnection({ - required String serverUrl, - required String username, - required String password, - bool allowInsecureHttp = false, - }) async { - final urlError = _validateWebDavUrl( - serverUrl, - allowInsecureHttp: allowInsecureHttp, - ); - if (urlError != null) { - return CloudUploadResult.failure( - urlError.message, - errorCode: urlError.code, - ); - } - try { - final client = webdav.newClient( - serverUrl, - user: username, - password: password, - debug: false, - ); - - // Try to ping/read root directory - await client.ping(); - - _logInfo('CloudUpload', 'WebDAV connection test successful: $serverUrl'); - return CloudUploadResult.success('/'); - } catch (e) { - _logError('CloudUpload', 'WebDAV connection test failed', e.toString()); - final parsed = _parseWebDAVError(e); - return CloudUploadResult.failure( - parsed.message, - errorCode: parsed.code, - ); - } - } - - /// Upload a file to WebDAV server - Future uploadFileWebDAV({ - required String localPath, - required String remotePath, - required String serverUrl, - required String username, - required String password, - void Function(int sent, int total)? onProgress, - bool allowInsecureHttp = false, - }) async { - final urlError = _validateWebDavUrl( - serverUrl, - allowInsecureHttp: allowInsecureHttp, - ); - if (urlError != null) { - return CloudUploadResult.failure( - urlError.message, - errorCode: urlError.code, - ); - } - try { - // Initialize client if needed - await initializeWebDAV( - serverUrl: serverUrl, - username: username, - password: password, - allowInsecureHttp: allowInsecureHttp, - ); - - final client = _webdavClient!; - final file = File(localPath); - - if (!await file.exists()) { - return CloudUploadResult.failure('File not found: $localPath'); - } - - // Extract directory path and ensure it exists - final remoteDir = remotePath.substring(0, remotePath.lastIndexOf('/')); - if (remoteDir.isNotEmpty) { - await _ensureWebDAVDirectoryExists(client, remoteDir); - } - - // Upload the file - _logInfo('CloudUpload', 'WebDAV uploading: $localPath -> $remotePath'); - - await client.writeFromFile( - localPath, - remotePath, - onProgress: onProgress, - ); - - _logInfo('CloudUpload', 'WebDAV upload complete: $remotePath'); - return CloudUploadResult.success(remotePath); - } catch (e) { - _logError('CloudUpload', 'WebDAV upload failed', e.toString()); - final parsed = _parseWebDAVError(e); - return CloudUploadResult.failure( - parsed.message, - errorCode: parsed.code, - ); - } - } - - /// Ensure a directory exists on the WebDAV server, creating it if necessary - Future _ensureWebDAVDirectoryExists(webdav.Client client, String path) async { - final parts = path.split('/').where((p) => p.isNotEmpty).toList(); - var currentPath = ''; - - for (final part in parts) { - currentPath += '/$part'; - try { - await client.mkdir(currentPath); - } catch (e) { - // Directory might already exist, ignore error - } - } - } - - /// Parse WebDAV error to user-friendly message - _WebDavError _parseWebDAVError(dynamic error) { - final errorStr = error.toString().toLowerCase(); - - if (errorStr.contains('401') || errorStr.contains('unauthorized')) { - return const _WebDavError( - code: 'webdav_auth_failed', - message: 'Authentication failed. Check username and password.', - ); - } - if (errorStr.contains('403') || errorStr.contains('forbidden')) { - return const _WebDavError( - code: 'webdav_forbidden', - message: 'Access denied. Check permissions on the server.', - ); - } - if (errorStr.contains('404') || errorStr.contains('not found')) { - return const _WebDavError( - code: 'webdav_not_found', - message: 'Server path not found. Check the URL.', - ); - } - if (errorStr.contains('connection refused') || errorStr.contains('socket')) { - return const _WebDavError( - code: 'webdav_connection_failed', - message: 'Cannot connect to server. Check URL and network.', - ); - } - if (errorStr.contains('certificate') || errorStr.contains('ssl') || errorStr.contains('tls')) { - return const _WebDavError( - code: 'webdav_tls_error', - message: 'SSL/TLS error. Server certificate may be invalid.', - ); - } - if (errorStr.contains('timeout')) { - return const _WebDavError( - code: 'webdav_timeout', - message: 'Connection timed out. Server may be unreachable.', - ); - } - if (errorStr.contains('507') || errorStr.contains('insufficient storage')) { - return const _WebDavError( - code: 'webdav_insufficient_storage', - message: 'Insufficient storage on server.', - ); - } - - return _WebDavError( - code: 'webdav_unknown', - message: 'Upload failed: ${error.toString()}', - ); - } - - // ============================================================ - // SFTP Methods - // ============================================================ - - /// Parse SFTP server URL to extract host and port - /// Supports formats: - /// - sftp://hostname:port - /// - sftp://hostname - /// - hostname:port - /// - hostname - SftpServerInfo _parseSftpUrl(String serverUrl) { - var url = serverUrl.trim(); - - // Remove sftp:// prefix if present - if (url.toLowerCase().startsWith('sftp://')) { - url = url.substring(7); - } - - // Check for port - final colonIndex = url.lastIndexOf(':'); - if (colonIndex > 0) { - final host = url.substring(0, colonIndex); - final portStr = url.substring(colonIndex + 1); - final port = int.tryParse(portStr) ?? 22; - return SftpServerInfo(host: host, port: port); - } - - return SftpServerInfo(host: url, port: 22); - } - - /// Test connection to SFTP server - Future testSFTPConnection({ - required String serverUrl, - required String username, - required String password, - }) async { - SSHClient? client; - try { - final serverInfo = _parseSftpUrl(serverUrl); - - _logInfo('CloudUpload', 'SFTP connecting to ${serverInfo.host}:${serverInfo.port}'); - - // Connect to SSH server - final socket = await SSHSocket.connect( - serverInfo.host, - serverInfo.port, - timeout: const Duration(seconds: 10), - ); - - client = SSHClient( - socket, - username: username, - onPasswordRequest: () => password, - onVerifyHostKey: (type, fingerprint) => _verifySftpHostKey( - host: serverInfo.host, - port: serverInfo.port, - type: type, - fingerprint: fingerprint, - ), - ); - - // Wait for authentication - await client.authenticated; - - // Test SFTP subsystem - final sftp = await client.sftp(); - await sftp.listdir('.'); - sftp.close(); - - _logInfo('CloudUpload', 'SFTP connection test successful: ${serverInfo.host}'); - return CloudUploadResult.success('/'); - } catch (e) { - _logError('CloudUpload', 'SFTP connection test failed', e.toString()); - return CloudUploadResult.failure(_parseSFTPError(e)); - } finally { - client?.close(); - } - } - - /// Upload a file to SFTP server - Future uploadFileSFTP({ - required String localPath, - required String remotePath, - required String serverUrl, - required String username, - required String password, - void Function(int sent, int total)? onProgress, - }) async { - SSHClient? client; - try { - final file = File(localPath); - if (!await file.exists()) { - return CloudUploadResult.failure('File not found: $localPath'); - } - - final fileSize = await file.length(); - final serverInfo = _parseSftpUrl(serverUrl); - - _logInfo('CloudUpload', 'SFTP connecting to ${serverInfo.host}:${serverInfo.port}'); - - // Connect to SSH server - final socket = await SSHSocket.connect( - serverInfo.host, - serverInfo.port, - timeout: const Duration(seconds: 30), - ); - - client = SSHClient( - socket, - username: username, - onPasswordRequest: () => password, - onVerifyHostKey: (type, fingerprint) => _verifySftpHostKey( - host: serverInfo.host, - port: serverInfo.port, - type: type, - fingerprint: fingerprint, - ), - ); - - // Wait for authentication - await client.authenticated; - - // Open SFTP session - final sftp = await client.sftp(); - - // Ensure remote directory exists - final remoteDir = remotePath.substring(0, remotePath.lastIndexOf('/')); - if (remoteDir.isNotEmpty) { - await _ensureSFTPDirectoryExists(sftp, remoteDir); - } - - _logInfo('CloudUpload', 'SFTP uploading: $localPath -> $remotePath'); - - // Open remote file for writing - final remoteFile = await sftp.open( - remotePath, - mode: SftpFileOpenMode.create | - SftpFileOpenMode.write | - SftpFileOpenMode.truncate, - ); - - // Read local file and write to remote with progress - final localFileStream = file.openRead(); - int bytesUploaded = 0; - - await for (final chunk in localFileStream) { - await remoteFile.write(Stream.value(Uint8List.fromList(chunk))); - bytesUploaded += chunk.length; - onProgress?.call(bytesUploaded, fileSize); - } - - await remoteFile.close(); - sftp.close(); - - _logInfo('CloudUpload', 'SFTP upload complete: $remotePath'); - return CloudUploadResult.success(remotePath); - } catch (e) { - _logError('CloudUpload', 'SFTP upload failed', e.toString()); - return CloudUploadResult.failure(_parseSFTPError(e)); - } finally { - client?.close(); - } - } - - /// Ensure a directory exists on the SFTP server, creating it if necessary - Future _ensureSFTPDirectoryExists(SftpClient sftp, String path) async { - final parts = path.split('/').where((p) => p.isNotEmpty).toList(); - if (parts.isEmpty) return; - final isAbsolute = path.startsWith('/'); - var currentPath = ''; - - for (final part in parts) { - if (currentPath.isEmpty) { - currentPath = isAbsolute ? '/$part' : part; - } else { - currentPath += '/$part'; - } - try { - await sftp.mkdir(currentPath); - } catch (e) { - // Directory might already exist, ignore error - // SFTP throws exception if directory exists - } - } - } - - /// Parse SFTP error to user-friendly message - String _parseSFTPError(dynamic error) { - final errorStr = error.toString().toLowerCase(); - - if (errorStr.contains('authentication') || - errorStr.contains('permission denied') || - errorStr.contains('auth fail')) { - return 'Authentication failed. Check username and password.'; - } - if (errorStr.contains('connection refused')) { - return 'Connection refused. Check server address and port.'; - } - if (errorStr.contains('no route to host') || - errorStr.contains('network is unreachable')) { - return 'Cannot reach server. Check network connection.'; - } - if (errorStr.contains('connection timed out') || - errorStr.contains('timeout')) { - return 'Connection timed out. Server may be unreachable.'; - } - if (errorStr.contains('host key') || - errorStr.contains('fingerprint')) { - return 'Host key verification failed.'; - } - if (errorStr.contains('no such file') || - errorStr.contains('not found')) { - return 'Remote path not found.'; - } - if (errorStr.contains('permission') || - errorStr.contains('access denied')) { - return 'Permission denied. Check folder permissions.'; - } - if (errorStr.contains('disk full') || - errorStr.contains('no space')) { - return 'Insufficient storage on server.'; - } - if (errorStr.contains('socket') || - errorStr.contains('broken pipe')) { - return 'Connection lost. Try again.'; - } - - return 'SFTP error: ${error.toString()}'; - } - - // ============================================================ - // Common Methods - // ============================================================ - - /// Get the remote path for a downloaded file - String getRemotePath({ - required String localFilePath, - required String baseRemotePath, - required String downloadDirectory, - }) { - // Extract relative path from download directory - String relativePath; - if (localFilePath.startsWith(downloadDirectory)) { - relativePath = localFilePath.substring(downloadDirectory.length); - if (relativePath.startsWith('/') || relativePath.startsWith('\\')) { - relativePath = relativePath.substring(1); - } - } else { - // Just use the filename - relativePath = localFilePath.split(Platform.pathSeparator).last; - } - - // Normalize path separators - relativePath = relativePath.replaceAll('\\', '/'); - - // Combine with base remote path - var remotePath = baseRemotePath; - if (!remotePath.endsWith('/')) { - remotePath += '/'; - } - remotePath += relativePath; - - return remotePath; - } - - /// Dispose resources - void dispose() { - _webdavClient = null; - _currentServerUrl = null; - _currentUsername = null; - _currentPassword = null; - _currentAllowInsecureHttp = null; - } - - Future clearSftpHostKey({required String serverUrl}) async { - final serverInfo = _parseSftpUrl(serverUrl); - final knownHostKeys = await _loadKnownHostKeys(); - final keyId = '${serverInfo.host}:${serverInfo.port}'; - - final removed = knownHostKeys.remove(keyId) != null; - if (removed) { - await _saveKnownHostKeys(); - _logInfo('CloudUpload', 'Cleared SFTP host key for $keyId'); - } - return removed; - } - - Future clearAllSftpHostKeys() async { - final knownHostKeys = await _loadKnownHostKeys(); - final count = knownHostKeys.length; - if (count == 0) { - return 0; - } - - knownHostKeys.clear(); - await _saveKnownHostKeys(); - _logInfo('CloudUpload', 'Cleared all SFTP host keys'); - return count; - } - - Future>> _loadKnownHostKeys() async { - if (_knownHostKeys != null) { - return _knownHostKeys!; - } - - final prefs = await _prefs; - final raw = prefs.getString(_sftpHostKeysKey); - if (raw == null || raw.isEmpty) { - _knownHostKeys = >{}; - return _knownHostKeys!; - } - - try { - final decoded = jsonDecode(raw); - if (decoded is Map) { - final map = >{}; - decoded.forEach((key, value) { - if (value is Map) { - final type = value['type']; - final fingerprint = value['fingerprint']; - if (type is String && fingerprint is String) { - map[key] = {'type': type, 'fingerprint': fingerprint}; - } - } - }); - _knownHostKeys = map; - return map; - } - } catch (e) { - _logError('CloudUpload', 'Failed to parse known host keys', e.toString()); - } - - _knownHostKeys = >{}; - return _knownHostKeys!; - } - - Future _saveKnownHostKeys() async { - if (_knownHostKeys == null) return; - final prefs = await _prefs; - await prefs.setString(_sftpHostKeysKey, jsonEncode(_knownHostKeys)); - } - - String _formatFingerprint(Uint8List fingerprint) { - final buffer = StringBuffer(); - for (var i = 0; i < fingerprint.length; i++) { - if (i > 0) buffer.write(':'); - buffer.write(fingerprint[i].toRadixString(16).padLeft(2, '0')); - } - return buffer.toString(); - } - - Future _verifySftpHostKey({ - required String host, - required int port, - required String type, - required Uint8List fingerprint, - }) async { - final knownHostKeys = await _loadKnownHostKeys(); - final keyId = '$host:$port'; - final fingerprintHex = _formatFingerprint(fingerprint); - final existing = knownHostKeys[keyId]; - - if (existing == null) { - knownHostKeys[keyId] = { - 'type': type, - 'fingerprint': fingerprintHex, - }; - await _saveKnownHostKeys(); - _logInfo('CloudUpload', 'Saved new SFTP host key for $keyId'); - return true; - } - - final existingFingerprint = existing['fingerprint']; - if (existingFingerprint == fingerprintHex) { - return true; - } - - _logError( - 'CloudUpload', - 'SFTP host key mismatch for $keyId', - 'expected=$existingFingerprint got=$fingerprintHex', - ); - return false; - } -} diff --git a/pubspec.lock b/pubspec.lock index ca5ccd97..59901618 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -41,14 +41,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.7.0" - asn1lib: - dependency: transitive - description: - name: asn1lib - sha256: "9a8f69025044eb466b9b60ef3bc3ac99b4dc6c158ae9c56d25eeccf5bc56d024" - url: "https://pub.dev" - source: hosted - version: "1.6.5" async: dependency: transitive description: @@ -257,14 +249,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.3" - dartssh2: - dependency: "direct main" - description: - name: dartssh2 - sha256: bb242396c1d90f05c261b5eb8338cc67167e803c0948b0207029339cc568a66c - url: "https://pub.dev" - source: hosted - version: "2.13.0" dbus: dependency: transitive description: @@ -885,14 +869,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" - pinenacl: - dependency: transitive - description: - name: pinenacl - sha256: "57e907beaacbc3c024a098910b6240758e899674de07d6949a67b52fd984cbdf" - url: "https://pub.dev" - source: hosted - version: "0.6.0" platform: dependency: transitive description: @@ -909,14 +885,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe" - url: "https://pub.dev" - source: hosted - version: "3.9.1" pool: dependency: transitive description: @@ -1426,14 +1394,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - webdav_client: - dependency: "direct main" - description: - name: webdav_client - sha256: "682fffc50b61dc0e8f46717171db03bf9caaa17347be41c0c91e297553bf86b2" - url: "https://pub.dev" - source: hosted - version: "1.2.2" webkit_inspection_protocol: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 58ea5053..ce9f2810 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -33,8 +33,6 @@ dependencies: http: ^1.6.0 dio: ^5.8.0 connectivity_plus: ^6.0.3 - webdav_client: ^1.2.2 - dartssh2: ^2.13.0 # UI Components cupertino_icons: ^1.0.8