mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-06-10 00:23:58 +02:00
feat: implement cloud upload with WebDAV and SFTP support
- Add CloudUploadService with WebDAV and SFTP upload methods - Add UploadQueueProvider for managing upload queue - Integrate upload trigger after download completes - Update CloudSettingsPage with actual connection test and queue UI - Add webdav_client ^1.2.2 and dartssh2 ^2.13.0 dependencies - Remove Google Drive option (not implemented) - Bump version to 3.4.0+72
This commit is contained in:
@@ -1,5 +1,24 @@
|
||||
# Changelog
|
||||
|
||||
## [3.4.0] - 2026-02-03
|
||||
|
||||
### Added
|
||||
|
||||
- **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
|
||||
|
||||
### Dependencies
|
||||
|
||||
- Added `webdav_client: ^1.2.2` for WebDAV protocol support
|
||||
- Added `dartssh2: ^2.13.0` for SFTP protocol support
|
||||
|
||||
---
|
||||
|
||||
## [3.3.6] - 2026-02-02
|
||||
|
||||
### Added
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/// App version and info constants
|
||||
/// Update version here only - all other files will reference this
|
||||
class AppInfo {
|
||||
static const String version = '3.3.6';
|
||||
static const String buildNumber = '71';
|
||||
static const String version = '3.4.0';
|
||||
static const String buildNumber = '72';
|
||||
static const String fullVersion = '$version+$buildNumber';
|
||||
|
||||
|
||||
|
||||
+106
-45
@@ -73,7 +73,8 @@ 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;
|
||||
|
||||
@@ -81,7 +82,8 @@ abstract class AppLocalizations {
|
||||
return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
|
||||
}
|
||||
|
||||
static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate();
|
||||
static const LocalizationsDelegate<AppLocalizations> delegate =
|
||||
_AppLocalizationsDelegate();
|
||||
|
||||
/// A list of this localizations delegate along with the default localizations
|
||||
/// delegates.
|
||||
@@ -93,12 +95,13 @@ 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<LocalizationsDelegate<dynamic>> localizationsDelegates = <LocalizationsDelegate<dynamic>>[
|
||||
delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
];
|
||||
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
|
||||
<LocalizationsDelegate<dynamic>>[
|
||||
delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
];
|
||||
|
||||
/// A list of this localizations delegate's supported locales.
|
||||
static const List<Locale> supportedLocales = <Locale>[
|
||||
@@ -118,7 +121,7 @@ abstract class AppLocalizations {
|
||||
Locale('tr'),
|
||||
Locale('zh'),
|
||||
Locale('zh', 'CN'),
|
||||
Locale('zh', 'TW')
|
||||
Locale('zh', 'TW'),
|
||||
];
|
||||
|
||||
/// App name - DO NOT TRANSLATE
|
||||
@@ -3805,6 +3808,30 @@ abstract class AppLocalizations {
|
||||
/// **'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;
|
||||
|
||||
/// Empty queue state title
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -4160,7 +4187,8 @@ abstract class AppLocalizations {
|
||||
String get allFilesAccessDisabledMessage;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
|
||||
class _AppLocalizationsDelegate
|
||||
extends LocalizationsDelegate<AppLocalizations> {
|
||||
const _AppLocalizationsDelegate();
|
||||
|
||||
@override
|
||||
@@ -4169,58 +4197,91 @@ class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations>
|
||||
}
|
||||
|
||||
@override
|
||||
bool isSupported(Locale locale) => <String>['de', 'en', 'es', 'fr', 'hi', 'id', 'ja', 'ko', 'nl', 'pt', 'ru', 'tr', 'zh'].contains(locale.languageCode);
|
||||
bool isSupported(Locale locale) => <String>[
|
||||
'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.',
|
||||
);
|
||||
}
|
||||
|
||||
+214
-101
@@ -12,7 +12,8 @@ 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';
|
||||
@@ -41,7 +42,8 @@ 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';
|
||||
@@ -92,19 +94,22 @@ 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...';
|
||||
@@ -134,7 +139,8 @@ 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';
|
||||
@@ -152,7 +158,8 @@ 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';
|
||||
@@ -164,7 +171,8 @@ 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';
|
||||
@@ -197,7 +205,8 @@ 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';
|
||||
@@ -221,7 +230,8 @@ 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) {
|
||||
@@ -229,34 +239,40 @@ 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';
|
||||
@@ -270,19 +286,22 @@ 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';
|
||||
@@ -294,19 +313,22 @@ 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';
|
||||
@@ -320,10 +342,12 @@ 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';
|
||||
@@ -335,7 +359,8 @@ 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';
|
||||
@@ -387,7 +412,8 @@ 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';
|
||||
@@ -408,13 +434,15 @@ 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';
|
||||
@@ -438,7 +466,8 @@ 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';
|
||||
@@ -447,28 +476,34 @@ 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';
|
||||
@@ -573,7 +608,8 @@ 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';
|
||||
@@ -600,16 +636,19 @@ 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) {
|
||||
@@ -628,7 +667,8 @@ 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';
|
||||
@@ -637,25 +677,30 @@ 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';
|
||||
@@ -682,16 +727,19 @@ 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!';
|
||||
@@ -700,7 +748,8 @@ 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';
|
||||
@@ -712,7 +761,8 @@ 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';
|
||||
@@ -730,7 +780,8 @@ 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';
|
||||
@@ -739,10 +790,12 @@ 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';
|
||||
@@ -760,10 +813,12 @@ 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';
|
||||
@@ -814,7 +869,8 @@ 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';
|
||||
@@ -832,7 +888,8 @@ 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?';
|
||||
@@ -841,7 +898,8 @@ 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?';
|
||||
@@ -855,7 +913,8 @@ 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';
|
||||
@@ -950,7 +1009,8 @@ 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) {
|
||||
@@ -972,7 +1032,8 @@ 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) {
|
||||
@@ -1139,19 +1200,23 @@ 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';
|
||||
@@ -1210,10 +1275,12 @@ 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';
|
||||
@@ -1225,16 +1292,19 @@ 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';
|
||||
@@ -1306,16 +1376,19 @@ 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';
|
||||
@@ -1324,10 +1397,12 @@ 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) {
|
||||
@@ -1353,7 +1428,8 @@ 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';
|
||||
@@ -1407,7 +1483,8 @@ 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';
|
||||
@@ -1419,7 +1496,8 @@ 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';
|
||||
@@ -1579,7 +1657,8 @@ 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) {
|
||||
@@ -1731,13 +1810,15 @@ 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';
|
||||
@@ -1749,16 +1830,19 @@ 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';
|
||||
@@ -1767,7 +1851,8 @@ 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';
|
||||
@@ -1809,7 +1894,8 @@ 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';
|
||||
@@ -1821,10 +1907,12 @@ 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';
|
||||
@@ -1914,13 +2002,15 @@ 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';
|
||||
@@ -1932,7 +2022,8 @@ 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';
|
||||
@@ -1944,7 +2035,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2054,8 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2064,8 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2086,20 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'No downloads in queue';
|
||||
@@ -2028,7 +2135,8 @@ 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';
|
||||
@@ -2046,7 +2154,8 @@ 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';
|
||||
@@ -2156,7 +2265,8 @@ 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...';
|
||||
@@ -2203,11 +2313,14 @@ 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.';
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ 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';
|
||||
@@ -98,13 +99,15 @@ 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...';
|
||||
@@ -152,7 +155,8 @@ 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';
|
||||
@@ -164,7 +168,8 @@ 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';
|
||||
@@ -221,7 +226,8 @@ 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) {
|
||||
@@ -229,13 +235,15 @@ 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';
|
||||
@@ -250,13 +258,15 @@ 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';
|
||||
@@ -270,7 +280,8 @@ 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';
|
||||
@@ -282,7 +293,8 @@ 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';
|
||||
@@ -294,13 +306,15 @@ 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';
|
||||
@@ -323,7 +337,8 @@ 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';
|
||||
@@ -387,7 +402,8 @@ 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';
|
||||
@@ -447,28 +463,34 @@ 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';
|
||||
@@ -573,7 +595,8 @@ 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';
|
||||
@@ -600,16 +623,19 @@ 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) {
|
||||
@@ -628,7 +654,8 @@ 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';
|
||||
@@ -637,13 +664,15 @@ 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';
|
||||
@@ -652,10 +681,12 @@ 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';
|
||||
@@ -682,7 +713,8 @@ 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!';
|
||||
@@ -691,7 +723,8 @@ 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!';
|
||||
@@ -700,7 +733,8 @@ 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';
|
||||
@@ -712,7 +746,8 @@ 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';
|
||||
@@ -730,7 +765,8 @@ 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';
|
||||
@@ -739,10 +775,12 @@ 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';
|
||||
@@ -760,10 +798,12 @@ 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';
|
||||
@@ -814,7 +854,8 @@ 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';
|
||||
@@ -832,7 +873,8 @@ 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?';
|
||||
@@ -841,7 +883,8 @@ 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?';
|
||||
@@ -855,7 +898,8 @@ 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';
|
||||
@@ -950,7 +994,8 @@ 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) {
|
||||
@@ -972,7 +1017,8 @@ 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) {
|
||||
@@ -1139,19 +1185,23 @@ 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';
|
||||
@@ -1210,10 +1260,12 @@ 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';
|
||||
@@ -1225,16 +1277,19 @@ 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';
|
||||
@@ -1306,16 +1361,19 @@ 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';
|
||||
@@ -1324,10 +1382,12 @@ 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) {
|
||||
@@ -1353,7 +1413,8 @@ 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';
|
||||
@@ -1407,7 +1468,8 @@ 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';
|
||||
@@ -1419,7 +1481,8 @@ 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';
|
||||
@@ -1579,7 +1642,8 @@ 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) {
|
||||
@@ -1731,13 +1795,15 @@ 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';
|
||||
@@ -1749,16 +1815,19 @@ 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';
|
||||
@@ -1767,7 +1836,8 @@ 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';
|
||||
@@ -1809,7 +1879,8 @@ 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';
|
||||
@@ -1821,10 +1892,12 @@ 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';
|
||||
@@ -1914,13 +1987,15 @@ 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';
|
||||
@@ -1932,7 +2007,8 @@ 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';
|
||||
@@ -1944,7 +2020,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2039,8 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2049,8 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2071,20 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'No downloads in queue';
|
||||
@@ -2028,7 +2120,8 @@ 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';
|
||||
@@ -2046,7 +2139,8 @@ 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';
|
||||
@@ -2156,7 +2250,8 @@ 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...';
|
||||
@@ -2203,11 +2298,14 @@ 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.';
|
||||
}
|
||||
|
||||
+385
-187
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,8 @@ 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';
|
||||
@@ -98,13 +99,15 @@ 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...';
|
||||
@@ -152,7 +155,8 @@ 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';
|
||||
@@ -164,7 +168,8 @@ 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';
|
||||
@@ -221,7 +226,8 @@ 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) {
|
||||
@@ -229,13 +235,15 @@ 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';
|
||||
@@ -250,13 +258,15 @@ 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';
|
||||
@@ -270,7 +280,8 @@ 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';
|
||||
@@ -282,7 +293,8 @@ 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';
|
||||
@@ -294,13 +306,15 @@ 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';
|
||||
@@ -323,7 +337,8 @@ 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';
|
||||
@@ -387,7 +402,8 @@ 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';
|
||||
@@ -447,28 +463,34 @@ 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';
|
||||
@@ -573,7 +595,8 @@ 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';
|
||||
@@ -600,16 +623,19 @@ 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) {
|
||||
@@ -628,7 +654,8 @@ 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';
|
||||
@@ -637,13 +664,15 @@ 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';
|
||||
@@ -652,10 +681,12 @@ 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';
|
||||
@@ -682,7 +713,8 @@ 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!';
|
||||
@@ -691,7 +723,8 @@ 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!';
|
||||
@@ -700,7 +733,8 @@ 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';
|
||||
@@ -712,7 +746,8 @@ 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';
|
||||
@@ -730,7 +765,8 @@ 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';
|
||||
@@ -739,10 +775,12 @@ 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';
|
||||
@@ -760,10 +798,12 @@ 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';
|
||||
@@ -814,7 +854,8 @@ 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';
|
||||
@@ -832,7 +873,8 @@ 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?';
|
||||
@@ -841,7 +883,8 @@ 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?';
|
||||
@@ -855,7 +898,8 @@ 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';
|
||||
@@ -950,7 +994,8 @@ 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) {
|
||||
@@ -972,7 +1017,8 @@ 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) {
|
||||
@@ -1139,19 +1185,23 @@ 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';
|
||||
@@ -1210,10 +1260,12 @@ 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';
|
||||
@@ -1225,16 +1277,19 @@ 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';
|
||||
@@ -1306,16 +1361,19 @@ 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';
|
||||
@@ -1324,10 +1382,12 @@ 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) {
|
||||
@@ -1353,7 +1413,8 @@ 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';
|
||||
@@ -1407,7 +1468,8 @@ 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';
|
||||
@@ -1419,7 +1481,8 @@ 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';
|
||||
@@ -1579,7 +1642,8 @@ 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) {
|
||||
@@ -1731,13 +1795,15 @@ 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';
|
||||
@@ -1749,16 +1815,19 @@ 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';
|
||||
@@ -1767,7 +1836,8 @@ 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';
|
||||
@@ -1809,7 +1879,8 @@ 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';
|
||||
@@ -1821,10 +1892,12 @@ 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';
|
||||
@@ -1914,13 +1987,15 @@ 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';
|
||||
@@ -1932,7 +2007,8 @@ 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';
|
||||
@@ -1944,7 +2020,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2039,8 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2049,8 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2071,20 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'No downloads in queue';
|
||||
@@ -2028,7 +2120,8 @@ 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';
|
||||
@@ -2046,7 +2139,8 @@ 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';
|
||||
@@ -2156,7 +2250,8 @@ 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...';
|
||||
@@ -2203,11 +2298,14 @@ 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.';
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
String get appName => 'SpotiFlac';
|
||||
|
||||
@override
|
||||
String get appDescription => 'स्पॉटीफाई ट्रैक डाउनलोड करें टाइडल, क्वाबज एवं एवं अमेजन म्यूजिक से उच्चतम क्वालिटी में।';
|
||||
String get appDescription =>
|
||||
'स्पॉटीफाई ट्रैक डाउनलोड करें टाइडल, क्वाबज एवं एवं अमेजन म्यूजिक से उच्चतम क्वालिटी में।';
|
||||
|
||||
@override
|
||||
String get navHome => 'होम';
|
||||
@@ -98,13 +99,15 @@ 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...';
|
||||
@@ -152,7 +155,8 @@ 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';
|
||||
@@ -164,7 +168,8 @@ 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';
|
||||
@@ -221,7 +226,8 @@ 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) {
|
||||
@@ -229,13 +235,15 @@ 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';
|
||||
@@ -250,13 +258,15 @@ 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';
|
||||
@@ -270,7 +280,8 @@ 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';
|
||||
@@ -282,7 +293,8 @@ 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';
|
||||
@@ -294,13 +306,15 @@ 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';
|
||||
@@ -323,7 +337,8 @@ 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';
|
||||
@@ -387,7 +402,8 @@ 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';
|
||||
@@ -447,28 +463,34 @@ 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';
|
||||
@@ -573,7 +595,8 @@ 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';
|
||||
@@ -600,16 +623,19 @@ 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) {
|
||||
@@ -628,7 +654,8 @@ 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';
|
||||
@@ -637,13 +664,15 @@ 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';
|
||||
@@ -652,10 +681,12 @@ 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';
|
||||
@@ -682,7 +713,8 @@ 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!';
|
||||
@@ -691,7 +723,8 @@ 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!';
|
||||
@@ -700,7 +733,8 @@ 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';
|
||||
@@ -712,7 +746,8 @@ 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';
|
||||
@@ -730,7 +765,8 @@ 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';
|
||||
@@ -739,10 +775,12 @@ 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';
|
||||
@@ -760,10 +798,12 @@ 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';
|
||||
@@ -814,7 +854,8 @@ 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';
|
||||
@@ -832,7 +873,8 @@ 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?';
|
||||
@@ -841,7 +883,8 @@ 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?';
|
||||
@@ -855,7 +898,8 @@ 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';
|
||||
@@ -950,7 +994,8 @@ 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) {
|
||||
@@ -972,7 +1017,8 @@ 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) {
|
||||
@@ -1139,19 +1185,23 @@ 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';
|
||||
@@ -1210,10 +1260,12 @@ 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';
|
||||
@@ -1225,16 +1277,19 @@ 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';
|
||||
@@ -1306,16 +1361,19 @@ 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';
|
||||
@@ -1324,10 +1382,12 @@ 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) {
|
||||
@@ -1353,7 +1413,8 @@ 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';
|
||||
@@ -1407,7 +1468,8 @@ 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';
|
||||
@@ -1419,7 +1481,8 @@ 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';
|
||||
@@ -1579,7 +1642,8 @@ 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) {
|
||||
@@ -1731,13 +1795,15 @@ 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';
|
||||
@@ -1749,16 +1815,19 @@ 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';
|
||||
@@ -1767,7 +1836,8 @@ 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';
|
||||
@@ -1809,7 +1879,8 @@ 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';
|
||||
@@ -1821,10 +1892,12 @@ 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';
|
||||
@@ -1914,13 +1987,15 @@ 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';
|
||||
@@ -1932,7 +2007,8 @@ 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';
|
||||
@@ -1944,7 +2020,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2039,8 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2049,8 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2071,20 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'No downloads in queue';
|
||||
@@ -2028,7 +2120,8 @@ 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';
|
||||
@@ -2046,7 +2139,8 @@ 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';
|
||||
@@ -2156,7 +2250,8 @@ 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...';
|
||||
@@ -2203,11 +2298,14 @@ 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.';
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ 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';
|
||||
@@ -92,19 +93,22 @@ 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...';
|
||||
@@ -143,7 +147,8 @@ 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';
|
||||
@@ -152,7 +157,8 @@ 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';
|
||||
@@ -164,7 +170,8 @@ 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';
|
||||
@@ -197,7 +204,8 @@ 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';
|
||||
@@ -221,7 +229,8 @@ 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) {
|
||||
@@ -229,34 +238,40 @@ 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';
|
||||
@@ -270,7 +285,8 @@ 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';
|
||||
@@ -294,7 +310,8 @@ 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';
|
||||
@@ -320,10 +337,12 @@ 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';
|
||||
@@ -387,7 +406,8 @@ 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';
|
||||
@@ -414,7 +434,8 @@ 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';
|
||||
@@ -447,28 +468,34 @@ 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';
|
||||
@@ -573,7 +600,8 @@ 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';
|
||||
@@ -600,16 +628,19 @@ 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) {
|
||||
@@ -628,7 +659,8 @@ 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';
|
||||
@@ -637,13 +669,15 @@ 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';
|
||||
@@ -652,10 +686,12 @@ 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';
|
||||
@@ -682,7 +718,8 @@ 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!';
|
||||
@@ -691,7 +728,8 @@ 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!';
|
||||
@@ -700,7 +738,8 @@ 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';
|
||||
@@ -712,7 +751,8 @@ 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';
|
||||
@@ -730,19 +770,23 @@ 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';
|
||||
@@ -760,10 +804,12 @@ 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';
|
||||
@@ -814,7 +860,8 @@ 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';
|
||||
@@ -832,7 +879,8 @@ 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?';
|
||||
@@ -841,7 +889,8 @@ 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?';
|
||||
@@ -855,7 +904,8 @@ 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';
|
||||
@@ -950,7 +1000,8 @@ 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) {
|
||||
@@ -972,7 +1023,8 @@ 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) {
|
||||
@@ -1139,19 +1191,23 @@ 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';
|
||||
@@ -1204,16 +1260,19 @@ 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';
|
||||
@@ -1225,16 +1284,19 @@ 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';
|
||||
@@ -1279,7 +1341,8 @@ 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';
|
||||
@@ -1300,22 +1363,27 @@ 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';
|
||||
@@ -1324,10 +1392,12 @@ 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) {
|
||||
@@ -1353,7 +1423,8 @@ 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';
|
||||
@@ -1407,7 +1478,8 @@ 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';
|
||||
@@ -1419,7 +1491,8 @@ 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';
|
||||
@@ -1579,7 +1652,8 @@ 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) {
|
||||
@@ -1731,13 +1805,15 @@ 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';
|
||||
@@ -1746,28 +1822,34 @@ 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';
|
||||
@@ -1809,7 +1891,8 @@ 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';
|
||||
@@ -1821,10 +1904,12 @@ 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';
|
||||
@@ -1860,7 +1945,8 @@ 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';
|
||||
@@ -1914,13 +2000,15 @@ 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';
|
||||
@@ -1932,7 +2020,8 @@ 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';
|
||||
@@ -1944,7 +2033,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2052,8 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2062,8 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2084,20 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'Tidak ada unduhan dalam antrian';
|
||||
@@ -2028,7 +2133,8 @@ 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';
|
||||
@@ -2046,7 +2152,8 @@ 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';
|
||||
@@ -2156,7 +2263,8 @@ 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...';
|
||||
@@ -2203,11 +2311,14 @@ 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.';
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ 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 => 'ホーム';
|
||||
@@ -98,13 +99,15 @@ 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 => '検索履歴...';
|
||||
@@ -152,7 +155,8 @@ 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 => 'ファイル名の形式';
|
||||
@@ -164,7 +168,8 @@ 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 => 'おすすめ';
|
||||
@@ -221,7 +226,8 @@ 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) {
|
||||
@@ -229,13 +235,15 @@ 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 => '拡張のプロバイダーを使用する';
|
||||
@@ -270,7 +278,8 @@ 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 => '拡張ストア';
|
||||
@@ -282,7 +291,8 @@ 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 => '更新チャンネル';
|
||||
@@ -294,7 +304,8 @@ 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 => 'ダウンロード履歴を消去';
|
||||
@@ -323,7 +334,8 @@ 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 => '拡張';
|
||||
@@ -447,28 +459,34 @@ 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 => 'アルバム';
|
||||
@@ -600,16 +618,19 @@ 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) {
|
||||
@@ -628,7 +649,8 @@ 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 => 'デフォルトを使用する';
|
||||
@@ -637,13 +659,15 @@ 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 => 'ファイルから選択';
|
||||
@@ -652,10 +676,12 @@ 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 でダウンロード';
|
||||
@@ -682,7 +708,8 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get setupStorageRequired => 'ストレージの権限が必要です';
|
||||
|
||||
@override
|
||||
String get setupStorageDescription => 'SpotiFLAC はダウンロードした音楽ファイルを保存するためにストレージの権限が必要です。';
|
||||
String get setupStorageDescription =>
|
||||
'SpotiFLAC はダウンロードした音楽ファイルを保存するためにストレージの権限が必要です。';
|
||||
|
||||
@override
|
||||
String get setupNotificationGranted => '通知の権限が許可されました!';
|
||||
@@ -691,7 +718,8 @@ 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 => 'ダウンロードフォルダが選択済みです!';
|
||||
@@ -700,7 +728,8 @@ 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 => 'フォルダを変更';
|
||||
@@ -712,7 +741,8 @@ 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 を使用する';
|
||||
@@ -730,7 +760,8 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get setupEnterClientSecret => 'Spotify クライアントシークレットを入力';
|
||||
|
||||
@override
|
||||
String get setupGetFreeCredentials => 'Spotify 開発者ダッシュボードから無料の API 認証情報を取得します。';
|
||||
String get setupGetFreeCredentials =>
|
||||
'Spotify 開発者ダッシュボードから無料の API 認証情報を取得します。';
|
||||
|
||||
@override
|
||||
String get setupEnableNotifications => '通知を有効化する';
|
||||
@@ -739,10 +770,12 @@ 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 => '今はスキップ';
|
||||
@@ -760,10 +793,12 @@ 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 => 'キャンセル';
|
||||
@@ -814,7 +849,8 @@ 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 => 'ダウンロードに失敗しました';
|
||||
@@ -832,7 +868,8 @@ 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 => 'デバイスから削除しますか?';
|
||||
@@ -841,7 +878,8 @@ 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 => '拡張をアンインストールしますか?';
|
||||
@@ -855,7 +893,8 @@ 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 => '選択済みを削除';
|
||||
@@ -972,7 +1011,8 @@ 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) {
|
||||
@@ -1145,13 +1185,16 @@ 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 => '更新が利用可能です';
|
||||
@@ -1210,10 +1253,12 @@ 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 => '内蔵';
|
||||
@@ -1225,16 +1270,19 @@ 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 => 'レート制限はありません';
|
||||
@@ -1306,16 +1354,19 @@ 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 => '接続の問題が検出されました';
|
||||
@@ -1324,10 +1375,12 @@ 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) {
|
||||
@@ -1353,7 +1406,8 @@ 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';
|
||||
@@ -1407,7 +1461,8 @@ 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';
|
||||
@@ -1419,7 +1474,8 @@ 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 => '両方';
|
||||
@@ -1579,7 +1635,8 @@ 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) {
|
||||
@@ -1731,13 +1788,15 @@ 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 => '拡張のインストールが成功しました';
|
||||
@@ -1809,7 +1868,8 @@ 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';
|
||||
@@ -1821,7 +1881,8 @@ 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 => '実際の品質はサービスからのトラックの可用性に依存します';
|
||||
@@ -1920,7 +1981,8 @@ 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';
|
||||
@@ -1932,7 +1994,8 @@ 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';
|
||||
@@ -1944,7 +2007,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2026,8 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2036,8 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2058,20 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'キューにダウンロードがありません';
|
||||
@@ -2046,7 +2125,8 @@ 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 => '選択済みを削除';
|
||||
@@ -2156,7 +2236,8 @@ 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 => 'トラックを取得中です...';
|
||||
@@ -2203,11 +2284,14 @@ 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.';
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ 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';
|
||||
@@ -98,13 +99,15 @@ 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...';
|
||||
@@ -152,7 +155,8 @@ 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';
|
||||
@@ -164,7 +168,8 @@ 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';
|
||||
@@ -221,7 +226,8 @@ 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) {
|
||||
@@ -229,13 +235,15 @@ 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';
|
||||
@@ -250,13 +258,15 @@ 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';
|
||||
@@ -270,7 +280,8 @@ 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';
|
||||
@@ -282,7 +293,8 @@ 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';
|
||||
@@ -294,13 +306,15 @@ 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';
|
||||
@@ -323,7 +337,8 @@ 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';
|
||||
@@ -387,7 +402,8 @@ 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';
|
||||
@@ -447,28 +463,34 @@ 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';
|
||||
@@ -573,7 +595,8 @@ 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';
|
||||
@@ -600,16 +623,19 @@ 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) {
|
||||
@@ -628,7 +654,8 @@ 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';
|
||||
@@ -637,13 +664,15 @@ 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';
|
||||
@@ -652,10 +681,12 @@ 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';
|
||||
@@ -682,7 +713,8 @@ 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!';
|
||||
@@ -691,7 +723,8 @@ 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!';
|
||||
@@ -700,7 +733,8 @@ 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';
|
||||
@@ -712,7 +746,8 @@ 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';
|
||||
@@ -730,7 +765,8 @@ 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';
|
||||
@@ -739,10 +775,12 @@ 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';
|
||||
@@ -760,10 +798,12 @@ 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';
|
||||
@@ -814,7 +854,8 @@ 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';
|
||||
@@ -832,7 +873,8 @@ 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?';
|
||||
@@ -841,7 +883,8 @@ 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?';
|
||||
@@ -855,7 +898,8 @@ 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';
|
||||
@@ -950,7 +994,8 @@ 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) {
|
||||
@@ -972,7 +1017,8 @@ 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) {
|
||||
@@ -1139,19 +1185,23 @@ 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';
|
||||
@@ -1210,10 +1260,12 @@ 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';
|
||||
@@ -1225,16 +1277,19 @@ 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';
|
||||
@@ -1306,16 +1361,19 @@ 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';
|
||||
@@ -1324,10 +1382,12 @@ 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) {
|
||||
@@ -1353,7 +1413,8 @@ 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';
|
||||
@@ -1407,7 +1468,8 @@ 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';
|
||||
@@ -1419,7 +1481,8 @@ 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';
|
||||
@@ -1579,7 +1642,8 @@ 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) {
|
||||
@@ -1731,13 +1795,15 @@ 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';
|
||||
@@ -1749,16 +1815,19 @@ 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';
|
||||
@@ -1767,7 +1836,8 @@ 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';
|
||||
@@ -1809,7 +1879,8 @@ 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';
|
||||
@@ -1821,10 +1892,12 @@ 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';
|
||||
@@ -1914,13 +1987,15 @@ 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';
|
||||
@@ -1932,7 +2007,8 @@ 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';
|
||||
@@ -1944,7 +2020,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2039,8 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2049,8 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2071,20 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'No downloads in queue';
|
||||
@@ -2028,7 +2120,8 @@ 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';
|
||||
@@ -2046,7 +2139,8 @@ 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';
|
||||
@@ -2156,7 +2250,8 @@ 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...';
|
||||
@@ -2203,11 +2298,14 @@ 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.';
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ 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';
|
||||
@@ -98,13 +99,15 @@ 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...';
|
||||
@@ -152,7 +155,8 @@ 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';
|
||||
@@ -164,7 +168,8 @@ 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';
|
||||
@@ -221,7 +226,8 @@ 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) {
|
||||
@@ -229,13 +235,15 @@ 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';
|
||||
@@ -250,13 +258,15 @@ 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';
|
||||
@@ -270,7 +280,8 @@ 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';
|
||||
@@ -282,7 +293,8 @@ 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';
|
||||
@@ -294,13 +306,15 @@ 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';
|
||||
@@ -323,7 +337,8 @@ 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';
|
||||
@@ -387,7 +402,8 @@ 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';
|
||||
@@ -447,28 +463,34 @@ 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';
|
||||
@@ -573,7 +595,8 @@ 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';
|
||||
@@ -600,16 +623,19 @@ 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) {
|
||||
@@ -628,7 +654,8 @@ 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';
|
||||
@@ -637,13 +664,15 @@ 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';
|
||||
@@ -652,10 +681,12 @@ 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';
|
||||
@@ -682,7 +713,8 @@ 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!';
|
||||
@@ -691,7 +723,8 @@ 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!';
|
||||
@@ -700,7 +733,8 @@ 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';
|
||||
@@ -712,7 +746,8 @@ 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';
|
||||
@@ -730,7 +765,8 @@ 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';
|
||||
@@ -739,10 +775,12 @@ 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';
|
||||
@@ -760,10 +798,12 @@ 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';
|
||||
@@ -814,7 +854,8 @@ 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';
|
||||
@@ -832,7 +873,8 @@ 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?';
|
||||
@@ -841,7 +883,8 @@ 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?';
|
||||
@@ -855,7 +898,8 @@ 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';
|
||||
@@ -950,7 +994,8 @@ 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) {
|
||||
@@ -972,7 +1017,8 @@ 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) {
|
||||
@@ -1139,19 +1185,23 @@ 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';
|
||||
@@ -1210,10 +1260,12 @@ 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';
|
||||
@@ -1225,16 +1277,19 @@ 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';
|
||||
@@ -1306,16 +1361,19 @@ 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';
|
||||
@@ -1324,10 +1382,12 @@ 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) {
|
||||
@@ -1353,7 +1413,8 @@ 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';
|
||||
@@ -1407,7 +1468,8 @@ 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';
|
||||
@@ -1419,7 +1481,8 @@ 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';
|
||||
@@ -1579,7 +1642,8 @@ 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) {
|
||||
@@ -1731,13 +1795,15 @@ 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';
|
||||
@@ -1749,16 +1815,19 @@ 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';
|
||||
@@ -1767,7 +1836,8 @@ 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';
|
||||
@@ -1809,7 +1879,8 @@ 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';
|
||||
@@ -1821,10 +1892,12 @@ 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';
|
||||
@@ -1914,13 +1987,15 @@ 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';
|
||||
@@ -1932,7 +2007,8 @@ 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';
|
||||
@@ -1944,7 +2020,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2039,8 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2049,8 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2071,20 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'No downloads in queue';
|
||||
@@ -2028,7 +2120,8 @@ 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';
|
||||
@@ -2046,7 +2139,8 @@ 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';
|
||||
@@ -2156,7 +2250,8 @@ 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...';
|
||||
@@ -2203,11 +2298,14 @@ 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.';
|
||||
}
|
||||
|
||||
+379
-184
File diff suppressed because it is too large
Load Diff
+236
-112
@@ -12,7 +12,8 @@ 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 => 'Главная';
|
||||
@@ -41,7 +42,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get homeSubtitle => 'Вставьте ссылку Spotify или ищите по названию';
|
||||
|
||||
@override
|
||||
String get homeSupports => 'Поддерживается: Трек, Альбом, Плейлист, URL исполнителя';
|
||||
String get homeSupports =>
|
||||
'Поддерживается: Трек, Альбом, Плейлист, URL исполнителя';
|
||||
|
||||
@override
|
||||
String get homeRecent => 'Недавние';
|
||||
@@ -102,13 +104,15 @@ 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 => 'Поиск в истории...';
|
||||
@@ -147,7 +151,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get downloadDefaultService => 'Сервис по умолчанию';
|
||||
|
||||
@override
|
||||
String get downloadDefaultServiceSubtitle => 'Сервис, используемый для скачивания';
|
||||
String get downloadDefaultServiceSubtitle =>
|
||||
'Сервис, используемый для скачивания';
|
||||
|
||||
@override
|
||||
String get downloadDefaultQuality => 'Качество по умолчанию';
|
||||
@@ -156,7 +161,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get downloadAskQuality => 'Спрашивать качество перед скачиванием';
|
||||
|
||||
@override
|
||||
String get downloadAskQualitySubtitle => 'Показывать выбор качества для каждого скачивания';
|
||||
String get downloadAskQualitySubtitle =>
|
||||
'Показывать выбор качества для каждого скачивания';
|
||||
|
||||
@override
|
||||
String get downloadFilenameFormat => 'Формат имени файла';
|
||||
@@ -168,7 +174,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get downloadSeparateSingles => 'Разделять синглы';
|
||||
|
||||
@override
|
||||
String get downloadSeparateSinglesSubtitle => 'Помещать синглы в отдельную папку';
|
||||
String get downloadSeparateSinglesSubtitle =>
|
||||
'Помещать синглы в отдельную папку';
|
||||
|
||||
@override
|
||||
String get qualityBest => 'Лучшее из доступных';
|
||||
@@ -201,7 +208,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get appearanceDynamicColor => 'Динамический цвет';
|
||||
|
||||
@override
|
||||
String get appearanceDynamicColorSubtitle => 'Использовать цвета из ваших обоев';
|
||||
String get appearanceDynamicColorSubtitle =>
|
||||
'Использовать цвета из ваших обоев';
|
||||
|
||||
@override
|
||||
String get appearanceAccentColor => 'Акцентный цвет';
|
||||
@@ -225,7 +233,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get optionsPrimaryProvider => 'Основной провайдер';
|
||||
|
||||
@override
|
||||
String get optionsPrimaryProviderSubtitle => 'Сервис, используемый при поиске по названию трека.';
|
||||
String get optionsPrimaryProviderSubtitle =>
|
||||
'Сервис, используемый при поиске по названию трека.';
|
||||
|
||||
@override
|
||||
String optionsUsingExtension(String extensionName) {
|
||||
@@ -233,34 +242,41 @@ 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 => 'Одновременные загрузки';
|
||||
@@ -274,13 +290,15 @@ 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 => 'Проверить обновления';
|
||||
@@ -298,13 +316,15 @@ 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 => 'Подробный лог';
|
||||
@@ -324,10 +344,12 @@ 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 => 'Расширения';
|
||||
@@ -339,7 +361,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get extensionsNone => 'Нет установленных расширений';
|
||||
|
||||
@override
|
||||
String get extensionsNoneSubtitle => 'Установка расширений из вкладки Магазин';
|
||||
String get extensionsNoneSubtitle =>
|
||||
'Установка расширений из вкладки Магазин';
|
||||
|
||||
@override
|
||||
String get extensionsEnabled => 'Включено';
|
||||
@@ -391,7 +414,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get aboutOriginalCreator => 'Создатель оригинального SpotiFLAC';
|
||||
|
||||
@override
|
||||
String get aboutLogoArtist => 'Талантливый художник, который создал наш красивый логотип приложения!';
|
||||
String get aboutLogoArtist =>
|
||||
'Талантливый художник, который создал наш красивый логотип приложения!';
|
||||
|
||||
@override
|
||||
String get aboutTranslators => 'Переводчики';
|
||||
@@ -418,7 +442,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get aboutFeatureRequest => 'Предложить новую функцию';
|
||||
|
||||
@override
|
||||
String get aboutFeatureRequestSubtitle => 'Предложить новые функции для приложения';
|
||||
String get aboutFeatureRequestSubtitle =>
|
||||
'Предложить новые функции для приложения';
|
||||
|
||||
@override
|
||||
String get aboutTelegramChannel => 'Telegram канал';
|
||||
@@ -451,28 +476,34 @@ 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 => 'Альбом';
|
||||
@@ -581,7 +612,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get setupStoragePermission => 'Доступ к хранилищу';
|
||||
|
||||
@override
|
||||
String get setupStoragePermissionSubtitle => 'Необходимо для сохранения загруженных файлов';
|
||||
String get setupStoragePermissionSubtitle =>
|
||||
'Необходимо для сохранения загруженных файлов';
|
||||
|
||||
@override
|
||||
String get setupStoragePermissionGranted => 'Разрешение предоставлено';
|
||||
@@ -608,16 +640,19 @@ 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) {
|
||||
@@ -636,7 +671,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get setupUseDefaultFolder => 'Использовать папку по умолчанию?';
|
||||
|
||||
@override
|
||||
String get setupNoFolderSelected => 'Папка не выбрана. Хотите использовать папку Музыка по умолчанию?';
|
||||
String get setupNoFolderSelected =>
|
||||
'Папка не выбрана. Хотите использовать папку Музыка по умолчанию?';
|
||||
|
||||
@override
|
||||
String get setupUseDefault => 'По умолчанию';
|
||||
@@ -645,25 +681,30 @@ 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';
|
||||
@@ -690,16 +731,19 @@ 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 => 'Папка для загрузки выбрана!';
|
||||
@@ -708,7 +752,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get setupFolderChoose => 'Выбрать папку для скачивания';
|
||||
|
||||
@override
|
||||
String get setupFolderDescription => 'Выберите папку, в которой будет сохраняться скачанная музыка.';
|
||||
String get setupFolderDescription =>
|
||||
'Выберите папку, в которой будет сохраняться скачанная музыка.';
|
||||
|
||||
@override
|
||||
String get setupChangeFolder => 'Сменить папку';
|
||||
@@ -720,7 +765,8 @@ 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';
|
||||
@@ -738,19 +784,23 @@ 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 => 'Пропустить';
|
||||
@@ -768,10 +818,12 @@ 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 => 'Отмена';
|
||||
@@ -822,7 +874,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get dialogDiscardChanges => 'Отменить изменения?';
|
||||
|
||||
@override
|
||||
String get dialogUnsavedChanges => 'Есть несохраненные изменения. Отменить их?';
|
||||
String get dialogUnsavedChanges =>
|
||||
'Есть несохраненные изменения. Отменить их?';
|
||||
|
||||
@override
|
||||
String get dialogDownloadFailed => 'Ошибка скачивания';
|
||||
@@ -840,7 +893,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get dialogClearAll => 'Очистить всё';
|
||||
|
||||
@override
|
||||
String get dialogClearAllDownloads => 'Вы уверены, что хотите очистить все загрузки?';
|
||||
String get dialogClearAllDownloads =>
|
||||
'Вы уверены, что хотите очистить все загрузки?';
|
||||
|
||||
@override
|
||||
String get dialogRemoveFromDevice => 'Удалить с устройства?';
|
||||
@@ -849,7 +903,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get dialogRemoveExtension => 'Удалить расширение';
|
||||
|
||||
@override
|
||||
String get dialogRemoveExtensionMessage => 'Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.';
|
||||
String get dialogRemoveExtensionMessage =>
|
||||
'Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.';
|
||||
|
||||
@override
|
||||
String get dialogUninstallExtension => 'Удалить расширение?';
|
||||
@@ -863,7 +918,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get dialogClearHistoryTitle => 'Очистить историю';
|
||||
|
||||
@override
|
||||
String get dialogClearHistoryMessage => 'Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.';
|
||||
String get dialogClearHistoryMessage =>
|
||||
'Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.';
|
||||
|
||||
@override
|
||||
String get dialogDeleteSelectedTitle => 'Удалить выбранные';
|
||||
@@ -956,13 +1012,15 @@ 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) {
|
||||
@@ -984,7 +1042,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get errorRateLimited => 'Слишком много запросов';
|
||||
|
||||
@override
|
||||
String get errorRateLimitedMessage => 'Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.';
|
||||
String get errorRateLimitedMessage =>
|
||||
'Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.';
|
||||
|
||||
@override
|
||||
String errorFailedToLoad(String item) {
|
||||
@@ -1153,19 +1212,23 @@ 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 => 'Доступно обновление';
|
||||
@@ -1224,10 +1287,12 @@ 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 => 'Встроенные';
|
||||
@@ -1239,16 +1304,19 @@ 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 => 'Без ограничений по скорости';
|
||||
@@ -1314,22 +1382,26 @@ 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 => 'Обнаружены проблемы с подключением';
|
||||
@@ -1338,10 +1410,12 @@ 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) {
|
||||
@@ -1367,7 +1441,8 @@ 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';
|
||||
@@ -1421,7 +1496,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get lyricsMode => 'Режим текстов песен';
|
||||
|
||||
@override
|
||||
String get lyricsModeDescription => 'Выберите как сохранить тексты песен при скачивании';
|
||||
String get lyricsModeDescription =>
|
||||
'Выберите как сохранить тексты песен при скачивании';
|
||||
|
||||
@override
|
||||
String get lyricsModeEmbed => 'Вставить в файл';
|
||||
@@ -1433,7 +1509,8 @@ 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 => 'Оба варианта';
|
||||
@@ -1463,10 +1540,12 @@ 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 => 'Управление провайдерами скачивания';
|
||||
@@ -1571,10 +1650,12 @@ 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 => 'Не удалось загрузить текст песни';
|
||||
@@ -1595,7 +1676,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get trackDeleteConfirmTitle => 'Удалить с устройства?';
|
||||
|
||||
@override
|
||||
String get trackDeleteConfirmMessage => 'Это приведет к окончательному удалению загруженного файла и его удалению из истории.';
|
||||
String get trackDeleteConfirmMessage =>
|
||||
'Это приведет к окончательному удалению загруженного файла и его удалению из истории.';
|
||||
|
||||
@override
|
||||
String trackCannotOpen(String message) {
|
||||
@@ -1669,7 +1751,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get extensionDefaultProvider => 'По умолчанию (Deezer/Spotify)';
|
||||
|
||||
@override
|
||||
String get extensionDefaultProviderSubtitle => 'Использовать встроенный поиск';
|
||||
String get extensionDefaultProviderSubtitle =>
|
||||
'Использовать встроенный поиск';
|
||||
|
||||
@override
|
||||
String get extensionAuthor => 'Автор';
|
||||
@@ -1717,7 +1800,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get extensionMinAppVersion => 'Мин. версия приложения';
|
||||
|
||||
@override
|
||||
String get extensionCustomTrackMatching => 'Соответствие пользовательских треков';
|
||||
String get extensionCustomTrackMatching =>
|
||||
'Соответствие пользовательских треков';
|
||||
|
||||
@override
|
||||
String get extensionPostProcessing => 'Постобработка';
|
||||
@@ -1747,13 +1831,15 @@ 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 => 'Расширение успешно установлено';
|
||||
@@ -1762,28 +1848,34 @@ 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 => 'Пользовательский поиск';
|
||||
@@ -1825,7 +1917,8 @@ 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';
|
||||
@@ -1837,10 +1930,12 @@ 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 => 'Спрашивать перед скачиванием';
|
||||
@@ -1876,7 +1971,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get folderNone => 'Отсутствует';
|
||||
|
||||
@override
|
||||
String get folderNoneSubtitle => 'Сохранить все файлы непосредственно в папку загрузки';
|
||||
String get folderNoneSubtitle =>
|
||||
'Сохранить все файлы непосредственно в папку загрузки';
|
||||
|
||||
@override
|
||||
String get folderArtist => 'Исполнитель';
|
||||
@@ -1930,13 +2026,15 @@ 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';
|
||||
@@ -1948,7 +2046,8 @@ 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';
|
||||
@@ -1960,7 +2059,8 @@ 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.';
|
||||
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';
|
||||
@@ -1978,7 +2078,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1987,7 +2088,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -2008,7 +2110,20 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'Нет загрузок в очереди';
|
||||
@@ -2038,13 +2153,15 @@ 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 => 'Только альбом';
|
||||
@@ -2056,13 +2173,15 @@ 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 => 'Удалить выбранные';
|
||||
@@ -2176,7 +2295,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get discographySelectAlbums => 'Выбрать альбомы...';
|
||||
|
||||
@override
|
||||
String get discographySelectAlbumsSubtitle => 'Выберите конкретные альбомы или синглы';
|
||||
String get discographySelectAlbumsSubtitle =>
|
||||
'Выберите конкретные альбомы или синглы';
|
||||
|
||||
@override
|
||||
String get discographyFetchingTracks => 'Получение треков...';
|
||||
@@ -2208,7 +2328,8 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get discographyNoAlbums => 'Нет доступных альбомов';
|
||||
|
||||
@override
|
||||
String get discographyFailedToFetch => 'Не удалось получить некоторые альбомы';
|
||||
String get discographyFailedToFetch =>
|
||||
'Не удалось получить некоторые альбомы';
|
||||
|
||||
@override
|
||||
String get sectionStorageAccess => 'Storage Access';
|
||||
@@ -2223,11 +2344,14 @@ 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.';
|
||||
}
|
||||
|
||||
+214
-101
@@ -12,7 +12,8 @@ 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';
|
||||
@@ -41,7 +42,8 @@ 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';
|
||||
@@ -92,13 +94,15 @@ 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ş';
|
||||
@@ -134,7 +138,8 @@ 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';
|
||||
@@ -143,7 +148,8 @@ 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';
|
||||
@@ -152,7 +158,8 @@ 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ı';
|
||||
@@ -164,7 +171,8 @@ 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';
|
||||
@@ -197,7 +205,8 @@ 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';
|
||||
@@ -221,7 +230,8 @@ 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) {
|
||||
@@ -229,13 +239,15 @@ 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';
|
||||
@@ -244,19 +256,22 @@ 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';
|
||||
@@ -270,7 +285,8 @@ 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ı';
|
||||
@@ -294,13 +310,15 @@ 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';
|
||||
@@ -320,10 +338,12 @@ 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';
|
||||
@@ -387,7 +407,8 @@ 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';
|
||||
@@ -408,13 +429,15 @@ 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ı';
|
||||
@@ -447,28 +470,34 @@ 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';
|
||||
@@ -573,7 +602,8 @@ 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';
|
||||
@@ -600,16 +630,19 @@ 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) {
|
||||
@@ -628,7 +661,8 @@ 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';
|
||||
@@ -637,13 +671,15 @@ 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ç';
|
||||
@@ -652,10 +688,12 @@ 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';
|
||||
@@ -682,7 +720,8 @@ 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!';
|
||||
@@ -691,7 +730,8 @@ 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!';
|
||||
@@ -700,7 +740,8 @@ 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';
|
||||
@@ -712,7 +753,8 @@ 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';
|
||||
@@ -730,7 +772,8 @@ 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';
|
||||
@@ -739,10 +782,12 @@ 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';
|
||||
@@ -760,10 +805,12 @@ 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';
|
||||
@@ -814,7 +861,8 @@ 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';
|
||||
@@ -832,7 +880,8 @@ 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?';
|
||||
@@ -841,7 +890,8 @@ 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?';
|
||||
@@ -855,7 +905,8 @@ 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';
|
||||
@@ -950,7 +1001,8 @@ 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) {
|
||||
@@ -972,7 +1024,8 @@ 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) {
|
||||
@@ -1139,19 +1192,23 @@ 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';
|
||||
@@ -1204,16 +1261,19 @@ 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';
|
||||
@@ -1225,16 +1285,19 @@ 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';
|
||||
@@ -1279,7 +1342,8 @@ 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';
|
||||
@@ -1300,22 +1364,26 @@ 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';
|
||||
@@ -1324,10 +1392,12 @@ 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) {
|
||||
@@ -1353,7 +1423,8 @@ 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';
|
||||
@@ -1407,19 +1478,22 @@ 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';
|
||||
@@ -1452,13 +1526,15 @@ 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...';
|
||||
@@ -1558,7 +1634,8 @@ 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';
|
||||
@@ -1579,7 +1656,8 @@ 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) {
|
||||
@@ -1731,13 +1809,15 @@ 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';
|
||||
@@ -1746,19 +1826,23 @@ 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ı';
|
||||
@@ -1767,7 +1851,8 @@ 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';
|
||||
@@ -1809,7 +1894,8 @@ 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';
|
||||
@@ -1821,10 +1907,12 @@ 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';
|
||||
@@ -1914,13 +2002,15 @@ 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';
|
||||
@@ -1932,7 +2022,8 @@ 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';
|
||||
@@ -1944,7 +2035,8 @@ 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.';
|
||||
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';
|
||||
@@ -1962,7 +2054,8 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get cloudSettingsEnable => 'Enable Cloud Upload';
|
||||
|
||||
@override
|
||||
String get cloudSettingsEnableSubtitle => 'Automatically upload files after download completes';
|
||||
String get cloudSettingsEnableSubtitle =>
|
||||
'Automatically upload files after download completes';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionProvider => 'Cloud Provider';
|
||||
@@ -1971,7 +2064,8 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get cloudSettingsProvider => 'Provider';
|
||||
|
||||
@override
|
||||
String get cloudSettingsProviderDescription => 'Select where to upload your downloaded files';
|
||||
String get cloudSettingsProviderDescription =>
|
||||
'Select where to upload your downloaded files';
|
||||
|
||||
@override
|
||||
String get cloudSettingsSectionServer => 'Server Configuration';
|
||||
@@ -1992,7 +2086,20 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
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.';
|
||||
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 queueEmpty => 'No downloads in queue';
|
||||
@@ -2028,7 +2135,8 @@ 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';
|
||||
@@ -2046,7 +2154,8 @@ 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';
|
||||
@@ -2156,7 +2265,8 @@ 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...';
|
||||
@@ -2203,11 +2313,14 @@ 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.';
|
||||
}
|
||||
|
||||
+478
-234
File diff suppressed because it is too large
Load Diff
@@ -1519,6 +1519,14 @@
|
||||
"@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"},
|
||||
|
||||
"queueEmpty": "No downloads in queue",
|
||||
"@queueEmpty": {"description": "Empty queue state title"},
|
||||
|
||||
@@ -15,6 +15,7 @@ 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');
|
||||
@@ -1019,6 +1020,35 @@ 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
|
||||
Future<String?> exportFailedDownloads() async {
|
||||
@@ -2383,6 +2413,13 @@ 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(
|
||||
|
||||
@@ -0,0 +1,296 @@
|
||||
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<UploadQueueItem> 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<UploadQueueItem>? 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<UploadQueueState> {
|
||||
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<void> _processQueue() async {
|
||||
if (_isProcessing) return;
|
||||
_isProcessing = true;
|
||||
state = state.copyWith(isProcessing: true);
|
||||
|
||||
final settings = ref.read(settingsProvider);
|
||||
|
||||
while (true) {
|
||||
// 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,
|
||||
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, UploadQueueState>(
|
||||
UploadQueueNotifier.new,
|
||||
);
|
||||
@@ -2,6 +2,8 @@ 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 {
|
||||
@@ -290,6 +292,11 @@ class _CloudSettingsPageState extends ConsumerState<CloudSettingsPage> {
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
// Upload Queue Section
|
||||
SliverToBoxAdapter(
|
||||
child: _buildUploadQueueSection(context),
|
||||
),
|
||||
],
|
||||
|
||||
const SliverToBoxAdapter(child: SizedBox(height: 32)),
|
||||
@@ -304,9 +311,7 @@ class _CloudSettingsPageState extends ConsumerState<CloudSettingsPage> {
|
||||
case 'webdav':
|
||||
return 'WebDAV (Synology, Nextcloud, QNAP)';
|
||||
case 'sftp':
|
||||
return 'SFTP';
|
||||
case 'gdrive':
|
||||
return 'Google Drive (Coming Soon)';
|
||||
return 'SFTP (SSH File Transfer)';
|
||||
default:
|
||||
return 'Not Configured';
|
||||
}
|
||||
@@ -363,18 +368,6 @@ class _CloudSettingsPageState extends ConsumerState<CloudSettingsPage> {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: Icon(Icons.cloud, color: colorScheme.onSurfaceVariant),
|
||||
title: Text(
|
||||
'Google Drive',
|
||||
style: TextStyle(color: colorScheme.onSurfaceVariant),
|
||||
),
|
||||
subtitle: Text(
|
||||
'Coming Soon',
|
||||
style: TextStyle(color: colorScheme.onSurfaceVariant),
|
||||
),
|
||||
enabled: false,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
],
|
||||
),
|
||||
@@ -388,10 +381,8 @@ class _CloudSettingsPageState extends ConsumerState<CloudSettingsPage> {
|
||||
_connectionTestResult = null;
|
||||
});
|
||||
|
||||
// TODO: Implement actual connection test
|
||||
await Future.delayed(const Duration(seconds: 2));
|
||||
|
||||
final settings = ref.read(settingsProvider);
|
||||
|
||||
if (settings.cloudServerUrl.isEmpty) {
|
||||
setState(() {
|
||||
_isTestingConnection = false;
|
||||
@@ -400,10 +391,231 @@ class _CloudSettingsPageState extends ConsumerState<CloudSettingsPage> {
|
||||
return;
|
||||
}
|
||||
|
||||
// Placeholder - actual implementation will use webdav_client
|
||||
setState(() {
|
||||
_isTestingConnection = false;
|
||||
_connectionTestResult = 'Success: Connection test will be implemented in next version';
|
||||
});
|
||||
if (settings.cloudUsername.isEmpty || settings.cloudPassword.isEmpty) {
|
||||
setState(() {
|
||||
_isTestingConnection = false;
|
||||
_connectionTestResult = 'Error: Username and password are required';
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (settings.cloudProvider == 'webdav') {
|
||||
final result = await CloudUploadService.instance.testWebDAVConnection(
|
||||
serverUrl: settings.cloudServerUrl,
|
||||
username: settings.cloudUsername,
|
||||
password: settings.cloudPassword,
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_isTestingConnection = false;
|
||||
_connectionTestResult = result.success
|
||||
? 'Success: Connected to WebDAV server'
|
||||
: 'Error: ${result.error}';
|
||||
});
|
||||
} 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
|
||||
? 'Success: Connected to SFTP server'
|
||||
: 'Error: ${result.error}';
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
_isTestingConnection = false;
|
||||
_connectionTestResult = 'Error: No provider selected';
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
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(),
|
||||
'Pending',
|
||||
colorScheme.tertiary,
|
||||
),
|
||||
_buildStatItem(
|
||||
context,
|
||||
Icons.cloud_upload,
|
||||
uploadState.uploadingCount.toString(),
|
||||
'Uploading',
|
||||
colorScheme.primary,
|
||||
),
|
||||
_buildStatItem(
|
||||
context,
|
||||
Icons.check_circle,
|
||||
uploadState.completedCount.toString(),
|
||||
'Done',
|
||||
Colors.green,
|
||||
),
|
||||
_buildStatItem(
|
||||
context,
|
||||
Icons.error,
|
||||
uploadState.failedCount.toString(),
|
||||
'Failed',
|
||||
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: 'Retry',
|
||||
);
|
||||
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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,469 @@
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
import 'package:webdav_client/webdav_client.dart' as webdav;
|
||||
import 'package:dartssh2/dartssh2.dart';
|
||||
import 'package:spotiflac_android/utils/logger.dart';
|
||||
|
||||
/// Result of a cloud upload operation
|
||||
class CloudUploadResult {
|
||||
final bool success;
|
||||
final String? error;
|
||||
final String? remotePath;
|
||||
|
||||
const CloudUploadResult({
|
||||
required this.success,
|
||||
this.error,
|
||||
this.remotePath,
|
||||
});
|
||||
|
||||
factory CloudUploadResult.success(String remotePath) => CloudUploadResult(
|
||||
success: true,
|
||||
remotePath: remotePath,
|
||||
);
|
||||
|
||||
factory CloudUploadResult.failure(String error) => CloudUploadResult(
|
||||
success: false,
|
||||
error: error,
|
||||
);
|
||||
}
|
||||
|
||||
/// Parsed SFTP server URL
|
||||
class SftpServerInfo {
|
||||
final String host;
|
||||
final int port;
|
||||
|
||||
const SftpServerInfo({required this.host, required this.port});
|
||||
}
|
||||
|
||||
/// 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();
|
||||
|
||||
webdav.Client? _webdavClient;
|
||||
String? _currentServerUrl;
|
||||
String? _currentUsername;
|
||||
|
||||
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
|
||||
// ============================================================
|
||||
|
||||
/// Initialize WebDAV client with server credentials
|
||||
Future<void> initializeWebDAV({
|
||||
required String serverUrl,
|
||||
required String username,
|
||||
required String password,
|
||||
}) async {
|
||||
// Reuse existing client if credentials haven't changed
|
||||
if (_webdavClient != null &&
|
||||
_currentServerUrl == serverUrl &&
|
||||
_currentUsername == username) {
|
||||
return;
|
||||
}
|
||||
|
||||
_webdavClient = webdav.newClient(
|
||||
serverUrl,
|
||||
user: username,
|
||||
password: password,
|
||||
debug: false,
|
||||
);
|
||||
|
||||
_currentServerUrl = serverUrl;
|
||||
_currentUsername = username;
|
||||
|
||||
_logInfo('CloudUpload', 'WebDAV client initialized for $serverUrl');
|
||||
}
|
||||
|
||||
/// Test connection to WebDAV server
|
||||
Future<CloudUploadResult> testWebDAVConnection({
|
||||
required String serverUrl,
|
||||
required String username,
|
||||
required String password,
|
||||
}) async {
|
||||
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());
|
||||
return CloudUploadResult.failure(_parseWebDAVError(e));
|
||||
}
|
||||
}
|
||||
|
||||
/// Upload a file to WebDAV server
|
||||
Future<CloudUploadResult> uploadFileWebDAV({
|
||||
required String localPath,
|
||||
required String remotePath,
|
||||
required String serverUrl,
|
||||
required String username,
|
||||
required String password,
|
||||
void Function(int sent, int total)? onProgress,
|
||||
}) async {
|
||||
try {
|
||||
// Initialize client if needed
|
||||
await initializeWebDAV(
|
||||
serverUrl: serverUrl,
|
||||
username: username,
|
||||
password: password,
|
||||
);
|
||||
|
||||
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());
|
||||
return CloudUploadResult.failure(_parseWebDAVError(e));
|
||||
}
|
||||
}
|
||||
|
||||
/// Ensure a directory exists on the WebDAV server, creating it if necessary
|
||||
Future<void> _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
|
||||
String _parseWebDAVError(dynamic error) {
|
||||
final errorStr = error.toString().toLowerCase();
|
||||
|
||||
if (errorStr.contains('401') || errorStr.contains('unauthorized')) {
|
||||
return 'Authentication failed. Check username and password.';
|
||||
}
|
||||
if (errorStr.contains('403') || errorStr.contains('forbidden')) {
|
||||
return 'Access denied. Check permissions on the server.';
|
||||
}
|
||||
if (errorStr.contains('404') || errorStr.contains('not found')) {
|
||||
return 'Server path not found. Check the URL.';
|
||||
}
|
||||
if (errorStr.contains('connection refused') || errorStr.contains('socket')) {
|
||||
return 'Cannot connect to server. Check URL and network.';
|
||||
}
|
||||
if (errorStr.contains('certificate') || errorStr.contains('ssl') || errorStr.contains('tls')) {
|
||||
return 'SSL/TLS error. Server certificate may be invalid.';
|
||||
}
|
||||
if (errorStr.contains('timeout')) {
|
||||
return 'Connection timed out. Server may be unreachable.';
|
||||
}
|
||||
if (errorStr.contains('507') || errorStr.contains('insufficient storage')) {
|
||||
return 'Insufficient storage on server.';
|
||||
}
|
||||
|
||||
return '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<CloudUploadResult> 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,
|
||||
);
|
||||
|
||||
// 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<CloudUploadResult> 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,
|
||||
);
|
||||
|
||||
// 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<void> _ensureSFTPDirectoryExists(SftpClient sftp, String path) async {
|
||||
final parts = path.split('/').where((p) => p.isNotEmpty).toList();
|
||||
var currentPath = '';
|
||||
|
||||
for (final part in parts) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,14 @@ 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:
|
||||
@@ -249,6 +257,14 @@ 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:
|
||||
@@ -821,6 +837,14 @@ 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:
|
||||
@@ -837,6 +861,14 @@ 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:
|
||||
@@ -1346,6 +1378,14 @@ 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:
|
||||
|
||||
+3
-1
@@ -1,7 +1,7 @@
|
||||
name: spotiflac_android
|
||||
description: Download Spotify tracks in FLAC from Tidal, Qobuz & Amazon Music
|
||||
publish_to: "none"
|
||||
version: 3.3.6+71
|
||||
version: 3.4.0+72
|
||||
|
||||
environment:
|
||||
sdk: ^3.10.0
|
||||
@@ -32,6 +32,8 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user