mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-07-29 23:38:50 +02:00
The es/pt/zh base locales still shipped the old Store labels, the backup-restore hint said 'from the store' in every locale (boutique in fr, store loanword in ko), and the Go store lookup error said 'not found in store'. All user-visible surfaces now say repo; translator descriptions in the template updated to match.
4590 lines
112 KiB
Dart
4590 lines
112 KiB
Dart
// ignore: unused_import
|
|
import 'package:intl/intl.dart' as intl;
|
|
import 'app_localizations.dart';
|
|
|
|
// ignore_for_file: type=lint
|
|
|
|
/// The translations for Indonesian (`id`).
|
|
class AppLocalizationsId extends AppLocalizations {
|
|
AppLocalizationsId([String locale = 'id']) : super(locale);
|
|
|
|
@override
|
|
String get appName => 'SpotiFLAC Mobile';
|
|
|
|
@override
|
|
String get navHome => 'Beranda';
|
|
|
|
@override
|
|
String get navLibrary => 'Pustaka';
|
|
|
|
@override
|
|
String get navSettings => 'Pengaturan';
|
|
|
|
@override
|
|
String get navStore => 'Repositori';
|
|
|
|
@override
|
|
String get homeTitle => 'Beranda';
|
|
|
|
@override
|
|
String get homeSubtitle =>
|
|
'Tempel URL yang didukung atau cari berdasarkan nama';
|
|
|
|
@override
|
|
String get homeEmptyTitle => 'Belum ada penyedia pencarian';
|
|
|
|
@override
|
|
String get homeEmptySubtitle => 'Instal ekstensi untuk melanjutkan.';
|
|
|
|
@override
|
|
String get homeSupports =>
|
|
'Mendukung: URL Lagu, Album, Daftar Putar, dan Artis';
|
|
|
|
@override
|
|
String get homeRecent => 'Terbaru';
|
|
|
|
@override
|
|
String get historyFilterAll => 'Semua';
|
|
|
|
@override
|
|
String get historyFilterAlbums => 'Album';
|
|
|
|
@override
|
|
String get historyFilterSingles => 'Single';
|
|
|
|
@override
|
|
String get historySearchHint => 'Cari riwayat...';
|
|
|
|
@override
|
|
String get settingsTitle => 'Pengaturan';
|
|
|
|
@override
|
|
String get settingsDownload => 'Unduhan';
|
|
|
|
@override
|
|
String get settingsAppearance => 'Tampilan';
|
|
|
|
@override
|
|
String get settingsExtensions => 'Ekstensi';
|
|
|
|
@override
|
|
String get settingsAbout => 'Tentang';
|
|
|
|
@override
|
|
String get downloadTitle => 'Unduhan';
|
|
|
|
@override
|
|
String get downloadAskQualitySubtitle =>
|
|
'Tampilkan pemilih kualitas untuk setiap unduhan';
|
|
|
|
@override
|
|
String get downloadFilenameFormat => 'Format Nama File';
|
|
|
|
@override
|
|
String get downloadSingleFilenameFormat => 'Format Nama Berkas Tunggal';
|
|
|
|
@override
|
|
String get downloadSingleFilenameFormatDescription =>
|
|
'Pola nama file untuk single dan EP. Menggunakan tag yang sama dengan format album.';
|
|
|
|
@override
|
|
String get downloadFolderOrganization => 'Organisasi Folder';
|
|
|
|
@override
|
|
String get appearanceTitle => 'Tampilan';
|
|
|
|
@override
|
|
String get appearanceThemeSystem => 'Sistem';
|
|
|
|
@override
|
|
String get appearanceThemeLight => 'Terang';
|
|
|
|
@override
|
|
String get appearanceThemeDark => 'Gelap';
|
|
|
|
@override
|
|
String get appearanceDynamicColor => 'Warna Dinamis';
|
|
|
|
@override
|
|
String get appearanceDynamicColorSubtitle =>
|
|
'Gunakan warna dari wallpaper Anda';
|
|
|
|
@override
|
|
String get appearanceHistoryView => 'Tampilan Riwayat';
|
|
|
|
@override
|
|
String get appearanceHistoryViewList => 'Daftar';
|
|
|
|
@override
|
|
String get appearanceHistoryViewGrid => 'Kisi';
|
|
|
|
@override
|
|
String get optionsPrimaryProvider => 'Provider Utama';
|
|
|
|
@override
|
|
String get optionsPrimaryProviderSubtitle =>
|
|
'Layanan yang digunakan untuk mencari berdasarkan nama lagu atau album';
|
|
|
|
@override
|
|
String optionsUsingExtension(String extensionName) {
|
|
return 'Menggunakan ekstensi: $extensionName';
|
|
}
|
|
|
|
@override
|
|
String get optionsDefaultSearchTab => 'Tab Pencarian Default';
|
|
|
|
@override
|
|
String get optionsDefaultSearchTabSubtitle =>
|
|
'Pilih tab mana yang terbuka terlebih dahulu untuk hasil pencarian baru.';
|
|
|
|
@override
|
|
String get optionsAutoFallback => 'Cadangan Otomatis';
|
|
|
|
@override
|
|
String get optionsAutoFallbackSubtitle =>
|
|
'Coba layanan lain jika unduhan gagal';
|
|
|
|
@override
|
|
String get optionsEmbedLyrics => 'Sematkan Lirik';
|
|
|
|
@override
|
|
String get optionsEmbedLyricsSubtitle =>
|
|
'Simpan lirik yang disinkronkan bersama dengan lagu yang Anda unduh';
|
|
|
|
@override
|
|
String get optionsMaxQualityCover => 'Cover Kualitas Maksimal';
|
|
|
|
@override
|
|
String get optionsMaxQualityCoverSubtitle =>
|
|
'Unduh cover art resolusi tertinggi';
|
|
|
|
@override
|
|
String get optionsReplayGain => 'ReplayGain';
|
|
|
|
@override
|
|
String get optionsReplayGainSubtitleOn =>
|
|
'Pindai kenyaringan dan sematkan tag ReplayGain (EBU R128)';
|
|
|
|
@override
|
|
String get optionsReplayGainSubtitleOff =>
|
|
'Dinonaktifkan: tidak ada tag normalisasi kenyaringan';
|
|
|
|
@override
|
|
String get trackReplayGain => 'Pindai ulang ReplayGain';
|
|
|
|
@override
|
|
String get trackReplayGainScanning => 'Menganalisis kenyaringan...';
|
|
|
|
@override
|
|
String get trackReplayGainSuccess => 'Tag ReplayGain ditambahkan';
|
|
|
|
@override
|
|
String get trackReplayGainFailed => 'Gagal menambahkan tag ReplayGain';
|
|
|
|
@override
|
|
String selectionReplayGainCount(int count) {
|
|
return 'ReplayGain ($count)';
|
|
}
|
|
|
|
@override
|
|
String get replayGainBatchConfirmTitle => 'Tambah ReplayGain';
|
|
|
|
@override
|
|
String replayGainBatchConfirmMessage(int count) {
|
|
return 'Analisis kenyaringan dan tulis tag ReplayGain ke $count trek?';
|
|
}
|
|
|
|
@override
|
|
String get replayGainBatchAnalyzing => 'Menganalisis ReplayGain...';
|
|
|
|
@override
|
|
String replayGainBatchSuccess(int success, int total) {
|
|
return 'ReplayGain ditambahkan ke $success dari $total trek';
|
|
}
|
|
|
|
@override
|
|
String get optionsArtistTagMode => 'Mode Tag Artis';
|
|
|
|
@override
|
|
String get optionsArtistTagModeDescription =>
|
|
'Pilih bagaimana beberapa artis dicantumkan dalam tag yang disematkan.';
|
|
|
|
@override
|
|
String get optionsArtistTagModeJoined => 'Nilai gabungan tunggal';
|
|
|
|
@override
|
|
String get optionsArtistTagModeJoinedSubtitle =>
|
|
'Tuliskan satu nilai ARTIS seperti \"Artis A, Artis B\" untuk kompatibilitas pemain maksimal.';
|
|
|
|
@override
|
|
String get optionsArtistTagModeSplitVorbis => 'Tag terpisah untuk FLAC/Opus';
|
|
|
|
@override
|
|
String get optionsArtistTagModeSplitVorbisSubtitle =>
|
|
'Tulis satu tag artis per artis untuk FLAC dan Opus; MP3 dan M4A tetap tergabung.';
|
|
|
|
@override
|
|
String get optionsExtensionStore => 'Repositori Ekstensi';
|
|
|
|
@override
|
|
String get optionsExtensionStoreSubtitle => 'Tampilkan tab Repo di navigasi';
|
|
|
|
@override
|
|
String get optionsCheckUpdates => 'Periksa Pembaruan';
|
|
|
|
@override
|
|
String get optionsCheckUpdatesSubtitle => 'Beritahu saat versi baru tersedia';
|
|
|
|
@override
|
|
String get optionsUpdateChannel => 'Saluran Pembaruan';
|
|
|
|
@override
|
|
String get optionsUpdateChannelStable => 'Hanya rilis stabil';
|
|
|
|
@override
|
|
String get optionsUpdateChannelPreview => 'Dapatkan rilis preview';
|
|
|
|
@override
|
|
String get optionsUpdateChannelWarning =>
|
|
'Preview mungkin mengandung bug atau fitur belum lengkap';
|
|
|
|
@override
|
|
String get optionsClearHistory => 'Hapus Riwayat Unduhan';
|
|
|
|
@override
|
|
String get optionsClearHistorySubtitle => 'Hapus semua lagu dari riwayat';
|
|
|
|
@override
|
|
String get optionsDetailedLogging => 'Log Detail';
|
|
|
|
@override
|
|
String get optionsDetailedLoggingOn => 'Log detail sedang direkam';
|
|
|
|
@override
|
|
String get optionsDetailedLoggingOff => 'Aktifkan untuk laporan bug';
|
|
|
|
@override
|
|
String get extensionsTitle => 'Ekstensi';
|
|
|
|
@override
|
|
String get extensionsDisabled => 'Nonaktif';
|
|
|
|
@override
|
|
String extensionsVersion(String version) {
|
|
return 'Versi $version';
|
|
}
|
|
|
|
@override
|
|
String get extensionsUninstall => 'Copot';
|
|
|
|
@override
|
|
String get storeTitle => 'Repositori Ekstensi';
|
|
|
|
@override
|
|
String get storeSearch => 'Cari ekstensi...';
|
|
|
|
@override
|
|
String get storeInstall => 'Pasang';
|
|
|
|
@override
|
|
String get storeInstalled => 'Terpasang';
|
|
|
|
@override
|
|
String get storeUpdate => 'Perbarui';
|
|
|
|
@override
|
|
String get aboutTitle => 'Tentang';
|
|
|
|
@override
|
|
String get aboutContributors => 'Kontributor';
|
|
|
|
@override
|
|
String get aboutMobileDeveloper => 'Pengembang versi mobile';
|
|
|
|
@override
|
|
String get aboutOriginalCreator => 'Pencipta SpotiFLAC asli';
|
|
|
|
@override
|
|
String get aboutLogoArtist =>
|
|
'Seniman berbakat yang membuat logo aplikasi kita yang indah!';
|
|
|
|
@override
|
|
String get aboutTranslators => 'Penerjemah';
|
|
|
|
@override
|
|
String get aboutSpecialThanks => 'Terima Kasih Khusus';
|
|
|
|
@override
|
|
String get aboutLinks => 'Tautan';
|
|
|
|
@override
|
|
String get aboutMobileSource => 'Kode sumber mobile';
|
|
|
|
@override
|
|
String get aboutPCSource => 'Kode sumber PC';
|
|
|
|
@override
|
|
String get aboutKeepAndroidOpen => 'Biarkan Android tetap terbuka';
|
|
|
|
@override
|
|
String get aboutReportIssue => 'Laporkan masalah';
|
|
|
|
@override
|
|
String get aboutReportIssueSubtitle => 'Laporkan masalah yang Anda temui';
|
|
|
|
@override
|
|
String get aboutFeatureRequest => 'Permintaan fitur';
|
|
|
|
@override
|
|
String get aboutFeatureRequestSubtitle =>
|
|
'Sarankan fitur baru untuk aplikasi';
|
|
|
|
@override
|
|
String get aboutTelegramChannel => 'Saluran Telegram';
|
|
|
|
@override
|
|
String get aboutTelegramChannelSubtitle => 'Pengumuman dan pembaruan';
|
|
|
|
@override
|
|
String get aboutTelegramChat => 'Komunitas Telegram';
|
|
|
|
@override
|
|
String get aboutTelegramChatSubtitle => 'Berbincang dengan pengguna lain';
|
|
|
|
@override
|
|
String get aboutSocial => 'Sosial';
|
|
|
|
@override
|
|
String get aboutApp => 'Aplikasi';
|
|
|
|
@override
|
|
String get aboutVersion => 'Versi';
|
|
|
|
@override
|
|
String get aboutBinimumDesc =>
|
|
'Pencipta QQDL & HiFi API. Proyek ini membantu membentuk dukungan unduhan lossless.';
|
|
|
|
@override
|
|
String get aboutSachinsenalDesc =>
|
|
'Pencipta proyek HiFi asli. Sebuah fondasi untuk integrasi sumber lossless.';
|
|
|
|
@override
|
|
String get aboutSjdonadoDesc =>
|
|
'Pencipta I Don\'t Have Spotify (IDHS). Penyelesai tautan cadangan yang menyelamatkan keadaan!';
|
|
|
|
@override
|
|
String get aboutAppDescription =>
|
|
'Cari metadata musik, kelola ekstensi, dan atur perpustakaan Anda.';
|
|
|
|
@override
|
|
String get artistAlbums => 'Album';
|
|
|
|
@override
|
|
String get artistSingles => 'Single & EP';
|
|
|
|
@override
|
|
String get artistCompilations => 'Kompilasi';
|
|
|
|
@override
|
|
String get artistPopular => 'Populer';
|
|
|
|
@override
|
|
String artistMonthlyListeners(String count) {
|
|
return '$count pendengar bulanan';
|
|
}
|
|
|
|
@override
|
|
String get trackMetadataService => 'Layanan';
|
|
|
|
@override
|
|
String get trackMetadataPlay => 'Putar';
|
|
|
|
@override
|
|
String get trackMetadataShare => 'Bagikan';
|
|
|
|
@override
|
|
String get trackMetadataDelete => 'Hapus';
|
|
|
|
@override
|
|
String get setupGrantPermission => 'Berikan Izin';
|
|
|
|
@override
|
|
String get setupSkip => 'Lewati untuk sekarang';
|
|
|
|
@override
|
|
String get setupStorageAccessRequired => 'Akses Penyimpanan Diperlukan';
|
|
|
|
@override
|
|
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.';
|
|
|
|
@override
|
|
String setupPermissionRequired(String permissionType) {
|
|
return 'Izin $permissionType Diperlukan';
|
|
}
|
|
|
|
@override
|
|
String setupPermissionRequiredMessage(String permissionType) {
|
|
return 'Izin $permissionType diperlukan untuk pengalaman terbaik. Anda dapat mengubahnya nanti di Pengaturan.';
|
|
}
|
|
|
|
@override
|
|
String get setupUseDefaultFolder => 'Gunakan Folder Default?';
|
|
|
|
@override
|
|
String get setupNoFolderSelected =>
|
|
'Tidak ada folder dipilih. Apakah Anda ingin menggunakan folder Musik default?';
|
|
|
|
@override
|
|
String get setupUseDefault => 'Gunakan Default';
|
|
|
|
@override
|
|
String get setupDownloadLocationTitle => 'Lokasi Unduhan';
|
|
|
|
@override
|
|
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';
|
|
|
|
@override
|
|
String get setupChooseFromFiles => 'Pilih dari Files';
|
|
|
|
@override
|
|
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.';
|
|
|
|
@override
|
|
String get setupIcloudNotSupported =>
|
|
'iCloud Drive tidak didukung. Silakan gunakan folder Dokumen di aplikasi.';
|
|
|
|
@override
|
|
String get setupDownloadInFlac => 'Unduh lagu Spotify dalam format FLAC';
|
|
|
|
@override
|
|
String get setupStorageGranted => 'Izin Penyimpanan Diberikan!';
|
|
|
|
@override
|
|
String get setupStorageRequired => 'Izin Penyimpanan Diperlukan';
|
|
|
|
@override
|
|
String get setupStorageDescription =>
|
|
'SpotiFLAC membutuhkan izin penyimpanan untuk menyimpan file musik yang diunduh.';
|
|
|
|
@override
|
|
String get setupNotificationGranted => 'Izin Notifikasi Diberikan!';
|
|
|
|
@override
|
|
String get setupNotificationEnable => 'Aktifkan Notifikasi';
|
|
|
|
@override
|
|
String get setupFolderChoose => 'Pilih Folder Unduhan';
|
|
|
|
@override
|
|
String get setupFolderDescription =>
|
|
'Pilih folder tempat musik yang diunduh akan disimpan.';
|
|
|
|
@override
|
|
String get setupSelectFolder => 'Pilih Folder';
|
|
|
|
@override
|
|
String get setupEnableNotifications => 'Aktifkan Notifikasi';
|
|
|
|
@override
|
|
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';
|
|
|
|
@override
|
|
String get setupNext => 'Lanjut';
|
|
|
|
@override
|
|
String get setupGetStarted => 'Mulai';
|
|
|
|
@override
|
|
String get setupAllowAccessToManageFiles =>
|
|
'Harap aktifkan \"Izinkan akses untuk mengelola semua file\" di layar berikutnya.';
|
|
|
|
@override
|
|
String get setupLanguageTitle => 'Pilih Bahasa';
|
|
|
|
@override
|
|
String get setupLanguageDescription =>
|
|
'Pilih bahasa pilihan Anda untuk aplikasi ini. Anda dapat mengubahnya nanti di Pengaturan.';
|
|
|
|
@override
|
|
String get setupLanguageSystemDefault => 'Bawaan Sistem';
|
|
|
|
@override
|
|
String get dialogCancel => 'Batal';
|
|
|
|
@override
|
|
String get dialogSave => 'Simpan';
|
|
|
|
@override
|
|
String get dialogDelete => 'Hapus';
|
|
|
|
@override
|
|
String get dialogRetry => 'Coba Lagi';
|
|
|
|
@override
|
|
String get dialogClear => 'Hapus';
|
|
|
|
@override
|
|
String get dialogDone => 'Selesai';
|
|
|
|
@override
|
|
String get dialogImport => 'Impor';
|
|
|
|
@override
|
|
String get dialogDownload => 'Unduh';
|
|
|
|
@override
|
|
String get previewPlay => 'Putar pratinjau';
|
|
|
|
@override
|
|
String get previewStop => 'Hentikan pratinjau';
|
|
|
|
@override
|
|
String get previewUnavailable => 'Pratinjau tidak tersedia';
|
|
|
|
@override
|
|
String get dialogDiscard => 'Buang';
|
|
|
|
@override
|
|
String get dialogRemove => 'Hapus';
|
|
|
|
@override
|
|
String get dialogUninstall => 'Copot';
|
|
|
|
@override
|
|
String get dialogDiscardChanges => 'Buang Perubahan?';
|
|
|
|
@override
|
|
String get dialogUnsavedChanges =>
|
|
'Anda memiliki perubahan yang belum disimpan. Apakah Anda ingin membuangnya?';
|
|
|
|
@override
|
|
String get dialogClearAll => 'Hapus Semua';
|
|
|
|
@override
|
|
String get dialogRemoveExtension => 'Hapus Ekstensi';
|
|
|
|
@override
|
|
String get dialogRemoveExtensionMessage =>
|
|
'Apakah Anda yakin ingin menghapus ekstensi ini? Tindakan ini tidak dapat dibatalkan.';
|
|
|
|
@override
|
|
String get dialogUninstallExtension => 'Copot Ekstensi?';
|
|
|
|
@override
|
|
String dialogUninstallExtensionMessage(String extensionName) {
|
|
return 'Apakah Anda yakin ingin menghapus $extensionName?';
|
|
}
|
|
|
|
@override
|
|
String get dialogClearHistoryTitle => 'Hapus Riwayat';
|
|
|
|
@override
|
|
String get dialogClearHistoryMessage =>
|
|
'Apakah Anda yakin ingin menghapus semua riwayat unduhan? Ini tidak dapat dibatalkan.';
|
|
|
|
@override
|
|
String get dialogDeleteSelectedTitle => 'Hapus yang Dipilih';
|
|
|
|
@override
|
|
String dialogDeleteSelectedMessage(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'lagu',
|
|
one: 'lagu',
|
|
);
|
|
return 'Hapus $count $_temp0 dari riwayat?\n\nIni juga akan menghapus file dari penyimpanan.';
|
|
}
|
|
|
|
@override
|
|
String get dialogImportPlaylistTitle => 'Impor Playlist';
|
|
|
|
@override
|
|
String dialogImportPlaylistMessage(int count) {
|
|
return 'Ditemukan $count lagu di CSV. Tambahkan ke antrian unduhan?';
|
|
}
|
|
|
|
@override
|
|
String csvImportTracks(int count) {
|
|
return '$count trek dari CSV';
|
|
}
|
|
|
|
@override
|
|
String snackbarAddedToQueue(String trackName) {
|
|
return 'Menambahkan \"$trackName\" ke antrian';
|
|
}
|
|
|
|
@override
|
|
String snackbarAddedTracksToQueue(int count) {
|
|
return 'Menambahkan $count lagu ke antrian';
|
|
}
|
|
|
|
@override
|
|
String snackbarAlreadyDownloaded(String trackName) {
|
|
return '\"$trackName\" sudah diunduh';
|
|
}
|
|
|
|
@override
|
|
String snackbarAlreadyInLibrary(String trackName) {
|
|
return '\"$trackName\" sudah ada di perpustakaan Anda';
|
|
}
|
|
|
|
@override
|
|
String get snackbarHistoryCleared => 'Riwayat dihapus';
|
|
|
|
@override
|
|
String snackbarDeletedTracks(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'lagu',
|
|
one: 'lagu',
|
|
);
|
|
return 'Menghapus $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String snackbarCannotOpenFile(String error) {
|
|
return 'Tidak dapat membuka file: $error';
|
|
}
|
|
|
|
@override
|
|
String get snackbarViewQueue => 'Lihat Antrian';
|
|
|
|
@override
|
|
String snackbarUrlCopied(String platform) {
|
|
return 'URL $platform disalin ke clipboard';
|
|
}
|
|
|
|
@override
|
|
String get snackbarFileNotFound => 'File tidak ditemukan';
|
|
|
|
@override
|
|
String get snackbarSelectExtFile => 'Harap pilih file .spotiflac-ext';
|
|
|
|
@override
|
|
String get snackbarProviderPrioritySaved => 'Prioritas provider disimpan';
|
|
|
|
@override
|
|
String get snackbarMetadataProviderSaved =>
|
|
'Prioritas provider metadata disimpan';
|
|
|
|
@override
|
|
String snackbarExtensionInstalled(String extensionName) {
|
|
return '$extensionName terpasang.';
|
|
}
|
|
|
|
@override
|
|
String snackbarExtensionUpdated(String extensionName) {
|
|
return '$extensionName diperbarui.';
|
|
}
|
|
|
|
@override
|
|
String get snackbarFailedToInstall => 'Gagal memasang ekstensi';
|
|
|
|
@override
|
|
String get snackbarFailedToUpdate => 'Gagal memperbarui ekstensi';
|
|
|
|
@override
|
|
String get errorRateLimited => 'Dibatasi';
|
|
|
|
@override
|
|
String get errorRateLimitedMessage =>
|
|
'Terlalu banyak permintaan. Harap tunggu sebentar sebelum mencari lagi.';
|
|
|
|
@override
|
|
String get errorNoTracksFound => 'Tidak ada lagu ditemukan';
|
|
|
|
@override
|
|
String get searchEmptyResultSubtitle => 'Coba kata kunci lain';
|
|
|
|
@override
|
|
String get errorUrlNotRecognized => 'Tautan tidak dikenali';
|
|
|
|
@override
|
|
String get errorUrlNotRecognizedMessage =>
|
|
'Tautan ini tidak didukung. Pastikan URL sudah benar dan ekstensi yang kompatibel telah terpasang.';
|
|
|
|
@override
|
|
String get errorUrlFetchFailed =>
|
|
'Konten dari tautan ini gagal dimuat. Silakan coba lagi.';
|
|
|
|
@override
|
|
String errorMissingExtensionSource(String item) {
|
|
return 'Tidak dapat memuat $item: sumber ekstensi tidak ada';
|
|
}
|
|
|
|
@override
|
|
String get actionPause => 'Jeda';
|
|
|
|
@override
|
|
String get actionResume => 'Lanjutkan';
|
|
|
|
@override
|
|
String get actionCancel => 'Batal';
|
|
|
|
@override
|
|
String get actionSelectAll => 'Pilih Semua';
|
|
|
|
@override
|
|
String get actionDeselect => 'Batal Pilih';
|
|
|
|
@override
|
|
String selectionSelected(int count) {
|
|
return '$count dipilih';
|
|
}
|
|
|
|
@override
|
|
String get selectionAllSelected => 'Semua lagu dipilih';
|
|
|
|
@override
|
|
String get selectionSelectToDelete => 'Pilih lagu untuk dihapus';
|
|
|
|
@override
|
|
String progressFetchingMetadata(int current, int total) {
|
|
return 'Mengambil metadata... $current/$total';
|
|
}
|
|
|
|
@override
|
|
String get progressReadingCsv => 'Membaca CSV...';
|
|
|
|
@override
|
|
String get searchSongs => 'Lagu';
|
|
|
|
@override
|
|
String get searchArtists => 'Artis';
|
|
|
|
@override
|
|
String get searchAlbums => 'Album';
|
|
|
|
@override
|
|
String get searchPlaylists => 'Playlist';
|
|
|
|
@override
|
|
String get searchSortTitle => 'Urutkan hasil';
|
|
|
|
@override
|
|
String get searchSortDefault => 'Default';
|
|
|
|
@override
|
|
String get searchSortTitleAZ => 'Judul (A-Z)';
|
|
|
|
@override
|
|
String get searchSortTitleZA => 'Judul (Z-A)';
|
|
|
|
@override
|
|
String get searchSortArtistAZ => 'Artis (A-Z)';
|
|
|
|
@override
|
|
String get searchSortArtistZA => 'Artis (Z-A)';
|
|
|
|
@override
|
|
String get searchSortDurationShort => 'Durasi (Terpendek)';
|
|
|
|
@override
|
|
String get searchSortDurationLong => 'Durasi (Terpanjang)';
|
|
|
|
@override
|
|
String get searchSortDateOldest => 'Tanggal rilis (Terlama)';
|
|
|
|
@override
|
|
String get searchSortDateNewest => 'Tanggal rilis (Terbaru)';
|
|
|
|
@override
|
|
String get tooltipPlay => 'Putar';
|
|
|
|
@override
|
|
String get filenameFormat => 'Format Nama File';
|
|
|
|
@override
|
|
String get filenameShowAdvancedTags => 'Tampilkan tag lanjutan';
|
|
|
|
@override
|
|
String get filenameShowAdvancedTagsDescription =>
|
|
'Aktifkan tag yang diformat untuk padding trek dan pola tanggal';
|
|
|
|
@override
|
|
String get folderOrganizationNone => 'Tidak ada';
|
|
|
|
@override
|
|
String get folderOrganizationByPlaylist => 'Berdasarkan Daftar Putar';
|
|
|
|
@override
|
|
String get folderOrganizationByPlaylistSubtitle =>
|
|
'Setiap daftar putar memerlukan folder terpisah';
|
|
|
|
@override
|
|
String get folderOrganizationByArtist => 'Berdasarkan Artis';
|
|
|
|
@override
|
|
String get folderOrganizationByAlbum => 'Berdasarkan Album';
|
|
|
|
@override
|
|
String get folderOrganizationByArtistAlbum => 'Berdasarkan Artis & Album';
|
|
|
|
@override
|
|
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';
|
|
|
|
@override
|
|
String get folderOrganizationByAlbumSubtitle =>
|
|
'Folder terpisah untuk setiap album';
|
|
|
|
@override
|
|
String get folderOrganizationByArtistAlbumSubtitle =>
|
|
'Folder bersarang untuk artis dan album';
|
|
|
|
@override
|
|
String get updateAvailable => 'Pembaruan Tersedia';
|
|
|
|
@override
|
|
String get updateLater => 'Nanti';
|
|
|
|
@override
|
|
String get updateStartingDownload => 'Memulai unduhan...';
|
|
|
|
@override
|
|
String get updateDownloadFailed => 'Unduhan gagal';
|
|
|
|
@override
|
|
String get updateFailedMessage => 'Gagal mengunduh pembaruan';
|
|
|
|
@override
|
|
String get updateNewVersionReady => 'Versi baru sudah siap';
|
|
|
|
@override
|
|
String get updateRequiredTitle => 'Update required';
|
|
|
|
@override
|
|
String updateRequiredNotice(int count) {
|
|
return 'This version is $count releases behind and is no longer supported. Update to keep using the app.';
|
|
}
|
|
|
|
@override
|
|
String get updateCurrent => 'Saat ini';
|
|
|
|
@override
|
|
String get updateNew => 'Baru';
|
|
|
|
@override
|
|
String get updateDownloading => 'Mengunduh...';
|
|
|
|
@override
|
|
String get updateWhatsNew => 'Apa yang baru';
|
|
|
|
@override
|
|
String get updateDownloadInstall => 'Unduh & Pasang';
|
|
|
|
@override
|
|
String get updateDontRemind => 'Jangan ingatkan';
|
|
|
|
@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.';
|
|
|
|
@override
|
|
String get providerPriorityInfo =>
|
|
'Jika lagu tidak tersedia di provider pertama, aplikasi akan otomatis mencoba yang berikutnya.';
|
|
|
|
@override
|
|
String get providerPriorityFallbackExtensionsDescription =>
|
|
'Pilih ekstensi unduhan terpasang mana yang dapat digunakan selama fallback otomatis.';
|
|
|
|
@override
|
|
String get providerPriorityFallbackExtensionsHint =>
|
|
'Hanya ekstensi yang diaktifkan dengan kemampuan penyedia unduhan yang tercantum di sini.';
|
|
|
|
@override
|
|
String get providerExtension => 'Ekstensi';
|
|
|
|
@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.';
|
|
|
|
@override
|
|
String get metadataProviderPriorityInfo =>
|
|
'Deezer tidak memiliki batas rate dan direkomendasikan sebagai utama. Spotify mungkin membatasi rate setelah banyak permintaan.';
|
|
|
|
@override
|
|
String get logTitle => 'Log';
|
|
|
|
@override
|
|
String get logCopied => 'Log disalin ke clipboard';
|
|
|
|
@override
|
|
String get logSearchHint => 'Cari log...';
|
|
|
|
@override
|
|
String get logFilterLevel => 'Level';
|
|
|
|
@override
|
|
String get logFilterSection => 'Filter';
|
|
|
|
@override
|
|
String get logShareLogs => 'Bagikan log';
|
|
|
|
@override
|
|
String get logClearLogs => 'Hapus log';
|
|
|
|
@override
|
|
String get logClearLogsTitle => 'Hapus Log';
|
|
|
|
@override
|
|
String get logClearLogsMessage =>
|
|
'Apakah Anda yakin ingin menghapus semua log?';
|
|
|
|
@override
|
|
String get logFilterBySeverity => 'Filter log berdasarkan tingkat keparahan';
|
|
|
|
@override
|
|
String get logNoLogsYet => 'Belum ada log';
|
|
|
|
@override
|
|
String get logNoLogsYetSubtitle =>
|
|
'Log akan muncul di sini saat Anda menggunakan aplikasi';
|
|
|
|
@override
|
|
String logEntriesFiltered(int count) {
|
|
return 'Entri ($count difilter)';
|
|
}
|
|
|
|
@override
|
|
String logEntries(int count) {
|
|
return 'Entri ($count)';
|
|
}
|
|
|
|
@override
|
|
String get channelStable => 'Stabil';
|
|
|
|
@override
|
|
String get channelPreview => 'Pratinjau';
|
|
|
|
@override
|
|
String get sectionSearchSource => 'Sumber Pencarian';
|
|
|
|
@override
|
|
String get sectionDownload => 'Unduhan';
|
|
|
|
@override
|
|
String get sectionPerformance => 'Performa';
|
|
|
|
@override
|
|
String get sectionApp => 'Aplikasi';
|
|
|
|
@override
|
|
String get sectionData => 'Data';
|
|
|
|
@override
|
|
String get sectionDebug => 'Debug';
|
|
|
|
@override
|
|
String get sectionService => 'Layanan';
|
|
|
|
@override
|
|
String get sectionAudioQuality => 'Kualitas Audio';
|
|
|
|
@override
|
|
String get sectionFileSettings => 'Pengaturan File';
|
|
|
|
@override
|
|
String get sectionLyrics => 'Lirik';
|
|
|
|
@override
|
|
String get lyricsMode => 'Mode Lirik';
|
|
|
|
@override
|
|
String get lyricsModeDescription =>
|
|
'Pilih cara lirik disimpan bersama unduhan Anda';
|
|
|
|
@override
|
|
String get lyricsModeEmbed => 'Sematkan dalam file';
|
|
|
|
@override
|
|
String get lyricsModeEmbedSubtitle =>
|
|
'Lirik tersimpan di dalam metadata FLAC';
|
|
|
|
@override
|
|
String get lyricsModeExternal => 'File .lrc eksternal';
|
|
|
|
@override
|
|
String get lyricsModeExternalSubtitle =>
|
|
'File .lrc terpisah untuk pemutar musik seperti Samsung Music';
|
|
|
|
@override
|
|
String get lyricsModeBoth => 'Keduanya';
|
|
|
|
@override
|
|
String get lyricsModeBothSubtitle => 'Sematkan dan simpan file .lrc';
|
|
|
|
@override
|
|
String get sectionColor => 'Warna';
|
|
|
|
@override
|
|
String get sectionTheme => 'Tema';
|
|
|
|
@override
|
|
String get sectionLayout => 'Tata Letak';
|
|
|
|
@override
|
|
String get sectionLanguage => 'Bahasa';
|
|
|
|
@override
|
|
String get appearanceLanguage => 'Bahasa Aplikasi';
|
|
|
|
@override
|
|
String get settingsAppearanceSubtitle => 'Tema, warna, tampilan';
|
|
|
|
@override
|
|
String get settingsDownloadSubtitle => 'Layanan, kualitas, cadangan';
|
|
|
|
@override
|
|
String get settingsExtensionsSubtitle => 'Kelola provider unduhan';
|
|
|
|
@override
|
|
String get settingsLogsSubtitle => 'Lihat log aplikasi untuk debugging';
|
|
|
|
@override
|
|
String get loadingSharedLink => 'Memuat link yang dibagikan...';
|
|
|
|
@override
|
|
String get pressBackAgainToExit => 'Tekan kembali sekali lagi untuk keluar';
|
|
|
|
@override
|
|
String downloadAllCount(int count) {
|
|
return 'Unduh Semua ($count)';
|
|
}
|
|
|
|
@override
|
|
String tracksCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count lagu',
|
|
one: '1 lagu',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get trackCopyFilePath => 'Salin lokasi file';
|
|
|
|
@override
|
|
String get trackRemoveFromDevice => 'Hapus dari perangkat';
|
|
|
|
@override
|
|
String get trackLoadLyrics => 'Muat Lirik';
|
|
|
|
@override
|
|
String get trackMetadata => 'Metadata';
|
|
|
|
@override
|
|
String get trackFileInfo => 'Info File';
|
|
|
|
@override
|
|
String get trackLyrics => 'Lirik';
|
|
|
|
@override
|
|
String get trackFileNotFound => 'File tidak ditemukan';
|
|
|
|
@override
|
|
String get trackOpenInDeezer => 'Buka di Deezer';
|
|
|
|
@override
|
|
String get trackOpenInSpotify => 'Buka di Spotify';
|
|
|
|
@override
|
|
String get trackTrackName => 'Nama lagu';
|
|
|
|
@override
|
|
String get trackArtist => 'Artis';
|
|
|
|
@override
|
|
String get trackAlbumArtist => 'Artis album';
|
|
|
|
@override
|
|
String get trackAlbum => 'Album';
|
|
|
|
@override
|
|
String get trackTrackNumber => 'Nomor lagu';
|
|
|
|
@override
|
|
String get trackDiscNumber => 'Nomor disc';
|
|
|
|
@override
|
|
String get trackDuration => 'Durasi';
|
|
|
|
@override
|
|
String get trackAudioQuality => 'Kualitas audio';
|
|
|
|
@override
|
|
String get trackReleaseDate => 'Tanggal rilis';
|
|
|
|
@override
|
|
String get trackGenre => 'Genre';
|
|
|
|
@override
|
|
String get trackLabel => 'Label';
|
|
|
|
@override
|
|
String get trackCopyright => 'Hak cipta';
|
|
|
|
@override
|
|
String get trackDownloaded => 'Diunduh';
|
|
|
|
@override
|
|
String get trackCopyLyrics => 'Salin lirik';
|
|
|
|
@override
|
|
String trackLyricsSource(String source) {
|
|
return 'Sumber: $source';
|
|
}
|
|
|
|
@override
|
|
String get trackLyricsNotAvailable => 'Lirik tidak tersedia untuk lagu ini';
|
|
|
|
@override
|
|
String get trackLyricsNotInFile => 'Tidak ditemukan lirik dalam file ini';
|
|
|
|
@override
|
|
String get trackFetchOnlineLyrics => 'Ambil dari Online';
|
|
|
|
@override
|
|
String get trackLyricsTimeout => 'Permintaan habis waktu. Coba lagi nanti.';
|
|
|
|
@override
|
|
String get trackLyricsLoadFailed => 'Gagal memuat lirik';
|
|
|
|
@override
|
|
String get trackEmbedLyrics => 'Sematkan Lirik';
|
|
|
|
@override
|
|
String get trackLyricsEmbedded => 'Lirik berhasil disematkan';
|
|
|
|
@override
|
|
String get trackInstrumental => 'Lagu instrumental';
|
|
|
|
@override
|
|
String get trackCopiedToClipboard => 'Disalin ke clipboard';
|
|
|
|
@override
|
|
String get trackDeleteConfirmTitle => 'Hapus dari perangkat?';
|
|
|
|
@override
|
|
String get trackDeleteConfirmMessage =>
|
|
'Ini akan menghapus file unduhan secara permanen dan menghapusnya dari riwayat Anda.';
|
|
|
|
@override
|
|
String get dateToday => 'Hari ini';
|
|
|
|
@override
|
|
String get dateYesterday => 'Kemarin';
|
|
|
|
@override
|
|
String dateDaysAgo(int count) {
|
|
return '$count hari lalu';
|
|
}
|
|
|
|
@override
|
|
String dateWeeksAgo(int count) {
|
|
return '$count minggu lalu';
|
|
}
|
|
|
|
@override
|
|
String dateMonthsAgo(int count) {
|
|
return '$count bulan lalu';
|
|
}
|
|
|
|
@override
|
|
String get storeFilterAll => 'Semua';
|
|
|
|
@override
|
|
String get storeFilterMetadata => 'Metadata';
|
|
|
|
@override
|
|
String get storeFilterDownload => 'Unduhan';
|
|
|
|
@override
|
|
String get storeFilterUtility => 'Utilitas';
|
|
|
|
@override
|
|
String get storeFilterLyrics => 'Lirik';
|
|
|
|
@override
|
|
String get storeFilterIntegration => 'Integrasi';
|
|
|
|
@override
|
|
String get storeClearFilters => 'Hapus filter';
|
|
|
|
@override
|
|
String get storeAddRepoTitle => 'Tambahkan Repositori Ekstensi';
|
|
|
|
@override
|
|
String get storeAddRepoDescription =>
|
|
'Masukkan URL repositori GitHub yang berisi file registry.json untuk menelusuri dan memasang ekstensi.';
|
|
|
|
@override
|
|
String get storeRepoUrlLabel => 'Tautan Repositori';
|
|
|
|
@override
|
|
String get storeRepoUrlHint => 'https://github.com/user/repo';
|
|
|
|
@override
|
|
String get storeAddRepoButton => 'Tambahkan Repositori';
|
|
|
|
@override
|
|
String get storeChangeRepoTooltip => 'Ubah repositori';
|
|
|
|
@override
|
|
String get storeRepoDialogTitle => 'Repositori Ekstensi';
|
|
|
|
@override
|
|
String get storeRepoDialogCurrent => 'Repositori saat ini:';
|
|
|
|
@override
|
|
String get storeNewRepoUrlLabel => 'URL Repositori Baru';
|
|
|
|
@override
|
|
String get storeLoadError => 'Gagal memuat repositori';
|
|
|
|
@override
|
|
String get storeEmptyNoExtensions => 'Tidak ada ekstensi yang tersedia';
|
|
|
|
@override
|
|
String get storeEmptyNoResults => 'Tidak ada ekstensi ditemukan';
|
|
|
|
@override
|
|
String get extensionId => 'ID';
|
|
|
|
@override
|
|
String get extensionError => 'Terjadi kesalahan';
|
|
|
|
@override
|
|
String get extensionCapabilities => 'Kemampuan';
|
|
|
|
@override
|
|
String get extensionMetadataProvider => 'Provider Metadata';
|
|
|
|
@override
|
|
String get extensionDownloadProvider => 'Provider Unduhan';
|
|
|
|
@override
|
|
String get extensionLyricsProvider => 'Provider Lirik';
|
|
|
|
@override
|
|
String get extensionUrlHandler => 'Penanganan URL';
|
|
|
|
@override
|
|
String get extensionQualityOptions => 'Opsi Kualitas';
|
|
|
|
@override
|
|
String get extensionPostProcessingHooks => 'Hook Pasca-Pemrosesan';
|
|
|
|
@override
|
|
String get extensionPermissions => 'Izin';
|
|
|
|
@override
|
|
String get extensionSettings => 'Pengaturan';
|
|
|
|
@override
|
|
String get extensionRemoveButton => 'Hapus Ekstensi';
|
|
|
|
@override
|
|
String get extensionUpdated => 'Diperbarui';
|
|
|
|
@override
|
|
String get extensionMinAppVersion => 'Versi App Minimum';
|
|
|
|
@override
|
|
String get extensionCustomTrackMatching => 'Pencocokan Lagu Kustom';
|
|
|
|
@override
|
|
String get extensionPostProcessing => 'Pasca-Pemrosesan';
|
|
|
|
@override
|
|
String extensionHooksAvailable(int count) {
|
|
return '$count hook tersedia';
|
|
}
|
|
|
|
@override
|
|
String extensionPatternsCount(int count) {
|
|
return '$count pola';
|
|
}
|
|
|
|
@override
|
|
String extensionStrategy(String strategy) {
|
|
return 'Strategi: $strategy';
|
|
}
|
|
|
|
@override
|
|
String get extensionsProviderPrioritySection => 'Prioritas Provider';
|
|
|
|
@override
|
|
String get extensionsInstalledSection => 'Ekstensi Terpasang';
|
|
|
|
@override
|
|
String get extensionsNoExtensions => 'Tidak ada ekstensi terpasang';
|
|
|
|
@override
|
|
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.';
|
|
|
|
@override
|
|
String get extensionsInstalledSuccess => 'Ekstensi berhasil dipasang';
|
|
|
|
@override
|
|
String extensionsInstalledCount(int count) {
|
|
return '$count ekstensi berhasil terpasang';
|
|
}
|
|
|
|
@override
|
|
String extensionsInstallPartialSuccess(int installed, int attempted) {
|
|
return 'Ekstensi yang terpasang berjumlah $installed dari $attempted';
|
|
}
|
|
|
|
@override
|
|
String get extensionsDownloadPriority => 'Prioritas Unduhan';
|
|
|
|
@override
|
|
String get extensionsDownloadPrioritySubtitle =>
|
|
'Atur urutan layanan unduhan';
|
|
|
|
@override
|
|
String get extensionsFallbackTitle => 'Ekstensi Cadangan';
|
|
|
|
@override
|
|
String get extensionsFallbackSubtitle =>
|
|
'Pilih ekstensi unduhan terpasang mana yang dapat digunakan sebagai cadangan';
|
|
|
|
@override
|
|
String get extensionsNoDownloadProvider =>
|
|
'Tidak ada ekstensi dengan provider unduhan';
|
|
|
|
@override
|
|
String get extensionsMetadataPriority => 'Prioritas Metadata';
|
|
|
|
@override
|
|
String get extensionsMetadataPrioritySubtitle =>
|
|
'Atur urutan sumber pencarian & metadata';
|
|
|
|
@override
|
|
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';
|
|
|
|
@override
|
|
String get extensionsSearchProviderDescription =>
|
|
'Pilih layanan yang digunakan untuk mencari lagu';
|
|
|
|
@override
|
|
String get extensionsCustomSearch => 'Pencarian kustom';
|
|
|
|
@override
|
|
String get extensionsErrorLoading => 'Error memuat ekstensi';
|
|
|
|
@override
|
|
String get qualityFlacLossless => 'FLAC Lossless';
|
|
|
|
@override
|
|
String get qualityFlacLosslessSubtitle => '16-bit / 44.1kHz';
|
|
|
|
@override
|
|
String get qualityHiResFlac => 'Hi-Res FLAC';
|
|
|
|
@override
|
|
String get qualityHiResFlacSubtitle => '24-bit / hingga 96kHz';
|
|
|
|
@override
|
|
String get qualityHiResFlacMax => 'Hi-Res FLAC Max';
|
|
|
|
@override
|
|
String get qualityHiResFlacMaxSubtitle => '24-bit / hingga 192kHz';
|
|
|
|
@override
|
|
String get downloadLossy320 => 'Lossy 320kbps';
|
|
|
|
@override
|
|
String get downloadLossyFormat => 'Format Lossy';
|
|
|
|
@override
|
|
String get downloadLossy320Format => 'Format Lossy 320kbps';
|
|
|
|
@override
|
|
String get downloadLossy320FormatDesc =>
|
|
'Pilih format output untuk unduhan lossy 320kbps. Aliran data asli akan dikonversi ke format yang Anda pilih bila diperlukan.';
|
|
|
|
@override
|
|
String get downloadLossyMp3 => 'MP3 320kbps';
|
|
|
|
@override
|
|
String get downloadLossyMp3Subtitle =>
|
|
'Kompatibilitas terbaik, ~10MB per trek';
|
|
|
|
@override
|
|
String get downloadLossyAac => 'AAC/M4A 320kbps';
|
|
|
|
@override
|
|
String get downloadLossyAacSubtitle =>
|
|
'Kompatibilitas seluler terbaik, kontainer M4A';
|
|
|
|
@override
|
|
String get downloadLossyOpus256 => 'Opus 256kbps';
|
|
|
|
@override
|
|
String get downloadLossyOpus256Subtitle =>
|
|
'Opus kualitas terbaik, ~8MB per trek';
|
|
|
|
@override
|
|
String get downloadLossyOpus128 => 'Opus 128kbps';
|
|
|
|
@override
|
|
String get downloadLossyOpus128Subtitle => 'Ukuran terkecil, ~4MB per trek';
|
|
|
|
@override
|
|
String get downloadAskBeforeDownload => 'Tanya Sebelum Unduh';
|
|
|
|
@override
|
|
String get downloadDirectory => 'Direktori Unduhan';
|
|
|
|
@override
|
|
String get downloadSeparateSinglesFolder => 'Folder Singles Terpisah';
|
|
|
|
@override
|
|
String get downloadAlbumFolderStructure => 'Struktur Folder Album';
|
|
|
|
@override
|
|
String get albumFolderStructureDescription =>
|
|
'Pilih bagaimana struktur folder album akan dibuat';
|
|
|
|
@override
|
|
String get downloadUseAlbumArtistForFolders =>
|
|
'Gunakan Artis Album untuk folder';
|
|
|
|
@override
|
|
String get downloadUsePrimaryArtistOnly => 'Hanya artis utama untuk folder';
|
|
|
|
@override
|
|
String get downloadUsePrimaryArtistOnlyEnabled =>
|
|
'Artis unggulan dihapus dari nama folder (misalnya Justin Bieber, Quavo → Justin Bieber)';
|
|
|
|
@override
|
|
String get downloadUsePrimaryArtistOnlyDisabled =>
|
|
'Nama lengkap artis digunakan untuk nama folder';
|
|
|
|
@override
|
|
String get downloadSelectQuality => 'Pilih Kualitas';
|
|
|
|
@override
|
|
String get downloadFrom => 'Unduh Dari';
|
|
|
|
@override
|
|
String get appearanceAmoledDark => 'AMOLED Gelap';
|
|
|
|
@override
|
|
String get appearanceAmoledDarkSubtitle => 'Latar belakang hitam murni';
|
|
|
|
@override
|
|
String get queueClearAll => 'Hapus Semua';
|
|
|
|
@override
|
|
String get queueClearAllMessage =>
|
|
'Apakah Anda yakin ingin menghapus semua unduhan?';
|
|
|
|
@override
|
|
String get settingsAutoExportFailed => 'Unduhan yang gagal diekspor otomatis';
|
|
|
|
@override
|
|
String get settingsAutoExportFailedSubtitle =>
|
|
'Simpan unduhan yang gagal ke file TXT secara otomatis';
|
|
|
|
@override
|
|
String get settingsDownloadNetwork => 'Jaringan Unduhan';
|
|
|
|
@override
|
|
String get settingsDownloadNetworkAny => 'WiFi + Data Seluler';
|
|
|
|
@override
|
|
String get settingsDownloadNetworkWifiOnly => 'Hanya WiFi';
|
|
|
|
@override
|
|
String get settingsDownloadNetworkSubtitle =>
|
|
'Pilih jaringan mana yang akan digunakan untuk mengunduh. Jika diatur ke Hanya WiFi, unduhan akan berhenti sementara dan menggunakan data seluler.';
|
|
|
|
@override
|
|
String get settingsConcurrentDownloads => 'Concurrent downloads';
|
|
|
|
@override
|
|
String get settingsConcurrentDownloadsSubtitle =>
|
|
'Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.';
|
|
|
|
@override
|
|
String get concurrentDownloadsOne => '1 track at a time';
|
|
|
|
@override
|
|
String concurrentDownloadsCount(int count) {
|
|
return 'Up to $count tracks at once';
|
|
}
|
|
|
|
@override
|
|
String get albumFolderArtistAlbum => 'Artis / Album';
|
|
|
|
@override
|
|
String get albumFolderArtistAlbumSubtitle => 'Albums/Nama Artis/Nama Album/';
|
|
|
|
@override
|
|
String get albumFolderArtistYearAlbum => 'Artis / [Tahun] Album';
|
|
|
|
@override
|
|
String get albumFolderArtistYearAlbumSubtitle =>
|
|
'Albums/Nama Artis/[2005] Nama Album/';
|
|
|
|
@override
|
|
String get albumFolderAlbumOnly => 'Album Saja';
|
|
|
|
@override
|
|
String get albumFolderAlbumOnlySubtitle => 'Albums/Nama Album/';
|
|
|
|
@override
|
|
String get albumFolderYearAlbum => '[Tahun] Album';
|
|
|
|
@override
|
|
String get albumFolderYearAlbumSubtitle => 'Albums/[2005] Nama Album/';
|
|
|
|
@override
|
|
String get albumFolderArtistAlbumSingles => 'Artis / Album + Singel';
|
|
|
|
@override
|
|
String get albumFolderArtistAlbumSinglesSubtitle =>
|
|
'Artis/Album/ dan Artis/Single/';
|
|
|
|
@override
|
|
String get albumFolderArtistAlbumFlat => 'Artist / Album (Singles flat)';
|
|
|
|
@override
|
|
String get albumFolderArtistAlbumFlatSubtitle =>
|
|
'Artist/Album/ and Artist/song.flac';
|
|
|
|
@override
|
|
String get downloadedAlbumDeleteSelected => 'Hapus yang Dipilih';
|
|
|
|
@override
|
|
String downloadedAlbumDeleteMessage(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'lagu',
|
|
one: 'lagu',
|
|
);
|
|
return 'Hapus $count $_temp0 dari album ini?\n\nIni juga akan menghapus file dari penyimpanan.';
|
|
}
|
|
|
|
@override
|
|
String downloadedAlbumSelectedCount(int count) {
|
|
return '$count dipilih';
|
|
}
|
|
|
|
@override
|
|
String get downloadedAlbumTapToSelect => 'Ketuk lagu untuk memilih';
|
|
|
|
@override
|
|
String downloadedAlbumDeleteCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'lagu',
|
|
one: 'lagu',
|
|
);
|
|
return 'Hapus $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String get downloadedAlbumSelectToDelete => 'Pilih lagu untuk dihapus';
|
|
|
|
@override
|
|
String downloadedAlbumDiscHeader(int discNumber) {
|
|
return 'Disc $discNumber';
|
|
}
|
|
|
|
@override
|
|
String get recentTypeArtist => 'Artis';
|
|
|
|
@override
|
|
String get recentTypeAlbum => 'Album';
|
|
|
|
@override
|
|
String get recentTypeSong => 'Lagu';
|
|
|
|
@override
|
|
String get recentTypePlaylist => 'Daftar putar';
|
|
|
|
@override
|
|
String get recentEmpty => 'Belum ada item terbaru';
|
|
|
|
@override
|
|
String get recentShowAllDownloads => 'Tampilkan Semua Unduhan';
|
|
|
|
@override
|
|
String recentPlaylistInfo(String name) {
|
|
return 'Daftar Putar: $name';
|
|
}
|
|
|
|
@override
|
|
String get discographyDownload => 'Unduh Diskografi';
|
|
|
|
@override
|
|
String get discographyDownloadAll => 'Unduh Semua';
|
|
|
|
@override
|
|
String discographyDownloadAllSubtitle(int count, int albumCount) {
|
|
return '$count tracks from $albumCount releases';
|
|
}
|
|
|
|
@override
|
|
String get discographyAlbumsOnly => 'Albums Only';
|
|
|
|
@override
|
|
String discographyAlbumsOnlySubtitle(int count, int albumCount) {
|
|
return '$count tracks from $albumCount albums';
|
|
}
|
|
|
|
@override
|
|
String get discographySinglesOnly => 'Singles & EPs Only';
|
|
|
|
@override
|
|
String discographySinglesOnlySubtitle(int count, int albumCount) {
|
|
return '$count tracks from $albumCount singles';
|
|
}
|
|
|
|
@override
|
|
String get discographySelectAlbums => 'Select Albums...';
|
|
|
|
@override
|
|
String get discographySelectAlbumsSubtitle =>
|
|
'Choose specific albums or singles';
|
|
|
|
@override
|
|
String get discographyFetchingTracks => 'Fetching tracks...';
|
|
|
|
@override
|
|
String discographyFetchingAlbum(int current, int total) {
|
|
return 'Fetching $current of $total...';
|
|
}
|
|
|
|
@override
|
|
String discographySelectedCount(int count) {
|
|
return '$count selected';
|
|
}
|
|
|
|
@override
|
|
String get discographyDownloadSelected => 'Download Selected';
|
|
|
|
@override
|
|
String discographyAddedToQueue(int count) {
|
|
return 'Added $count tracks to queue';
|
|
}
|
|
|
|
@override
|
|
String discographySkippedDownloaded(int added, int skipped) {
|
|
return '$added added, $skipped already downloaded';
|
|
}
|
|
|
|
@override
|
|
String get discographyNoAlbums => 'No albums available';
|
|
|
|
@override
|
|
String get discographyFailedToFetch => 'Failed to fetch some albums';
|
|
|
|
@override
|
|
String get sectionStorageAccess => 'Storage Access';
|
|
|
|
@override
|
|
String get allFilesAccess => 'All Files Access';
|
|
|
|
@override
|
|
String get allFilesAccessEnabledSubtitle => 'Can write to any folder';
|
|
|
|
@override
|
|
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.';
|
|
|
|
@override
|
|
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.';
|
|
|
|
@override
|
|
String get settingsLocalLibrary => 'Local Library';
|
|
|
|
@override
|
|
String get settingsLocalLibrarySubtitle => 'Scan music & detect duplicates';
|
|
|
|
@override
|
|
String get settingsCache => 'Storage & Cache';
|
|
|
|
@override
|
|
String get settingsCacheSubtitle => 'View size and clear cached data';
|
|
|
|
@override
|
|
String get libraryTitle => 'Local Library';
|
|
|
|
@override
|
|
String get libraryScanSettings => 'Scan Settings';
|
|
|
|
@override
|
|
String get libraryEnableLocalLibrary => 'Enable Local Library';
|
|
|
|
@override
|
|
String get libraryEnableLocalLibrarySubtitle =>
|
|
'Scan and track your existing music';
|
|
|
|
@override
|
|
String get libraryFolder => 'Library Folder';
|
|
|
|
@override
|
|
String get libraryFolderHint => 'Tap to select folder';
|
|
|
|
@override
|
|
String get libraryShowDuplicateIndicator => 'Show Duplicate Indicator';
|
|
|
|
@override
|
|
String get libraryShowDuplicateIndicatorSubtitle =>
|
|
'Show when searching for existing tracks';
|
|
|
|
@override
|
|
String get libraryAutoScan => 'Auto Scan';
|
|
|
|
@override
|
|
String get libraryAutoScanSubtitle =>
|
|
'Automatically scan your library for new files';
|
|
|
|
@override
|
|
String get libraryAutoScanOff => 'Off';
|
|
|
|
@override
|
|
String get libraryAutoScanOnOpen => 'Every app open';
|
|
|
|
@override
|
|
String get libraryAutoScanDaily => 'Daily';
|
|
|
|
@override
|
|
String get libraryAutoScanWeekly => 'Weekly';
|
|
|
|
@override
|
|
String get libraryActions => 'Actions';
|
|
|
|
@override
|
|
String get libraryScan => 'Scan Library';
|
|
|
|
@override
|
|
String get libraryScanSubtitle => 'Scan for audio files';
|
|
|
|
@override
|
|
String get libraryScanSelectFolderFirst => 'Select a folder first';
|
|
|
|
@override
|
|
String get libraryCleanupMissingFiles => 'Cleanup Missing Files';
|
|
|
|
@override
|
|
String get libraryCleanupMissingFilesSubtitle =>
|
|
'Remove entries for files that no longer exist';
|
|
|
|
@override
|
|
String get libraryClear => 'Clear Library';
|
|
|
|
@override
|
|
String get libraryClearSubtitle => 'Remove all scanned tracks';
|
|
|
|
@override
|
|
String get libraryClearConfirmTitle => 'Clear Library';
|
|
|
|
@override
|
|
String get libraryClearConfirmMessage =>
|
|
'This will remove all scanned tracks from your library. Your actual music files will not be deleted.';
|
|
|
|
@override
|
|
String get libraryAbout => 'About Local Library';
|
|
|
|
@override
|
|
String get libraryAboutDescription =>
|
|
'Memindai koleksi musik yang sudah ada untuk mendeteksi duplikat saat mengunduh. Mendukung format FLAC, ALAC, M4A, MP3, Opus, OGG, WAV, AIFF, dan APE. Metadata dibaca dari tag file jika tersedia.';
|
|
|
|
@override
|
|
String libraryTracksUnit(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String libraryFilesUnit(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'files',
|
|
one: 'file',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String libraryLastScanned(String time) {
|
|
return 'Last scanned: $time';
|
|
}
|
|
|
|
@override
|
|
String get libraryLastScannedNever => 'Never';
|
|
|
|
@override
|
|
String get libraryScanning => 'Scanning...';
|
|
|
|
@override
|
|
String get libraryScanFinalizing => 'Finalizing library...';
|
|
|
|
@override
|
|
String libraryScanProgress(String progress, int total) {
|
|
return '$progress% of $total files';
|
|
}
|
|
|
|
@override
|
|
String get libraryInLibrary => 'In Library';
|
|
|
|
@override
|
|
String libraryRemovedMissingFiles(int count) {
|
|
return 'Removed $count missing files from library';
|
|
}
|
|
|
|
@override
|
|
String get libraryCleared => 'Library cleared';
|
|
|
|
@override
|
|
String get libraryStorageAccessRequired => 'Storage Access Required';
|
|
|
|
@override
|
|
String get libraryStorageAccessMessage =>
|
|
'SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.';
|
|
|
|
@override
|
|
String get libraryFolderNotExist => 'Selected folder does not exist';
|
|
|
|
@override
|
|
String get librarySourceDownloaded => 'Downloaded';
|
|
|
|
@override
|
|
String get librarySourceLocal => 'Local';
|
|
|
|
@override
|
|
String get libraryFilterAll => 'All';
|
|
|
|
@override
|
|
String get libraryFilterDownloaded => 'Downloaded';
|
|
|
|
@override
|
|
String get libraryFilterLocal => 'Local';
|
|
|
|
@override
|
|
String get libraryFilterTitle => 'Filters';
|
|
|
|
@override
|
|
String get libraryFilterReset => 'Reset';
|
|
|
|
@override
|
|
String get libraryFilterApply => 'Apply';
|
|
|
|
@override
|
|
String get libraryFilterSource => 'Source';
|
|
|
|
@override
|
|
String get libraryFilterQuality => 'Quality';
|
|
|
|
@override
|
|
String get libraryFilterQualityHiRes => 'Hi-Res (24bit)';
|
|
|
|
@override
|
|
String get libraryFilterQualityCD => 'CD (16bit)';
|
|
|
|
@override
|
|
String get libraryFilterQualityLossy => 'Lossy';
|
|
|
|
@override
|
|
String get libraryFilterFormat => 'Format';
|
|
|
|
@override
|
|
String get libraryFilterMetadata => 'Metadata';
|
|
|
|
@override
|
|
String get libraryFilterMetadataComplete => 'Complete metadata';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingAny => 'Missing any metadata';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingYear => 'Missing year';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingGenre => 'Missing genre';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingAlbumArtist => 'Missing album artist';
|
|
|
|
@override
|
|
String get libraryFilterSort => 'Sort';
|
|
|
|
@override
|
|
String get libraryFilterSortLatest => 'Latest';
|
|
|
|
@override
|
|
String get libraryFilterSortOldest => 'Oldest';
|
|
|
|
@override
|
|
String get libraryFilterSortAlbumAsc => 'Album (A-Z)';
|
|
|
|
@override
|
|
String get libraryFilterSortAlbumDesc => 'Album (Z-A)';
|
|
|
|
@override
|
|
String get libraryFilterSortGenreAsc => 'Genre (A-Z)';
|
|
|
|
@override
|
|
String get libraryFilterSortGenreDesc => 'Genre (Z-A)';
|
|
|
|
@override
|
|
String get timeJustNow => 'Just now';
|
|
|
|
@override
|
|
String timeMinutesAgo(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count minutes ago',
|
|
one: '1 minute ago',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String timeHoursAgo(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count hours ago',
|
|
one: '1 hour ago',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get tutorialWelcomeTitle => 'Selamat Datang di SpotiFLAC!';
|
|
|
|
@override
|
|
String get tutorialWelcomeDesc =>
|
|
'Mari kita pelajari cara mengunduh musik favorit Anda dalam kualitas lossless. Tutorial singkat ini akan menunjukkan dasar-dasarnya.';
|
|
|
|
@override
|
|
String get tutorialWelcomeTip1 =>
|
|
'Unduh musik dari Spotify, Deezer, atau tempel URL yang didukung';
|
|
|
|
@override
|
|
String get tutorialWelcomeTip2 =>
|
|
'Get FLAC quality audio from installed download extensions';
|
|
|
|
@override
|
|
String get tutorialWelcomeTip3 =>
|
|
'Penyematan metadata, sampul album, dan lirik secara otomatis';
|
|
|
|
@override
|
|
String get tutorialSearchTitle => 'Menemukan Musik';
|
|
|
|
@override
|
|
String get tutorialSearchDesc =>
|
|
'Ada dua cara mudah untuk menemukan musik yang ingin Anda unduh.';
|
|
|
|
@override
|
|
String get tutorialDownloadTitle => 'Mengunduh Musik';
|
|
|
|
@override
|
|
String get tutorialDownloadDesc =>
|
|
'Mengunduh musik itu mudah dan cepat. Begini cara kerjanya.';
|
|
|
|
@override
|
|
String get tutorialLibraryTitle => 'Perpustakaan Anda';
|
|
|
|
@override
|
|
String get tutorialLibraryDesc =>
|
|
'Semua musik yang Anda unduh tersusun rapi di tab Perpustakaan.';
|
|
|
|
@override
|
|
String get tutorialLibraryTip1 =>
|
|
'View download progress and queue in the Library tab';
|
|
|
|
@override
|
|
String get tutorialLibraryTip2 =>
|
|
'Tap any track to play it with your music player';
|
|
|
|
@override
|
|
String get tutorialLibraryTip3 =>
|
|
'Switch between list and grid view for better browsing';
|
|
|
|
@override
|
|
String get tutorialExtensionsTitle => 'Extensions';
|
|
|
|
@override
|
|
String get tutorialExtensionsDesc =>
|
|
'Extend the app\'s capabilities with community extensions.';
|
|
|
|
@override
|
|
String get tutorialExtensionsTip1 =>
|
|
'Browse the Repo tab to discover useful extensions';
|
|
|
|
@override
|
|
String get tutorialExtensionsTip2 =>
|
|
'Add new download providers or search sources';
|
|
|
|
@override
|
|
String get tutorialExtensionsTip3 =>
|
|
'Get lyrics, enhanced metadata, and more features';
|
|
|
|
@override
|
|
String get tutorialSettingsTitle => 'Customize Your Experience';
|
|
|
|
@override
|
|
String get tutorialSettingsDesc =>
|
|
'Personalize the app in Settings to match your preferences.';
|
|
|
|
@override
|
|
String get tutorialSettingsTip1 =>
|
|
'Change download location and folder organization';
|
|
|
|
@override
|
|
String get tutorialSettingsTip2 =>
|
|
'Set default audio quality and format preferences';
|
|
|
|
@override
|
|
String get tutorialSettingsTip3 => 'Customize app theme and appearance';
|
|
|
|
@override
|
|
String get tutorialReadyMessage =>
|
|
'You\'re all set! Start downloading your favorite music now.';
|
|
|
|
@override
|
|
String get libraryForceFullScan => 'Force Full Scan';
|
|
|
|
@override
|
|
String get libraryForceFullScanSubtitle => 'Rescan all files, ignoring cache';
|
|
|
|
@override
|
|
String get cleanupOrphanedDownloads => 'Cleanup Orphaned Downloads';
|
|
|
|
@override
|
|
String get cleanupOrphanedDownloadsSubtitle =>
|
|
'Remove history entries for files that no longer exist';
|
|
|
|
@override
|
|
String cleanupOrphanedDownloadsResult(int count) {
|
|
return 'Removed $count orphaned entries from history';
|
|
}
|
|
|
|
@override
|
|
String get cleanupOrphanedDownloadsNone => 'No orphaned entries found';
|
|
|
|
@override
|
|
String get cacheTitle => 'Storage & Cache';
|
|
|
|
@override
|
|
String get cacheSummaryTitle => 'Cache overview';
|
|
|
|
@override
|
|
String get cacheSummarySubtitle =>
|
|
'Clearing cache will not remove downloaded music files.';
|
|
|
|
@override
|
|
String cacheEstimatedTotal(String size) {
|
|
return 'Estimated cache usage: $size';
|
|
}
|
|
|
|
@override
|
|
String get cacheSectionStorage => 'Cached Data';
|
|
|
|
@override
|
|
String get cacheSectionMaintenance => 'Maintenance';
|
|
|
|
@override
|
|
String get cacheAppDirectory => 'App cache directory';
|
|
|
|
@override
|
|
String get cacheAppDirectoryDesc =>
|
|
'HTTP responses, WebView data, and other temporary app data.';
|
|
|
|
@override
|
|
String get cacheTempDirectory => 'Temporary directory';
|
|
|
|
@override
|
|
String get cacheTempDirectoryDesc =>
|
|
'Temporary files from downloads and audio conversion.';
|
|
|
|
@override
|
|
String get cacheCoverImage => 'Cover image cache';
|
|
|
|
@override
|
|
String get cacheCoverImageDesc =>
|
|
'Downloaded album and track cover art. Will re-download when viewed.';
|
|
|
|
@override
|
|
String get cacheLibraryCover => 'Library cover cache';
|
|
|
|
@override
|
|
String get cacheLibraryCoverDesc =>
|
|
'Cover art extracted from local music files. Will re-extract on next scan.';
|
|
|
|
@override
|
|
String get cacheExploreFeed => 'Explore feed cache';
|
|
|
|
@override
|
|
String get cacheExploreFeedDesc =>
|
|
'Explore tab content (new releases, trending). Will refresh on next visit.';
|
|
|
|
@override
|
|
String get cacheTrackLookup => 'Track lookup cache';
|
|
|
|
@override
|
|
String get cacheTrackLookupDesc =>
|
|
'Spotify/Deezer track ID lookups. Clearing may slow next few searches.';
|
|
|
|
@override
|
|
String get cacheCleanupUnusedDesc =>
|
|
'Remove orphaned download history and library entries for missing files.';
|
|
|
|
@override
|
|
String get cacheNoData => 'No cached data';
|
|
|
|
@override
|
|
String cacheSizeWithFiles(String size, int count) {
|
|
return '$size in $count files';
|
|
}
|
|
|
|
@override
|
|
String cacheSizeOnly(String size) {
|
|
return '$size';
|
|
}
|
|
|
|
@override
|
|
String cacheEntries(int count) {
|
|
return '$count entries';
|
|
}
|
|
|
|
@override
|
|
String cacheClearSuccess(String target) {
|
|
return 'Cleared: $target';
|
|
}
|
|
|
|
@override
|
|
String get cacheClearConfirmTitle => 'Clear cache?';
|
|
|
|
@override
|
|
String cacheClearConfirmMessage(String target) {
|
|
return 'This will clear cached data for $target. Downloaded music files will not be deleted.';
|
|
}
|
|
|
|
@override
|
|
String get cacheClearAllConfirmTitle => 'Clear all cache?';
|
|
|
|
@override
|
|
String get cacheClearAllConfirmMessage =>
|
|
'This will clear all cache categories on this page. Downloaded music files will not be deleted.';
|
|
|
|
@override
|
|
String get cacheClearAll => 'Clear all cache';
|
|
|
|
@override
|
|
String get cacheCleanupUnused => 'Cleanup unused data';
|
|
|
|
@override
|
|
String get cacheCleanupUnusedSubtitle =>
|
|
'Remove orphaned download history and missing library entries';
|
|
|
|
@override
|
|
String cacheCleanupResult(int downloadCount, int libraryCount) {
|
|
return 'Cleanup completed: $downloadCount orphaned downloads, $libraryCount missing library entries';
|
|
}
|
|
|
|
@override
|
|
String get cacheRefreshStats => 'Refresh stats';
|
|
|
|
@override
|
|
String get trackSaveCoverArt => 'Save Cover Art';
|
|
|
|
@override
|
|
String get trackSaveLyrics => 'Save Lyrics (.lrc)';
|
|
|
|
@override
|
|
String get trackSaveLyricsProgress => 'Saving lyrics...';
|
|
|
|
@override
|
|
String get trackReEnrich => 'Re-enrich';
|
|
|
|
@override
|
|
String get trackReEnrichOnlineSubtitle =>
|
|
'Search metadata online and embed into file';
|
|
|
|
@override
|
|
String get trackReEnrichFieldCover => 'Cover Art';
|
|
|
|
@override
|
|
String get trackReEnrichFieldLyrics => 'Lyrics';
|
|
|
|
@override
|
|
String get trackReEnrichFieldBasicTags => 'Album, Album Artist';
|
|
|
|
@override
|
|
String get trackReEnrichFieldTrackInfo => 'Track & Disc Number';
|
|
|
|
@override
|
|
String get trackReEnrichFieldReleaseInfo => 'Date & ISRC';
|
|
|
|
@override
|
|
String get trackReEnrichFieldExtra => 'Genre, Label, Copyright';
|
|
|
|
@override
|
|
String get trackReEnrichSelectAll => 'Select All';
|
|
|
|
@override
|
|
String get trackEditMetadata => 'Edit Metadata';
|
|
|
|
@override
|
|
String trackCoverSaved(String fileName) {
|
|
return 'Cover art saved to $fileName';
|
|
}
|
|
|
|
@override
|
|
String get trackCoverNoSource => 'No cover art source available';
|
|
|
|
@override
|
|
String trackLyricsSaved(String fileName) {
|
|
return 'Lyrics saved to $fileName';
|
|
}
|
|
|
|
@override
|
|
String get trackReEnrichProgress => 'Re-enriching metadata...';
|
|
|
|
@override
|
|
String get trackReEnrichSearching => 'Searching metadata online...';
|
|
|
|
@override
|
|
String get trackReEnrichSuccess => 'Metadata re-enriched successfully';
|
|
|
|
@override
|
|
String get trackReEnrichFfmpegFailed => 'FFmpeg metadata embed failed';
|
|
|
|
@override
|
|
String get queueFlacAction => 'Queue FLAC';
|
|
|
|
@override
|
|
String queueFlacConfirmMessage(int count) {
|
|
return 'Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n$count selected';
|
|
}
|
|
|
|
@override
|
|
String get queueFlacNoReliableMatches =>
|
|
'No reliable online matches found for the selection';
|
|
|
|
@override
|
|
String queueFlacQueuedWithSkipped(int addedCount, int skippedCount) {
|
|
return 'Added $addedCount tracks to queue, skipped $skippedCount';
|
|
}
|
|
|
|
@override
|
|
String trackSaveFailed(String error) {
|
|
return 'Failed: $error';
|
|
}
|
|
|
|
@override
|
|
String get trackConvertFormat => 'Convert Format';
|
|
|
|
@override
|
|
String get trackConvertTitle => 'Convert Audio';
|
|
|
|
@override
|
|
String get trackConvertTargetFormat => 'Target Format';
|
|
|
|
@override
|
|
String get trackConvertBitrate => 'Bitrate';
|
|
|
|
@override
|
|
String get trackConvertConfirmTitle => 'Confirm Conversion';
|
|
|
|
@override
|
|
String trackConvertConfirmMessage(
|
|
String sourceFormat,
|
|
String targetFormat,
|
|
String bitrate,
|
|
) {
|
|
return 'Convert from $sourceFormat to $targetFormat at $bitrate?\n\nThe original file will be deleted after conversion.';
|
|
}
|
|
|
|
@override
|
|
String trackConvertConfirmMessageLossless(
|
|
String sourceFormat,
|
|
String targetFormat,
|
|
) {
|
|
return 'Convert from $sourceFormat to $targetFormat? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.';
|
|
}
|
|
|
|
@override
|
|
String get trackConvertLosslessHint =>
|
|
'Lossless conversion — no quality loss';
|
|
|
|
@override
|
|
String get trackConvertConverting => 'Converting audio...';
|
|
|
|
@override
|
|
String trackConvertSuccess(String format) {
|
|
return 'Converted to $format successfully';
|
|
}
|
|
|
|
@override
|
|
String get trackConvertFailed => 'Conversion failed';
|
|
|
|
@override
|
|
String get cueSplitTitle => 'Split CUE Sheet';
|
|
|
|
@override
|
|
String cueSplitAlbum(String album) {
|
|
return 'Album: $album';
|
|
}
|
|
|
|
@override
|
|
String cueSplitArtist(String artist) {
|
|
return 'Artist: $artist';
|
|
}
|
|
|
|
@override
|
|
String cueSplitTrackCount(int count) {
|
|
return '$count tracks';
|
|
}
|
|
|
|
@override
|
|
String get cueSplitConfirmTitle => 'Split CUE Album';
|
|
|
|
@override
|
|
String cueSplitConfirmMessage(String album, int count) {
|
|
return 'Split \"$album\" into $count individual FLAC files?\n\nFiles will be saved to the same directory.';
|
|
}
|
|
|
|
@override
|
|
String cueSplitSplitting(int current, int total) {
|
|
return 'Splitting CUE sheet... ($current/$total)';
|
|
}
|
|
|
|
@override
|
|
String cueSplitSuccess(int count) {
|
|
return 'Split into $count tracks successfully';
|
|
}
|
|
|
|
@override
|
|
String get cueSplitFailed => 'CUE split failed';
|
|
|
|
@override
|
|
String get cueSplitNoAudioFile => 'Audio file not found for this CUE sheet';
|
|
|
|
@override
|
|
String get cueSplitButton => 'Split into Tracks';
|
|
|
|
@override
|
|
String get actionCreate => 'Create';
|
|
|
|
@override
|
|
String get collectionFoldersTitle => 'My folders';
|
|
|
|
@override
|
|
String get collectionWishlist => 'Wishlist';
|
|
|
|
@override
|
|
String get collectionLoved => 'Loved';
|
|
|
|
@override
|
|
String get collectionFavoriteArtists => 'Favorite Artists';
|
|
|
|
@override
|
|
String get collectionPlaylist => 'Playlist';
|
|
|
|
@override
|
|
String get collectionAddToPlaylist => 'Add to playlist';
|
|
|
|
@override
|
|
String get collectionCreatePlaylist => 'Create playlist';
|
|
|
|
@override
|
|
String get collectionNoPlaylistsYet => 'No playlists yet';
|
|
|
|
@override
|
|
String collectionPlaylistTracks(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count tracks',
|
|
one: '1 track',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String collectionArtistCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count artists',
|
|
one: '1 artist',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String collectionAddedToPlaylist(String playlistName) {
|
|
return 'Added to \"$playlistName\"';
|
|
}
|
|
|
|
@override
|
|
String collectionAlreadyInPlaylist(String playlistName) {
|
|
return 'Already in \"$playlistName\"';
|
|
}
|
|
|
|
@override
|
|
String get collectionPlaylistNameHint => 'Playlist name';
|
|
|
|
@override
|
|
String get collectionPlaylistNameRequired => 'Playlist name is required';
|
|
|
|
@override
|
|
String get collectionRenamePlaylist => 'Rename playlist';
|
|
|
|
@override
|
|
String get collectionDeletePlaylist => 'Delete playlist';
|
|
|
|
@override
|
|
String get collectionPlaylistRenamed => 'Playlist renamed';
|
|
|
|
@override
|
|
String get collectionWishlistEmptyTitle => 'Wishlist is empty';
|
|
|
|
@override
|
|
String get collectionWishlistEmptySubtitle =>
|
|
'Tap + on tracks to save what you want to download later';
|
|
|
|
@override
|
|
String get collectionLovedEmptyTitle => 'Loved folder is empty';
|
|
|
|
@override
|
|
String get collectionLovedEmptySubtitle =>
|
|
'Tap love on tracks to keep your favorites';
|
|
|
|
@override
|
|
String get collectionFavoriteArtistsEmptyTitle => 'No favorite artists yet';
|
|
|
|
@override
|
|
String get collectionFavoriteArtistsEmptySubtitle =>
|
|
'Tap the heart on an artist page to keep them here';
|
|
|
|
@override
|
|
String get collectionPlaylistEmptyTitle => 'Playlist is empty';
|
|
|
|
@override
|
|
String get collectionPlaylistEmptySubtitle =>
|
|
'Long-press + on any track to add it here';
|
|
|
|
@override
|
|
String get collectionRemoveFromPlaylist => 'Remove from playlist';
|
|
|
|
@override
|
|
String get collectionRemoveFromFolder => 'Remove from folder';
|
|
|
|
@override
|
|
String collectionAddedToLoved(String trackName) {
|
|
return '\"$trackName\" added to Loved';
|
|
}
|
|
|
|
@override
|
|
String collectionRemovedFromLoved(String trackName) {
|
|
return '\"$trackName\" removed from Loved';
|
|
}
|
|
|
|
@override
|
|
String collectionAddedToWishlist(String trackName) {
|
|
return '\"$trackName\" added to Wishlist';
|
|
}
|
|
|
|
@override
|
|
String collectionRemovedFromWishlist(String trackName) {
|
|
return '\"$trackName\" removed from Wishlist';
|
|
}
|
|
|
|
@override
|
|
String collectionAddedToFavoriteArtists(String artistName) {
|
|
return '\"$artistName\" added to Favorite Artists';
|
|
}
|
|
|
|
@override
|
|
String collectionRemovedFromFavoriteArtists(String artistName) {
|
|
return '\"$artistName\" removed from Favorite Artists';
|
|
}
|
|
|
|
@override
|
|
String get trackOptionAddToLoved => 'Add to Loved';
|
|
|
|
@override
|
|
String get trackOptionRemoveFromLoved => 'Remove from Loved';
|
|
|
|
@override
|
|
String get trackOptionAddToWishlist => 'Add to Wishlist';
|
|
|
|
@override
|
|
String get trackOptionRemoveFromWishlist => 'Remove from Wishlist';
|
|
|
|
@override
|
|
String get artistOptionAddToFavorites => 'Add to Favorite Artists';
|
|
|
|
@override
|
|
String get artistOptionRemoveFromFavorites => 'Remove from Favorite Artists';
|
|
|
|
@override
|
|
String get collectionPlaylistChangeCover => 'Change cover image';
|
|
|
|
@override
|
|
String get collectionPlaylistRemoveCover => 'Remove cover image';
|
|
|
|
@override
|
|
String selectionShareCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Share $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String get selectionShareNoFiles => 'No shareable files found';
|
|
|
|
@override
|
|
String selectionConvertCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Convert $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String get selectionConvertNoConvertible => 'No convertible tracks selected';
|
|
|
|
@override
|
|
String get selectionBatchConvertConfirmTitle => 'Batch Convert';
|
|
|
|
@override
|
|
String selectionBatchConvertConfirmMessage(
|
|
int count,
|
|
String format,
|
|
String bitrate,
|
|
) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Convert $count $_temp0 to $format at $bitrate?\n\nOriginal files will be deleted after conversion.';
|
|
}
|
|
|
|
@override
|
|
String selectionBatchConvertConfirmMessageLossless(int count, String format) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Convert $count $_temp0 to $format? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.';
|
|
}
|
|
|
|
@override
|
|
String selectionBatchConvertSuccess(int success, int total, String format) {
|
|
return 'Converted $success of $total tracks to $format';
|
|
}
|
|
|
|
@override
|
|
String downloadedAlbumDownloadedCount(int count) {
|
|
return '$count diunduh';
|
|
}
|
|
|
|
@override
|
|
String get downloadUseAlbumArtistForFoldersAlbumSubtitle =>
|
|
'Folder named after Album Artist tag';
|
|
|
|
@override
|
|
String get downloadUseAlbumArtistForFoldersTrackSubtitle =>
|
|
'Folder named after Track Artist tag';
|
|
|
|
@override
|
|
String get lyricsProvidersTitle => 'Lyrics Provider Priority';
|
|
|
|
@override
|
|
String get lyricsProvidersDescription =>
|
|
'Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.';
|
|
|
|
@override
|
|
String get lyricsProvidersInfoText =>
|
|
'Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.';
|
|
|
|
@override
|
|
String lyricsProvidersEnabledSection(int count) {
|
|
return 'Enabled ($count)';
|
|
}
|
|
|
|
@override
|
|
String lyricsProvidersDisabledSection(int count) {
|
|
return 'Disabled ($count)';
|
|
}
|
|
|
|
@override
|
|
String get lyricsProvidersAtLeastOne =>
|
|
'At least one provider must remain enabled';
|
|
|
|
@override
|
|
String get lyricsProvidersSaved => 'Lyrics provider priority saved';
|
|
|
|
@override
|
|
String get lyricsProvidersDiscardContent =>
|
|
'You have unsaved changes that will be lost.';
|
|
|
|
@override
|
|
String get lyricsProviderLrclibDesc => 'Open-source synced lyrics database';
|
|
|
|
@override
|
|
String get lyricsProviderNeteaseDesc =>
|
|
'NetEase Cloud Music (good for Asian songs)';
|
|
|
|
@override
|
|
String get lyricsProviderMusixmatchDesc =>
|
|
'Largest lyrics database (multi-language)';
|
|
|
|
@override
|
|
String get lyricsProviderAppleMusicDesc =>
|
|
'Word-by-word synced lyrics (via proxy)';
|
|
|
|
@override
|
|
String get lyricsProviderQqMusicDesc =>
|
|
'QQ Music (good for Chinese songs, via proxy)';
|
|
|
|
@override
|
|
String get lyricsProviderLyricsPlusDesc =>
|
|
'Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)';
|
|
|
|
@override
|
|
String get lyricsProviderExtensionDesc => 'Extension provider';
|
|
|
|
@override
|
|
String get safMigrationTitle => 'Storage Update Required';
|
|
|
|
@override
|
|
String get safMigrationMessage1 =>
|
|
'SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.';
|
|
|
|
@override
|
|
String get safMigrationMessage2 =>
|
|
'Please select your download folder again to switch to the new storage system.';
|
|
|
|
@override
|
|
String get safMigrationSuccess => 'Download folder updated to SAF mode';
|
|
|
|
@override
|
|
String get settingsDonate => 'Support Development';
|
|
|
|
@override
|
|
String get settingsDonateSubtitle => 'Buy the developer a coffee';
|
|
|
|
@override
|
|
String get settingsBackup => 'Backup & Restore';
|
|
|
|
@override
|
|
String get settingsBackupSubtitle =>
|
|
'Move your library, history and settings to a new device';
|
|
|
|
@override
|
|
String get backupTitle => 'Backup & Restore';
|
|
|
|
@override
|
|
String get backupExportSectionTitle => 'Create backup';
|
|
|
|
@override
|
|
String get backupExportSectionDescription =>
|
|
'Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.';
|
|
|
|
@override
|
|
String get backupExportButton => 'Create backup file';
|
|
|
|
@override
|
|
String get backupImportSectionTitle => 'Restore backup';
|
|
|
|
@override
|
|
String get backupImportSectionDescription =>
|
|
'Pick a backup file to restore your data. This replaces the current settings, history and library on this device.';
|
|
|
|
@override
|
|
String get backupImportButton => 'Choose backup file';
|
|
|
|
@override
|
|
String get backupCreated => 'Backup created';
|
|
|
|
@override
|
|
String get backupCreateFailed => 'Failed to create backup';
|
|
|
|
@override
|
|
String get backupRestoreConfirmTitle => 'Restore this backup?';
|
|
|
|
@override
|
|
String get backupRestoreConfirmMessage =>
|
|
'This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.';
|
|
|
|
@override
|
|
String get backupRestoreConfirmButton => 'Restore';
|
|
|
|
@override
|
|
String get backupRestored => 'Backup restored successfully';
|
|
|
|
@override
|
|
String get backupRestoreFailed => 'Failed to restore backup';
|
|
|
|
@override
|
|
String get backupInvalidFile => 'This file is not a valid SpotiFLAC backup';
|
|
|
|
@override
|
|
String get backupRestoreRestartHint =>
|
|
'Restart the app to make sure every change is applied.';
|
|
|
|
@override
|
|
String get backupContentsTitle => 'Backup contents';
|
|
|
|
@override
|
|
String get backupContentsSettings => 'App settings';
|
|
|
|
@override
|
|
String backupContentsHistory(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'items',
|
|
one: 'item',
|
|
);
|
|
return '$count history $_temp0';
|
|
}
|
|
|
|
@override
|
|
String backupContentsLiked(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return '$count liked $_temp0';
|
|
}
|
|
|
|
@override
|
|
String backupContentsWishlist(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return '$count wishlist $_temp0';
|
|
}
|
|
|
|
@override
|
|
String backupContentsPlaylists(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count playlists',
|
|
one: '1 playlist',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String backupContentsArtists(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count favorite artists',
|
|
one: '1 favorite artist',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String backupContentsExtensions(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count extensions',
|
|
one: '1 extension',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get backupIncludeSecrets => 'Include extension credentials';
|
|
|
|
@override
|
|
String get backupIncludeSecretsDescription =>
|
|
'Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.';
|
|
|
|
@override
|
|
String backupExtensionsRestoreFailed(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'extensions',
|
|
one: 'extension',
|
|
);
|
|
return '$count $_temp0 could not be reinstalled. Install them manually from the repo.';
|
|
}
|
|
|
|
@override
|
|
String get tooltipLoveAll => 'Love All';
|
|
|
|
@override
|
|
String get tooltipAddToPlaylist => 'Add to Playlist';
|
|
|
|
@override
|
|
String snackbarRemovedTracksFromLoved(int count) {
|
|
return 'Removed $count tracks from Loved';
|
|
}
|
|
|
|
@override
|
|
String snackbarAddedTracksToLoved(int count) {
|
|
return 'Added $count tracks to Loved';
|
|
}
|
|
|
|
@override
|
|
String get dialogDownloadAllTitle => 'Download All';
|
|
|
|
@override
|
|
String dialogDownloadAllMessage(int count) {
|
|
return 'Download $count tracks?';
|
|
}
|
|
|
|
@override
|
|
String get homeSkipAlreadyDownloaded => 'Skip already downloaded songs';
|
|
|
|
@override
|
|
String get homeGoToAlbum => 'Go to Album';
|
|
|
|
@override
|
|
String get homeAlbumInfoUnavailable => 'Album info not available';
|
|
|
|
@override
|
|
String get snackbarLoadingCueSheet => 'Loading CUE sheet...';
|
|
|
|
@override
|
|
String get snackbarMetadataSaved => 'Metadata saved successfully';
|
|
|
|
@override
|
|
String get snackbarFailedToEmbedLyrics => 'Failed to embed lyrics';
|
|
|
|
@override
|
|
String get snackbarFailedToWriteStorage => 'Failed to write back to storage';
|
|
|
|
@override
|
|
String snackbarError(String error) {
|
|
return 'Error: $error';
|
|
}
|
|
|
|
@override
|
|
String get snackbarNoActionDefined => 'No action defined for this button';
|
|
|
|
@override
|
|
String get noTracksFoundForAlbum => 'No tracks found for this album';
|
|
|
|
@override
|
|
String get downloadLocationSubtitle =>
|
|
'Choose where to save your downloaded tracks';
|
|
|
|
@override
|
|
String get storageModeAppFolder => 'App Folder (Recommended)';
|
|
|
|
@override
|
|
String get storageModeAppFolderSubtitle =>
|
|
'Saves to Music/SpotiFLAC by default';
|
|
|
|
@override
|
|
String get storageModeSaf => 'Custom Folder (SAF)';
|
|
|
|
@override
|
|
String get storageModeSafSubtitle => 'Pick any folder, including SD card';
|
|
|
|
@override
|
|
String get downloadFolderAccessLostTitle => 'Download folder access lost';
|
|
|
|
@override
|
|
String get downloadFolderAccessLostSubtitle =>
|
|
'Downloads will fail until you re-select the folder';
|
|
|
|
@override
|
|
String get downloadFolderReselect => 'Re-select folder';
|
|
|
|
@override
|
|
String get downloadErrorSafPermissionLost =>
|
|
'SAF permission invalid or revoked. Please reconfigure download location in Settings.';
|
|
|
|
@override
|
|
String get downloadErrorFolderAccessLost =>
|
|
'Download folder access lost. Please re-select your download folder in Settings.';
|
|
|
|
@override
|
|
String downloadFilenameDescription(
|
|
Object album,
|
|
Object artist,
|
|
Object date,
|
|
Object disc,
|
|
Object title,
|
|
Object track,
|
|
Object year,
|
|
) {
|
|
return 'Use $artist, $title, $album, $track, $year, $date, $disc as placeholders.';
|
|
}
|
|
|
|
@override
|
|
String get downloadFilenameInsertTag => 'Tap to insert tag:';
|
|
|
|
@override
|
|
String get downloadSeparateSinglesEnabled =>
|
|
'Singles and EPs saved in a separate folder';
|
|
|
|
@override
|
|
String get downloadSeparateSinglesDisabled =>
|
|
'Singles and albums saved in the same folder';
|
|
|
|
@override
|
|
String get downloadArtistNameFilters => 'Artist Name Filters';
|
|
|
|
@override
|
|
String get downloadCreatePlaylistSourceFolder => 'Playlist Source Folder';
|
|
|
|
@override
|
|
String get downloadCreatePlaylistSourceFolderEnabled =>
|
|
'A subfolder is created for each playlist';
|
|
|
|
@override
|
|
String get downloadCreatePlaylistSourceFolderDisabled =>
|
|
'All tracks saved directly to download folder';
|
|
|
|
@override
|
|
String get downloadCreatePlaylistSourceFolderRedundant =>
|
|
'Handled by folder organization setting';
|
|
|
|
@override
|
|
String get downloadSongLinkRegion => 'SongLink Region';
|
|
|
|
@override
|
|
String get downloadNetworkCompatibilityMode => 'Network Compatibility Mode';
|
|
|
|
@override
|
|
String get downloadNetworkCompatibilityModeEnabled =>
|
|
'Using legacy TLS settings for older networks';
|
|
|
|
@override
|
|
String get downloadNetworkCompatibilityModeDisabled =>
|
|
'Using standard network settings';
|
|
|
|
@override
|
|
String get downloadAllowLocalNetwork => 'Allow Local Network Access';
|
|
|
|
@override
|
|
String get downloadAllowLocalNetworkEnabled =>
|
|
'Requests to local/private addresses are allowed (for local proxy or custom DNS)';
|
|
|
|
@override
|
|
String get downloadAllowLocalNetworkDisabled =>
|
|
'Local/private addresses are blocked for security';
|
|
|
|
@override
|
|
String get downloadSelectServiceToEnable =>
|
|
'Select a provider with quality options to enable this option';
|
|
|
|
@override
|
|
String get downloadEmbedLyricsDisabled => 'Enable metadata embedding first';
|
|
|
|
@override
|
|
String get downloadNeteaseIncludeTranslation =>
|
|
'Netease: Include Translation';
|
|
|
|
@override
|
|
String get downloadNeteaseIncludeTranslationEnabled =>
|
|
'Chinese translation lines included';
|
|
|
|
@override
|
|
String get downloadNeteaseIncludeTranslationDisabled =>
|
|
'Original lyrics only';
|
|
|
|
@override
|
|
String get downloadNeteaseIncludeRomanization =>
|
|
'Netease: Include Romanization';
|
|
|
|
@override
|
|
String get downloadNeteaseIncludeRomanizationEnabled =>
|
|
'Romanization lines included';
|
|
|
|
@override
|
|
String get downloadNeteaseIncludeRomanizationDisabled => 'No romanization';
|
|
|
|
@override
|
|
String get downloadAppleQqMultiPerson => 'Apple / QQ: Multi-Person Lyrics';
|
|
|
|
@override
|
|
String get downloadAppleQqMultiPersonEnabled =>
|
|
'Speaker labels included for duets and group tracks';
|
|
|
|
@override
|
|
String get downloadAppleQqMultiPersonDisabled =>
|
|
'Standard lyrics without speaker labels';
|
|
|
|
@override
|
|
String get downloadAppleElrcWordSync => 'Apple Music eLRC Word Sync';
|
|
|
|
@override
|
|
String get downloadAppleElrcWordSyncEnabled =>
|
|
'Raw word-by-word timestamps preserved';
|
|
|
|
@override
|
|
String get downloadAppleElrcWordSyncDisabled =>
|
|
'Safer line-by-line Apple Music lyrics';
|
|
|
|
@override
|
|
String get downloadMusixmatchLanguage => 'Musixmatch Language';
|
|
|
|
@override
|
|
String get downloadMusixmatchLanguageAuto => 'Auto (original language)';
|
|
|
|
@override
|
|
String get downloadFilterContributing => 'Filter Contributing Artists';
|
|
|
|
@override
|
|
String get downloadFilterContributingEnabled =>
|
|
'Contributing artists removed from Album Artist folder name';
|
|
|
|
@override
|
|
String get downloadFilterContributingDisabled =>
|
|
'Full Album Artist string used';
|
|
|
|
@override
|
|
String get downloadProvidersNoneEnabled => 'No providers enabled';
|
|
|
|
@override
|
|
String get downloadMusixmatchLanguageCode => 'Language code';
|
|
|
|
@override
|
|
String get downloadMusixmatchLanguageHint => 'e.g. en, de, ja';
|
|
|
|
@override
|
|
String get downloadMusixmatchLanguageDesc =>
|
|
'Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.';
|
|
|
|
@override
|
|
String get downloadMusixmatchAuto => 'Auto';
|
|
|
|
@override
|
|
String get downloadNetworkAnySubtitle => 'Use WiFi or mobile data';
|
|
|
|
@override
|
|
String get downloadNetworkWifiOnlySubtitle =>
|
|
'Downloads pause when on mobile data';
|
|
|
|
@override
|
|
String get downloadSongLinkRegionDesc =>
|
|
'Region used when resolving track links via SongLink. Choose the country where your streaming services are available.';
|
|
|
|
@override
|
|
String get snackbarUnsupportedAudioFormat => 'Unsupported audio format';
|
|
|
|
@override
|
|
String get cacheRefresh => 'Refresh';
|
|
|
|
@override
|
|
String dialogDownloadPlaylistsMessage(int trackCount, int playlistCount) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
trackCount,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
String _temp1 = intl.Intl.pluralLogic(
|
|
playlistCount,
|
|
locale: localeName,
|
|
other: 'playlists',
|
|
one: 'playlist',
|
|
);
|
|
return 'Download $trackCount $_temp0 from $playlistCount $_temp1?';
|
|
}
|
|
|
|
@override
|
|
String bulkDownloadPlaylistsButton(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'playlists',
|
|
one: 'playlist',
|
|
);
|
|
return 'Download $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String get bulkDownloadSelectPlaylists => 'Select playlists to download';
|
|
|
|
@override
|
|
String get snackbarSelectedPlaylistsEmpty =>
|
|
'Selected playlists have no tracks';
|
|
|
|
@override
|
|
String playlistsCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count playlists',
|
|
one: '1 playlist',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get editMetadataAutoFill => 'Auto-fill from online';
|
|
|
|
@override
|
|
String get editMetadataAutoFillDesc =>
|
|
'Select fields to fill automatically from online metadata';
|
|
|
|
@override
|
|
String get editMetadataAutoFillFetch => 'Fetch & Fill';
|
|
|
|
@override
|
|
String get editMetadataAutoFillSearching => 'Searching online...';
|
|
|
|
@override
|
|
String get editMetadataAutoFillNoResults =>
|
|
'No matching metadata found online';
|
|
|
|
@override
|
|
String editMetadataAutoFillDone(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'fields',
|
|
one: 'field',
|
|
);
|
|
return 'Filled $count $_temp0 from online metadata';
|
|
}
|
|
|
|
@override
|
|
String get editMetadataAutoFillNoneSelected =>
|
|
'Select at least one field to auto-fill';
|
|
|
|
@override
|
|
String get editMetadataFieldTitle => 'Title';
|
|
|
|
@override
|
|
String get editMetadataFieldArtist => 'Artist';
|
|
|
|
@override
|
|
String get editMetadataFieldAlbum => 'Album';
|
|
|
|
@override
|
|
String get editMetadataFieldAlbumArtist => 'Album Artist';
|
|
|
|
@override
|
|
String get editMetadataFieldDate => 'Date';
|
|
|
|
@override
|
|
String get editMetadataFieldTrackNum => 'Track #';
|
|
|
|
@override
|
|
String get editMetadataFieldDiscNum => 'Disc #';
|
|
|
|
@override
|
|
String get editMetadataFieldGenre => 'Genre';
|
|
|
|
@override
|
|
String get editMetadataFieldIsrc => 'ISRC';
|
|
|
|
@override
|
|
String get editMetadataFieldLabel => 'Label';
|
|
|
|
@override
|
|
String get editMetadataFieldCopyright => 'Copyright';
|
|
|
|
@override
|
|
String get editMetadataFieldCover => 'Cover Art';
|
|
|
|
@override
|
|
String get editMetadataSelectAll => 'All';
|
|
|
|
@override
|
|
String get editMetadataSelectEmpty => 'Empty only';
|
|
|
|
@override
|
|
String queueDownloadingCount(int count) {
|
|
return 'Downloading ($count)';
|
|
}
|
|
|
|
@override
|
|
String get queueFilteringIndicator => 'Filtering...';
|
|
|
|
@override
|
|
String queueTrackCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count tracks',
|
|
one: '1 track',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String queueAlbumCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count albums',
|
|
one: '1 album',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get queueEmptyAlbums => 'No album downloads';
|
|
|
|
@override
|
|
String get queueEmptyAlbumsSubtitle =>
|
|
'Download multiple tracks from an album to see them here';
|
|
|
|
@override
|
|
String get queueEmptySingles => 'No single downloads';
|
|
|
|
@override
|
|
String get queueEmptySinglesSubtitle =>
|
|
'Single track downloads will appear here';
|
|
|
|
@override
|
|
String get queueEmptyHistory => 'No download history';
|
|
|
|
@override
|
|
String get queueEmptyHistorySubtitle => 'Downloaded tracks will appear here';
|
|
|
|
@override
|
|
String get selectionAllPlaylistsSelected => 'All playlists selected';
|
|
|
|
@override
|
|
String get selectionTapPlaylistsToSelect => 'Tap playlists to select';
|
|
|
|
@override
|
|
String get selectionSelectPlaylistsToDelete => 'Select playlists to delete';
|
|
|
|
@override
|
|
String get audioAnalysisTitle => 'Audio Quality Analysis';
|
|
|
|
@override
|
|
String get audioAnalysisDescription =>
|
|
'Verify lossless quality with spectrum analysis';
|
|
|
|
@override
|
|
String get audioAnalysisAnalyzing => 'Analyzing audio...';
|
|
|
|
@override
|
|
String get audioAnalysisSampleRate => 'Sample Rate';
|
|
|
|
@override
|
|
String get audioAnalysisCodec => 'Codec';
|
|
|
|
@override
|
|
String get audioAnalysisContainer => 'Container';
|
|
|
|
@override
|
|
String get audioAnalysisDecodedFormat => 'Decoded Format';
|
|
|
|
@override
|
|
String get audioAnalysisBitDepth => 'Bit Depth';
|
|
|
|
@override
|
|
String get audioAnalysisChannels => 'Channels';
|
|
|
|
@override
|
|
String get audioAnalysisDuration => 'Duration';
|
|
|
|
@override
|
|
String get audioAnalysisNyquist => 'Nyquist';
|
|
|
|
@override
|
|
String get audioAnalysisFileSize => 'Size';
|
|
|
|
@override
|
|
String get audioAnalysisDynamicRange => 'Dynamic Range';
|
|
|
|
@override
|
|
String get audioAnalysisPeak => 'Peak';
|
|
|
|
@override
|
|
String get audioAnalysisRms => 'RMS';
|
|
|
|
@override
|
|
String get audioAnalysisLufs => 'LUFS';
|
|
|
|
@override
|
|
String get audioAnalysisTruePeak => 'True Peak';
|
|
|
|
@override
|
|
String get audioAnalysisClipping => 'Clipping';
|
|
|
|
@override
|
|
String get audioAnalysisNoClipping => 'No clipping';
|
|
|
|
@override
|
|
String get audioAnalysisSpectralCutoff => 'Spectral Cutoff';
|
|
|
|
@override
|
|
String get audioAnalysisChannelStats => 'Per-channel Stats';
|
|
|
|
@override
|
|
String get audioAnalysisSamples => 'Samples';
|
|
|
|
@override
|
|
String get audioAnalysisRescan => 'Re-analyze';
|
|
|
|
@override
|
|
String get audioAnalysisRescanning => 'Re-analyzing audio...';
|
|
|
|
@override
|
|
String get extensionsHomeFeedProvider => 'Home Feed Provider';
|
|
|
|
@override
|
|
String get extensionsHomeFeedDescription =>
|
|
'Choose which extension provides the home feed on the main screen';
|
|
|
|
@override
|
|
String get extensionsHomeFeedAuto => 'Auto';
|
|
|
|
@override
|
|
String get extensionsHomeFeedAutoSubtitle =>
|
|
'Automatically select the best available';
|
|
|
|
@override
|
|
String get extensionsHomeFeedOff => 'Off';
|
|
|
|
@override
|
|
String get extensionsHomeFeedOffSubtitle =>
|
|
'Do not show the home feed on the main screen';
|
|
|
|
@override
|
|
String extensionsHomeFeedUse(String extensionName) {
|
|
return 'Use $extensionName home feed';
|
|
}
|
|
|
|
@override
|
|
String get extensionsNoHomeFeedExtensions => 'No extensions with home feed';
|
|
|
|
@override
|
|
String get cancelDownloadTitle => 'Cancel download?';
|
|
|
|
@override
|
|
String cancelDownloadContent(String trackName) {
|
|
return 'This will cancel the active download for \"$trackName\".';
|
|
}
|
|
|
|
@override
|
|
String get cancelDownloadKeep => 'Keep';
|
|
|
|
@override
|
|
String get metadataSaveFailedFfmpeg => 'Failed to save metadata via FFmpeg';
|
|
|
|
@override
|
|
String get metadataSaveFailedStorage =>
|
|
'Failed to write metadata back to storage';
|
|
|
|
@override
|
|
String snackbarFolderPickerFailed(String error) {
|
|
return 'Failed to open folder picker: $error';
|
|
}
|
|
|
|
@override
|
|
String notifDownloadingTrack(String trackName) {
|
|
return 'Downloading $trackName';
|
|
}
|
|
|
|
@override
|
|
String notifFinalizingTrack(String trackName) {
|
|
return 'Finalizing $trackName';
|
|
}
|
|
|
|
@override
|
|
String get notifEmbeddingMetadata => 'Embedding metadata...';
|
|
|
|
@override
|
|
String notifAlreadyInLibraryCount(int completed, int total) {
|
|
return 'Already in Library ($completed/$total)';
|
|
}
|
|
|
|
@override
|
|
String get notifAlreadyInLibrary => 'Already in Library';
|
|
|
|
@override
|
|
String notifDownloadCompleteCount(int completed, int total) {
|
|
return 'Download Complete ($completed/$total)';
|
|
}
|
|
|
|
@override
|
|
String get notifDownloadComplete => 'Download Complete';
|
|
|
|
@override
|
|
String notifDownloadsFinished(int completed, int failed) {
|
|
return 'Downloads Finished ($completed done, $failed failed)';
|
|
}
|
|
|
|
@override
|
|
String get notifVerificationRequiredTitle => 'Verification required';
|
|
|
|
@override
|
|
String get notifVerificationRequiredBody =>
|
|
'Open the app to complete verification and resume downloads';
|
|
|
|
@override
|
|
String get notifAllDownloadsComplete => 'All Downloads Complete';
|
|
|
|
@override
|
|
String notifTracksDownloadedSuccess(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count tracks downloaded successfully',
|
|
one: '1 track downloaded successfully',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String notifDownloadsFinishedBody(int completed, int failed) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
completed,
|
|
locale: localeName,
|
|
other: '$completed tracks downloaded',
|
|
one: '1 track downloaded',
|
|
);
|
|
String _temp1 = intl.Intl.pluralLogic(
|
|
failed,
|
|
locale: localeName,
|
|
other: '$failed failed',
|
|
one: '1 failed',
|
|
);
|
|
return '$_temp0, $_temp1';
|
|
}
|
|
|
|
@override
|
|
String get notifDownloadsCanceledTitle => 'Downloads canceled';
|
|
|
|
@override
|
|
String notifDownloadsCanceledBody(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count downloads canceled by user',
|
|
one: '1 download canceled by user',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get notifScanningLibrary => 'Scanning local library';
|
|
|
|
@override
|
|
String notifLibraryScanProgressWithTotal(
|
|
int scanned,
|
|
int total,
|
|
int percentage,
|
|
) {
|
|
return '$scanned/$total files • $percentage%';
|
|
}
|
|
|
|
@override
|
|
String notifLibraryScanProgressNoTotal(int scanned, int percentage) {
|
|
return '$scanned files scanned • $percentage%';
|
|
}
|
|
|
|
@override
|
|
String get notifLibraryScanComplete => 'Library scan complete';
|
|
|
|
@override
|
|
String notifLibraryScanCompleteBody(int count) {
|
|
return '$count tracks indexed';
|
|
}
|
|
|
|
@override
|
|
String notifLibraryScanExcluded(int count) {
|
|
return '$count excluded';
|
|
}
|
|
|
|
@override
|
|
String notifLibraryScanErrors(int count) {
|
|
return '$count errors';
|
|
}
|
|
|
|
@override
|
|
String get notifLibraryScanFailed => 'Library scan failed';
|
|
|
|
@override
|
|
String get notifLibraryScanCancelled => 'Library scan cancelled';
|
|
|
|
@override
|
|
String get notifLibraryScanStopped => 'Scan stopped before completion.';
|
|
|
|
@override
|
|
String notifDownloadingUpdate(String version) {
|
|
return 'Downloading SpotiFLAC Mobile v$version';
|
|
}
|
|
|
|
@override
|
|
String notifUpdateProgress(String received, String total, int percentage) {
|
|
return '$received / $total MB • $percentage%';
|
|
}
|
|
|
|
@override
|
|
String get notifUpdateReady => 'Update Ready';
|
|
|
|
@override
|
|
String notifUpdateReadyBody(String version) {
|
|
return 'SpotiFLAC Mobile v$version downloaded. Tap to install.';
|
|
}
|
|
|
|
@override
|
|
String get notifUpdateFailed => 'Update Failed';
|
|
|
|
@override
|
|
String get notifUpdateFailedBody =>
|
|
'Could not download update. Try again later.';
|
|
|
|
@override
|
|
String get searchTracks => 'Tracks';
|
|
|
|
@override
|
|
String get homeSearchHintDefault => 'Paste supported URL or search...';
|
|
|
|
@override
|
|
String homeSearchHintProvider(String providerName) {
|
|
return 'Search with $providerName...';
|
|
}
|
|
|
|
@override
|
|
String get homeImportCsvTooltip => 'Import CSV';
|
|
|
|
@override
|
|
String get homeChangeSearchProviderTooltip => 'Change search provider';
|
|
|
|
@override
|
|
String get actionPaste => 'Paste';
|
|
|
|
@override
|
|
String get tutorialSearchHint => 'Paste or search...';
|
|
|
|
@override
|
|
String get tutorialDownloadCompletedSemantics => 'Download completed';
|
|
|
|
@override
|
|
String get tutorialDownloadInProgressSemantics => 'Download in progress';
|
|
|
|
@override
|
|
String get tutorialStartDownloadSemantics => 'Start download';
|
|
|
|
@override
|
|
String get optionsEmbedMetadata => 'Embed Metadata';
|
|
|
|
@override
|
|
String get optionsEmbedMetadataSubtitleOn =>
|
|
'Write metadata, cover art, and embedded lyrics to files';
|
|
|
|
@override
|
|
String get optionsEmbedMetadataSubtitleOff =>
|
|
'Disabled (advanced): skip all metadata embedding';
|
|
|
|
@override
|
|
String get trackCoverNoEmbeddedArt => 'No embedded album art found';
|
|
|
|
@override
|
|
String get trackCoverReplace => 'Replace Cover';
|
|
|
|
@override
|
|
String get trackCoverPick => 'Pick Cover';
|
|
|
|
@override
|
|
String get trackCoverClearSelected => 'Clear selected cover';
|
|
|
|
@override
|
|
String get trackCoverCurrent => 'Current cover';
|
|
|
|
@override
|
|
String get trackCoverSelected => 'Selected cover';
|
|
|
|
@override
|
|
String get trackCoverReplaceNotice =>
|
|
'The selected cover will replace the current embedded cover when you tap Save.';
|
|
|
|
@override
|
|
String get actionStop => 'Stop';
|
|
|
|
@override
|
|
String get queueFinalizingDownload => 'Finalizing download';
|
|
|
|
@override
|
|
String get queueDownloadedFileMissing => 'Downloaded file missing';
|
|
|
|
@override
|
|
String get queueDownloadCompleted => 'Download completed';
|
|
|
|
@override
|
|
String get queueRateLimitTitle => 'Service rate limited';
|
|
|
|
@override
|
|
String get queueRateLimitMessage =>
|
|
'This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.';
|
|
|
|
@override
|
|
String appearanceSelectAccentColor(String hex) {
|
|
return 'Select accent color $hex';
|
|
}
|
|
|
|
@override
|
|
String get logAutoScrollOn => 'Auto-scroll ON';
|
|
|
|
@override
|
|
String get logAutoScrollOff => 'Auto-scroll OFF';
|
|
|
|
@override
|
|
String get logCopyLogs => 'Copy logs';
|
|
|
|
@override
|
|
String get logClearSearch => 'Clear search';
|
|
|
|
@override
|
|
String get logIssueIspBlockingLabel => 'ISP BLOCKING DETECTED';
|
|
|
|
@override
|
|
String get logIssueIspBlockingDescription =>
|
|
'Your ISP may be blocking access to download services';
|
|
|
|
@override
|
|
String get logIssueIspBlockingSuggestion =>
|
|
'Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8';
|
|
|
|
@override
|
|
String get logIssueRateLimitedLabel => 'RATE LIMITED';
|
|
|
|
@override
|
|
String get logIssueRateLimitedDescription =>
|
|
'Too many requests to the service';
|
|
|
|
@override
|
|
String get logIssueRateLimitedSuggestion =>
|
|
'Wait a few minutes before trying again';
|
|
|
|
@override
|
|
String get logIssueNetworkErrorLabel => 'NETWORK ERROR';
|
|
|
|
@override
|
|
String get logIssueNetworkErrorDescription => 'Connection issues detected';
|
|
|
|
@override
|
|
String get logIssueNetworkErrorSuggestion => 'Check your internet connection';
|
|
|
|
@override
|
|
String get logIssueTrackNotFoundLabel => 'TRACK NOT FOUND';
|
|
|
|
@override
|
|
String get logIssueTrackNotFoundDescription =>
|
|
'Some tracks could not be found on download services';
|
|
|
|
@override
|
|
String get logIssueTrackNotFoundSuggestion =>
|
|
'The track may not be available in lossless quality';
|
|
|
|
@override
|
|
String get clickableLookingUpArtist => 'Looking up artist...';
|
|
|
|
@override
|
|
String clickableInformationUnavailable(String type) {
|
|
return '$type information not available';
|
|
}
|
|
|
|
@override
|
|
String get extensionDetailsTags => 'Tags';
|
|
|
|
@override
|
|
String get extensionDetailsInformation => 'Information';
|
|
|
|
@override
|
|
String get extensionUtilityFunctions => 'Utility Functions';
|
|
|
|
@override
|
|
String get actionDismiss => 'Dismiss';
|
|
|
|
@override
|
|
String get setupChangeFolderTooltip => 'Change folder';
|
|
|
|
@override
|
|
String a11yOpenTrackByArtist(String trackName, String artistName) {
|
|
return 'Open track $trackName by $artistName';
|
|
}
|
|
|
|
@override
|
|
String a11yOpenItem(String itemType, String name) {
|
|
return 'Open $itemType $name';
|
|
}
|
|
|
|
@override
|
|
String a11yOpenItemCount(String title, int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'items',
|
|
one: 'item',
|
|
);
|
|
return 'Open $title, $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String a11yOpenAlbumByArtistTrackCount(
|
|
String albumName,
|
|
String artistName,
|
|
int trackCount,
|
|
) {
|
|
return 'Open album $albumName by $artistName, $trackCount tracks';
|
|
}
|
|
|
|
@override
|
|
String a11yTrackByArtist(String trackName, String artistName) {
|
|
return '$trackName by $artistName';
|
|
}
|
|
|
|
@override
|
|
String a11ySelectAlbum(String albumName) {
|
|
return 'Select album $albumName';
|
|
}
|
|
|
|
@override
|
|
String a11yOpenAlbum(String albumName) {
|
|
return 'Open album $albumName';
|
|
}
|
|
|
|
@override
|
|
String get settingsFiles => 'Files & Folders';
|
|
|
|
@override
|
|
String get settingsFilesSubtitle =>
|
|
'Download location, filename, folder structure';
|
|
|
|
@override
|
|
String get settingsMetadata => 'Metadata';
|
|
|
|
@override
|
|
String get settingsMetadataSubtitle =>
|
|
'Cover art, tags, ReplayGain, providers';
|
|
|
|
@override
|
|
String get settingsLyrics => 'Lyrics';
|
|
|
|
@override
|
|
String get settingsLyricsSubtitle =>
|
|
'Embed, mode, providers, language options';
|
|
|
|
@override
|
|
String get settingsApp => 'App';
|
|
|
|
@override
|
|
String get settingsAppSubtitle => 'Updates, data, extension repo, debug';
|
|
|
|
@override
|
|
String get sectionMetadataProviders => 'Providers';
|
|
|
|
@override
|
|
String get sectionDuplicates => 'Duplicates';
|
|
|
|
@override
|
|
String get sectionLyricsProviderOptions => 'Provider Options';
|
|
|
|
@override
|
|
String get metadataProvidersTitle => 'Metadata Provider Priority';
|
|
|
|
@override
|
|
String get metadataProvidersSubtitle =>
|
|
'Drag to set search and metadata source order';
|
|
|
|
@override
|
|
String get downloadDeduplication => 'Skip Duplicate Downloads';
|
|
|
|
@override
|
|
String get downloadDeduplicationEnabled =>
|
|
'Already-downloaded tracks will be skipped';
|
|
|
|
@override
|
|
String get downloadDeduplicationDisabled =>
|
|
'All tracks will be downloaded regardless of history';
|
|
|
|
@override
|
|
String get downloadFallbackExtensions => 'Fallback Extensions';
|
|
|
|
@override
|
|
String get downloadFallbackExtensionsSubtitle =>
|
|
'Choose which extensions can be used as fallback';
|
|
|
|
@override
|
|
String get editMetadataFieldDateHint => 'YYYY-MM-DD or YYYY';
|
|
|
|
@override
|
|
String get editMetadataFieldTrackTotal => 'Track Total';
|
|
|
|
@override
|
|
String get editMetadataFieldDiscTotal => 'Disc Total';
|
|
|
|
@override
|
|
String get editMetadataFieldComposer => 'Composer';
|
|
|
|
@override
|
|
String get editMetadataFieldComment => 'Comment';
|
|
|
|
@override
|
|
String get editMetadataAdvanced => 'Advanced';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingTrackNumber => 'Missing track number';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingDiscNumber => 'Missing disc number';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingArtist => 'Missing artist';
|
|
|
|
@override
|
|
String get libraryFilterMetadataIncorrectIsrcFormat =>
|
|
'Incorrect ISRC format';
|
|
|
|
@override
|
|
String get libraryFilterMetadataMissingLabel => 'Missing label';
|
|
|
|
@override
|
|
String collectionDeletePlaylistsMessage(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'playlists',
|
|
one: 'playlist',
|
|
);
|
|
return 'Delete $count $_temp0?';
|
|
}
|
|
|
|
@override
|
|
String collectionPlaylistsDeleted(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'playlists',
|
|
one: 'playlist',
|
|
);
|
|
return '$count $_temp0 deleted';
|
|
}
|
|
|
|
@override
|
|
String collectionAddedTracksToPlaylist(int count, String playlistName) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Added $count $_temp0 to $playlistName';
|
|
}
|
|
|
|
@override
|
|
String collectionAddedTracksToPlaylistWithExisting(
|
|
int count,
|
|
String playlistName,
|
|
int alreadyCount,
|
|
) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Added $count $_temp0 to $playlistName ($alreadyCount already in playlist)';
|
|
}
|
|
|
|
@override
|
|
String itemCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'items',
|
|
one: 'item',
|
|
);
|
|
return '$count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String trackReEnrichSuccessWithFailures(
|
|
int successCount,
|
|
int total,
|
|
int failedCount,
|
|
) {
|
|
return 'Metadata re-enriched successfully ($successCount/$total) - Failed: $failedCount';
|
|
}
|
|
|
|
@override
|
|
String selectionDeleteTracksCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Delete $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String queueDownloadSpeedStatus(String speed) {
|
|
return 'Downloading - $speed MB/s';
|
|
}
|
|
|
|
@override
|
|
String get queueDownloadStarting => 'Starting...';
|
|
|
|
@override
|
|
String get a11ySelectTrack => 'Select track';
|
|
|
|
@override
|
|
String get a11yDeselectTrack => 'Deselect track';
|
|
|
|
@override
|
|
String a11yPlayTrackByArtist(String trackName, String artistName) {
|
|
return 'Play $trackName by $artistName';
|
|
}
|
|
|
|
@override
|
|
String storeExtensionsCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'extensions',
|
|
one: 'extension',
|
|
);
|
|
return '$count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String storeRequiresVersion(String version) {
|
|
return 'Requires v$version+';
|
|
}
|
|
|
|
@override
|
|
String get actionGo => 'Go';
|
|
|
|
@override
|
|
String get logIssueSummary => 'Issue Summary';
|
|
|
|
@override
|
|
String logTotalErrors(int count) {
|
|
return 'Total errors: $count';
|
|
}
|
|
|
|
@override
|
|
String logAffectedDomains(String domains) {
|
|
return 'Affected: $domains';
|
|
}
|
|
|
|
@override
|
|
String get libraryScanCancelled => 'Scan cancelled';
|
|
|
|
@override
|
|
String get libraryScanCancelledSubtitle =>
|
|
'You can retry the scan when ready.';
|
|
|
|
@override
|
|
String libraryDownloadsHistoryExcluded(int count) {
|
|
return '$count from Downloads history (excluded from list)';
|
|
}
|
|
|
|
@override
|
|
String get downloadNativeWorker => 'Native download worker';
|
|
|
|
@override
|
|
String get downloadNativeWorkerSubtitle =>
|
|
'Beta Android service worker for extension downloads';
|
|
|
|
@override
|
|
String get badgeBeta => 'BETA';
|
|
|
|
@override
|
|
String get extensionServiceStatus => 'Service Status';
|
|
|
|
@override
|
|
String get extensionServiceHealth => 'Service health';
|
|
|
|
@override
|
|
String extensionHealthChecksConfigured(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'checks',
|
|
one: 'check',
|
|
);
|
|
return '$count $_temp0 configured';
|
|
}
|
|
|
|
@override
|
|
String get extensionOauthConnectHint =>
|
|
'Tap Connect to Spotify to fill this field.';
|
|
|
|
@override
|
|
String extensionLastChecked(String time) {
|
|
return 'Last checked $time';
|
|
}
|
|
|
|
@override
|
|
String get extensionRefreshStatus => 'Refresh status';
|
|
|
|
@override
|
|
String get extensionCustomUrlHandling => 'Custom URL Handling';
|
|
|
|
@override
|
|
String get extensionCustomUrlHandlingSubtitle =>
|
|
'This extension can handle links from these sites';
|
|
|
|
@override
|
|
String get extensionCustomUrlHandlingShareHint =>
|
|
'Share links from these sites to SpotiFLAC Mobile and this extension will handle them.';
|
|
|
|
@override
|
|
String extensionSettingsCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'settings',
|
|
one: 'setting',
|
|
);
|
|
return '$count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String get extensionHealthOnline => 'Online';
|
|
|
|
@override
|
|
String get extensionHealthDegraded => 'Degraded';
|
|
|
|
@override
|
|
String get extensionHealthOffline => 'Offline';
|
|
|
|
@override
|
|
String get extensionHealthNotConfigured => 'Not configured';
|
|
|
|
@override
|
|
String get extensionHealthUnknown => 'Unknown';
|
|
|
|
@override
|
|
String get extensionHealthRequired => 'required';
|
|
|
|
@override
|
|
String get extensionSettingNotSet => 'Not set';
|
|
|
|
@override
|
|
String get extensionActionFailed => 'Action failed';
|
|
|
|
@override
|
|
String get extensionEnterValue => 'Enter value';
|
|
|
|
@override
|
|
String get extensionHealthServiceOnline => 'Service online';
|
|
|
|
@override
|
|
String get extensionHealthServiceDegraded => 'Service degraded';
|
|
|
|
@override
|
|
String get extensionHealthServiceOffline => 'Service offline';
|
|
|
|
@override
|
|
String get extensionHealthServiceUnknown => 'Service status unknown';
|
|
|
|
@override
|
|
String get audioAnalysisStereo => 'Stereo';
|
|
|
|
@override
|
|
String get audioAnalysisMono => 'Mono';
|
|
|
|
@override
|
|
String trackOpenInService(String serviceName) {
|
|
return 'Open in $serviceName';
|
|
}
|
|
|
|
@override
|
|
String get trackLyricsEmbeddedSource => 'Embedded';
|
|
|
|
@override
|
|
String get unknownAlbum => 'Unknown Album';
|
|
|
|
@override
|
|
String get unknownArtist => 'Unknown Artist';
|
|
|
|
@override
|
|
String get permissionAudio => 'Audio';
|
|
|
|
@override
|
|
String get permissionStorage => 'Storage';
|
|
|
|
@override
|
|
String get permissionNotification => 'Notification';
|
|
|
|
@override
|
|
String get errorInvalidFolderSelected => 'Invalid folder selected';
|
|
|
|
@override
|
|
String get storeAnyVersion => 'Any';
|
|
|
|
@override
|
|
String get storeCategoryMetadata => 'Metadata';
|
|
|
|
@override
|
|
String get storeCategoryDownload => 'Download';
|
|
|
|
@override
|
|
String get storeCategoryUtility => 'Utility';
|
|
|
|
@override
|
|
String get storeCategoryLyrics => 'Lyrics';
|
|
|
|
@override
|
|
String get storeCategoryIntegration => 'Integration';
|
|
|
|
@override
|
|
String get artistReleases => 'Releases';
|
|
|
|
@override
|
|
String get editMetadataSelectNone => 'None';
|
|
|
|
@override
|
|
String queueRetryAllFailed(int count) {
|
|
return 'Retry $count failed';
|
|
}
|
|
|
|
@override
|
|
String get settingsSaveDownloadHistory => 'Save download history';
|
|
|
|
@override
|
|
String get settingsSaveDownloadHistorySubtitle =>
|
|
'Keep completed downloads in history and library views';
|
|
|
|
@override
|
|
String get dialogDisableHistoryTitle => 'Turn off download history?';
|
|
|
|
@override
|
|
String get dialogDisableHistoryMessage =>
|
|
'Existing history will be cleared. Downloaded files will not be deleted.';
|
|
|
|
@override
|
|
String get dialogDisableAndClear => 'Turn off and clear';
|
|
|
|
@override
|
|
String get openInOtherServices => 'Open in Other Services';
|
|
|
|
@override
|
|
String get shareSheetNoExtensions => 'No other compatible services';
|
|
|
|
@override
|
|
String get shareSheetNotFound => 'Not found';
|
|
|
|
@override
|
|
String get shareSheetCopyLink => 'Copy Link';
|
|
|
|
@override
|
|
String shareSheetLinkCopied(Object service) {
|
|
return '$service link copied';
|
|
}
|
|
|
|
@override
|
|
String get libraryPlayback => 'Playback';
|
|
|
|
@override
|
|
String get libraryExternalPlayer => 'External player';
|
|
|
|
@override
|
|
String get libraryExternalPlayerSubtitle =>
|
|
'Recommended for listening, best quality, gapless playback, EQ, and wider format support';
|
|
|
|
@override
|
|
String get libraryBuiltInPreviewPlayer => 'Built-in preview player';
|
|
|
|
@override
|
|
String get libraryBuiltInPreviewPlayerSubtitle =>
|
|
'Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening';
|
|
|
|
@override
|
|
String get libraryBuiltInPlayerInfo =>
|
|
'The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.';
|
|
|
|
@override
|
|
String get nowPlayingTitle => 'Now Playing';
|
|
|
|
@override
|
|
String get nowPlayingNothingPlaying => 'Nothing is playing';
|
|
|
|
@override
|
|
String get nowPlayingMinimize => 'Minimize';
|
|
|
|
@override
|
|
String get nowPlayingUpNext => 'Up next';
|
|
|
|
@override
|
|
String get nowPlayingDetails => 'Details';
|
|
|
|
@override
|
|
String get nowPlayingOpenInExternalPlayer => 'Open in external player';
|
|
|
|
@override
|
|
String get nowPlayingTabPlayer => 'Player';
|
|
|
|
@override
|
|
String get nowPlayingTabLyrics => 'Lyrics';
|
|
|
|
@override
|
|
String get nowPlayingNoLyrics => 'No lyrics in this file';
|
|
|
|
@override
|
|
String get nowPlayingLibraryEmpty => 'Your library is empty';
|
|
|
|
@override
|
|
String nowPlayingShuffleLibraryFailed(String error) {
|
|
return 'Could not shuffle library: $error';
|
|
}
|
|
|
|
@override
|
|
String get nowPlayingShuffleOn => 'Shuffle on';
|
|
|
|
@override
|
|
String get nowPlayingPlayInOrder => 'Play in order';
|
|
|
|
@override
|
|
String get nowPlayingShuffleLibrary => 'Shuffle library';
|
|
|
|
@override
|
|
String get nowPlayingQueueEmpty => 'Queue is empty';
|
|
|
|
@override
|
|
String get nowPlayingNoMetadata => 'No metadata available';
|
|
|
|
@override
|
|
String get announcementUnableToOpenLink =>
|
|
'Unable to open link. Please try again.';
|
|
|
|
@override
|
|
String trackConvertLosslessOutputWithCap(String quality) {
|
|
return 'Lossless output with $quality cap';
|
|
}
|
|
|
|
@override
|
|
String trackConvertConfirmMessageLosslessCapped(
|
|
String sourceFormat,
|
|
String targetFormat,
|
|
String quality,
|
|
) {
|
|
return 'Convert from $sourceFormat to $targetFormat ($quality)?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.';
|
|
}
|
|
|
|
@override
|
|
String selectionBatchConvertConfirmMessageLosslessCapped(
|
|
int count,
|
|
String format,
|
|
String quality,
|
|
) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'tracks',
|
|
one: 'track',
|
|
);
|
|
return 'Convert $count $_temp0 to $format ($quality)?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.';
|
|
}
|
|
|
|
@override
|
|
String trackConvertActionLabelLossless(
|
|
String sourceFormat,
|
|
String targetFormat,
|
|
String quality,
|
|
) {
|
|
return '$sourceFormat → $targetFormat ($quality)';
|
|
}
|
|
|
|
@override
|
|
String trackConvertActionLabelLossy(
|
|
String sourceFormat,
|
|
String targetFormat,
|
|
String bitrate,
|
|
) {
|
|
return '$sourceFormat → $targetFormat @ $bitrate';
|
|
}
|
|
|
|
@override
|
|
String get aboutPaxsenixSubtitle =>
|
|
'Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius';
|
|
|
|
@override
|
|
String get snackbarPlayingNext => 'Playing next';
|
|
|
|
@override
|
|
String get snackbarAddedToQueueGeneric => 'Added to queue';
|
|
|
|
@override
|
|
String selectionDeletePlaylistsCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'playlists',
|
|
one: 'playlist',
|
|
);
|
|
return 'Delete $count $_temp0';
|
|
}
|
|
|
|
@override
|
|
String get actionShuffle => 'Shuffle';
|
|
|
|
@override
|
|
String get downloadPrimaryArtistOnlyOn => 'Primary only: On';
|
|
|
|
@override
|
|
String get downloadPrimaryArtistOnlyOff => 'Primary only: Off';
|
|
|
|
@override
|
|
String get downloadAlbumArtistMetadataPrimaryOnly =>
|
|
'Album Artist metadata: Primary only';
|
|
|
|
@override
|
|
String get downloadAlbumArtistMetadataFull => 'Album Artist metadata: Full';
|
|
|
|
@override
|
|
String get trackConvertOriginal => 'Original';
|
|
|
|
@override
|
|
String get trackConvertOriginalQuality => 'Original quality';
|
|
|
|
@override
|
|
String get trackConvertLosslessSuffix => 'Lossless';
|
|
|
|
@override
|
|
String get trackConvertDithering => 'Dithering';
|
|
|
|
@override
|
|
String get trackConvertResampler => 'Resampler';
|
|
|
|
@override
|
|
String get trackConvertDitherNone => 'None';
|
|
|
|
@override
|
|
String get trackConvertDitherTriangular => 'TPDF';
|
|
|
|
@override
|
|
String get trackConvertDitherTriangularHp => 'Triangular HP';
|
|
|
|
@override
|
|
String get trackConvertResamplerSwr => 'SWR';
|
|
|
|
@override
|
|
String get trackConvertResamplerSoxr => 'SoXr';
|
|
|
|
@override
|
|
String get updateSeeReleaseNotes => 'See release notes for details.';
|
|
|
|
@override
|
|
String get unknownTitle => 'Unknown title';
|
|
|
|
@override
|
|
String get trackPlayNext => 'Play next';
|
|
|
|
@override
|
|
String get trackAddToQueue => 'Add to queue';
|
|
|
|
@override
|
|
String snackbarExtensionInstalledEnable(String extensionName) {
|
|
return '$extensionName installed. Enable it in Settings > Extensions';
|
|
}
|
|
|
|
@override
|
|
String snackbarExtensionUpdatedVersion(String extensionName, String version) {
|
|
return '$extensionName updated to v$version';
|
|
}
|
|
|
|
@override
|
|
String snackbarFailedToInstallNamed(String extensionName) {
|
|
return 'Failed to install $extensionName';
|
|
}
|
|
|
|
@override
|
|
String snackbarFailedToUpdateNamed(String extensionName) {
|
|
return 'Failed to update $extensionName';
|
|
}
|
|
|
|
@override
|
|
String get releaseTypeEp => 'EP';
|
|
|
|
@override
|
|
String get releaseTypeSingle => 'Single';
|
|
|
|
@override
|
|
String get trackCoverOnline => 'Online cover';
|
|
|
|
@override
|
|
String get regionCountryUS => 'United States';
|
|
|
|
@override
|
|
String get regionCountryGB => 'United Kingdom';
|
|
|
|
@override
|
|
String get regionCountryFR => 'France';
|
|
|
|
@override
|
|
String get regionCountryDE => 'Germany';
|
|
|
|
@override
|
|
String get regionCountryJP => 'Japan';
|
|
|
|
@override
|
|
String get regionCountryKR => 'South Korea';
|
|
|
|
@override
|
|
String get regionCountryIN => 'India';
|
|
|
|
@override
|
|
String get regionCountryID => 'Indonesia';
|
|
|
|
@override
|
|
String get regionCountryBR => 'Brazil';
|
|
|
|
@override
|
|
String get regionCountryMX => 'Mexico';
|
|
|
|
@override
|
|
String get regionCountryAU => 'Australia';
|
|
|
|
@override
|
|
String get regionCountryCA => 'Canada';
|
|
|
|
@override
|
|
String get regionCountryXK => 'Kosovo';
|
|
|
|
@override
|
|
String get extensionVerificationBrowserTitle => 'Verification browser';
|
|
|
|
@override
|
|
String get extensionVerificationBrowserSubtitleExternal =>
|
|
'Open challenges in the default browser first';
|
|
|
|
@override
|
|
String get extensionVerificationBrowserSubtitleInApp =>
|
|
'Open challenges in the in-app browser first';
|
|
|
|
@override
|
|
String get extensionVerificationBrowserExternal => 'External';
|
|
|
|
@override
|
|
String get extensionVerificationBrowserInApp => 'In-app';
|
|
|
|
@override
|
|
String get extensionVerificationHelpTitleManual =>
|
|
'Open verification manually';
|
|
|
|
@override
|
|
String get extensionVerificationHelpTitleWaiting =>
|
|
'Verification still waiting';
|
|
|
|
@override
|
|
String get extensionVerificationHelpMessageManual =>
|
|
'SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.';
|
|
|
|
@override
|
|
String get extensionVerificationHelpMessageWaiting =>
|
|
'If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.';
|
|
|
|
@override
|
|
String get extensionVerificationClose => 'Close';
|
|
|
|
@override
|
|
String get extensionVerificationCopyLink => 'Copy link';
|
|
|
|
@override
|
|
String get extensionVerificationLinkCopied => 'Verification link copied';
|
|
|
|
@override
|
|
String get extensionVerificationOpenBrowser => 'Open browser';
|
|
}
|