From a827ebf6f407a975d25e4910667acc7f32324cb2 Mon Sep 17 00:00:00 2001 From: zarzet Date: Tue, 30 Jun 2026 03:40:13 +0700 Subject: [PATCH] l10n: add localization keys for hardcoded UI strings Add English template strings and Indonesian translations for playback, audio conversion, library settings, metadata actions, store snackbars, SongLink region names, and other previously hardcoded user-facing text. Regenerate AppLocalizations from the updated ARB files. --- lib/l10n/app_localizations.dart | 400 +++++++++++++++++++++++++++++ lib/l10n/app_localizations_ar.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_de.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_en.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_es.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_fr.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_hi.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_id.dart | 249 ++++++++++++++++++ lib/l10n/app_localizations_ja.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_ko.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_nl.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_pt.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_ru.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_tr.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_uk.dart | 248 ++++++++++++++++++ lib/l10n/app_localizations_zh.dart | 248 ++++++++++++++++++ lib/l10n/arb/app_en.arb | 338 ++++++++++++++++++++++++ lib/l10n/arb/app_id.arb | 338 ++++++++++++++++++++++++ 18 files changed, 4797 insertions(+) diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index e8faad8b..2223ca4e 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -7350,6 +7350,406 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'{service} link copied'** String shareSheetLinkCopied(Object service); + + /// Section header for playback settings in library settings + /// + /// In en, this message translates to: + /// **'Playback'** + String get libraryPlayback; + + /// Setting option to use an external music player + /// + /// In en, this message translates to: + /// **'External player'** + String get libraryExternalPlayer; + + /// Subtitle for external player option + /// + /// In en, this message translates to: + /// **'Recommended for listening, best quality, gapless playback, EQ, and wider format support'** + String get libraryExternalPlayerSubtitle; + + /// Setting option to use the built-in preview player + /// + /// In en, this message translates to: + /// **'Built-in preview player'** + String get libraryBuiltInPreviewPlayer; + + /// Subtitle for built-in preview player option + /// + /// In en, this message translates to: + /// **'Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening'** + String get libraryBuiltInPreviewPlayerSubtitle; + + /// Info note explaining the built-in player is for previews only + /// + /// In en, this message translates to: + /// **'The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.'** + String get libraryBuiltInPlayerInfo; + + /// Title for the now playing screen + /// + /// In en, this message translates to: + /// **'Now Playing'** + String get nowPlayingTitle; + + /// Empty state when no track is currently playing + /// + /// In en, this message translates to: + /// **'Nothing is playing'** + String get nowPlayingNothingPlaying; + + /// Tooltip for minimizing the now playing screen + /// + /// In en, this message translates to: + /// **'Minimize'** + String get nowPlayingMinimize; + + /// Title for the playback queue sheet + /// + /// In en, this message translates to: + /// **'Up next'** + String get nowPlayingUpNext; + + /// Menu item and section title for track metadata details + /// + /// In en, this message translates to: + /// **'Details'** + String get nowPlayingDetails; + + /// Menu item to open the current track in an external player + /// + /// In en, this message translates to: + /// **'Open in external player'** + String get nowPlayingOpenInExternalPlayer; + + /// Tab label for the player view + /// + /// In en, this message translates to: + /// **'Player'** + String get nowPlayingTabPlayer; + + /// Tab label for the lyrics view + /// + /// In en, this message translates to: + /// **'Lyrics'** + String get nowPlayingTabLyrics; + + /// Empty state when the playing file has no embedded lyrics + /// + /// In en, this message translates to: + /// **'No lyrics in this file'** + String get nowPlayingNoLyrics; + + /// Snackbar when shuffle library is requested but library has no tracks + /// + /// In en, this message translates to: + /// **'Your library is empty'** + String get nowPlayingLibraryEmpty; + + /// Snackbar when shuffling the library fails + /// + /// In en, this message translates to: + /// **'Could not shuffle library: {error}'** + String nowPlayingShuffleLibraryFailed(String error); + + /// Tooltip when shuffle mode is enabled + /// + /// In en, this message translates to: + /// **'Shuffle on'** + String get nowPlayingShuffleOn; + + /// Tooltip when shuffle mode is disabled + /// + /// In en, this message translates to: + /// **'Play in order'** + String get nowPlayingPlayInOrder; + + /// Button label to shuffle and play the entire local library + /// + /// In en, this message translates to: + /// **'Shuffle library'** + String get nowPlayingShuffleLibrary; + + /// Empty state when the playback queue has no items + /// + /// In en, this message translates to: + /// **'Queue is empty'** + String get nowPlayingQueueEmpty; + + /// Empty state when track metadata cannot be loaded + /// + /// In en, this message translates to: + /// **'No metadata available'** + String get nowPlayingNoMetadata; + + /// Snackbar shown when an announcement CTA link cannot be opened + /// + /// In en, this message translates to: + /// **'Unable to open link. Please try again.'** + String get announcementUnableToOpenLink; + + /// Hint shown when lossless conversion will cap bit depth or sample rate + /// + /// In en, this message translates to: + /// **'Lossless output with {quality} cap'** + String trackConvertLosslessOutputWithCap(String quality); + + /// Confirmation dialog message for capped lossless conversion of a single file + /// + /// In en, this message translates to: + /// **'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.'** + String trackConvertConfirmMessageLosslessCapped( + String sourceFormat, + String targetFormat, + String quality, + ); + + /// Confirmation dialog message for capped lossless batch conversion + /// + /// In en, this message translates to: + /// **'Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.'** + String selectionBatchConvertConfirmMessageLosslessCapped( + int count, + String format, + String quality, + ); + + /// Convert button label for lossless conversion with quality cap + /// + /// In en, this message translates to: + /// **'{sourceFormat} → {targetFormat} ({quality})'** + String trackConvertActionLabelLossless( + String sourceFormat, + String targetFormat, + String quality, + ); + + /// Convert button label for lossy conversion + /// + /// In en, this message translates to: + /// **'{sourceFormat} → {targetFormat} @ {bitrate}'** + String trackConvertActionLabelLossy( + String sourceFormat, + String targetFormat, + String bitrate, + ); + + /// Subtitle for Paxsenix special thanks entry on the about page + /// + /// In en, this message translates to: + /// **'Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius'** + String get aboutPaxsenixSubtitle; + + /// Snackbar when a track is inserted as the next queue item + /// + /// In en, this message translates to: + /// **'Playing next'** + String get snackbarPlayingNext; + + /// Snackbar when a track is added to the playback queue without naming it + /// + /// In en, this message translates to: + /// **'Added to queue'** + String get snackbarAddedToQueueGeneric; + + /// Button label for deleting multiple selected playlists + /// + /// In en, this message translates to: + /// **'Delete {count} {count, plural, =1{playlist} other{playlists}}'** + String selectionDeletePlaylistsCount(int count); + + /// Tooltip for shuffle playback action + /// + /// In en, this message translates to: + /// **'Shuffle'** + String get actionShuffle; + + /// Status label when primary-artist-only folder naming is enabled + /// + /// In en, this message translates to: + /// **'Primary only: On'** + String get downloadPrimaryArtistOnlyOn; + + /// Status label when primary-artist-only folder naming is disabled + /// + /// In en, this message translates to: + /// **'Primary only: Off'** + String get downloadPrimaryArtistOnlyOff; + + /// Status label when album-artist folder filtering uses primary artist only + /// + /// In en, this message translates to: + /// **'Album Artist metadata: Primary only'** + String get downloadAlbumArtistMetadataPrimaryOnly; + + /// Status label when album-artist folder filtering uses full metadata + /// + /// In en, this message translates to: + /// **'Album Artist metadata: Full'** + String get downloadAlbumArtistMetadataFull; + + /// Label for keeping original bit depth or sample rate during conversion + /// + /// In en, this message translates to: + /// **'Original'** + String get trackConvertOriginal; + + /// Label when no bit depth or sample rate cap is applied during lossless conversion + /// + /// In en, this message translates to: + /// **'Original quality'** + String get trackConvertOriginalQuality; + + /// Suffix used in converted lossless quality labels + /// + /// In en, this message translates to: + /// **'Lossless'** + String get trackConvertLosslessSuffix; + + /// Fallback changelog text when release notes cannot be parsed + /// + /// In en, this message translates to: + /// **'See release notes for details.'** + String get updateSeeReleaseNotes; + + /// Fallback track title when metadata is missing + /// + /// In en, this message translates to: + /// **'Unknown title'** + String get unknownTitle; + + /// Menu action to play a track as the next queue item + /// + /// In en, this message translates to: + /// **'Play next'** + String get trackPlayNext; + + /// Menu action to add a track to the playback queue + /// + /// In en, this message translates to: + /// **'Add to queue'** + String get trackAddToQueue; + + /// Snackbar after installing an extension from the repo tab + /// + /// In en, this message translates to: + /// **'{extensionName} installed. Enable it in Settings > Extensions'** + String snackbarExtensionInstalledEnable(String extensionName); + + /// Snackbar after updating an extension from the repo tab + /// + /// In en, this message translates to: + /// **'{extensionName} updated to v{version}'** + String snackbarExtensionUpdatedVersion(String extensionName, String version); + + /// Snackbar when extension install fails in the repo tab + /// + /// In en, this message translates to: + /// **'Failed to install {extensionName}'** + String snackbarFailedToInstallNamed(String extensionName); + + /// Snackbar when extension update fails in the repo tab + /// + /// In en, this message translates to: + /// **'Failed to update {extensionName}'** + String snackbarFailedToUpdateNamed(String extensionName); + + /// Badge label for EP releases + /// + /// In en, this message translates to: + /// **'EP'** + String get releaseTypeEp; + + /// Badge label for single releases + /// + /// In en, this message translates to: + /// **'Single'** + String get releaseTypeSingle; + + /// Label shown when metadata autofill downloaded cover art from the internet + /// + /// In en, this message translates to: + /// **'Online cover'** + String get trackCoverOnline; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'United States'** + String get regionCountryUS; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'United Kingdom'** + String get regionCountryGB; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'France'** + String get regionCountryFR; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Germany'** + String get regionCountryDE; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Japan'** + String get regionCountryJP; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'South Korea'** + String get regionCountryKR; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'India'** + String get regionCountryIN; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Indonesia'** + String get regionCountryID; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Brazil'** + String get regionCountryBR; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Mexico'** + String get regionCountryMX; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Australia'** + String get regionCountryAU; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Canada'** + String get regionCountryCA; + + /// Country name for SongLink region picker + /// + /// In en, this message translates to: + /// **'Kosovo'** + String get regionCountryXK; } class _AppLocalizationsDelegate diff --git a/lib/l10n/app_localizations_ar.dart b/lib/l10n/app_localizations_ar.dart index e4c8d6e0..0c3f4901 100644 --- a/lib/l10n/app_localizations_ar.dart +++ b/lib/l10n/app_localizations_ar.dart @@ -4456,4 +4456,252 @@ class AppLocalizationsAr extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 7e633828..3b4d9e6d 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -4505,4 +4505,252 @@ class AppLocalizationsDe extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 1c00659c..69895634 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -4456,4 +4456,252 @@ class AppLocalizationsEn extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index 96886123..5f9e36d7 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -4450,6 +4450,254 @@ class AppLocalizationsEs extends AppLocalizations { 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 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'; } /// The translations for Spanish Castilian, as used in Spain (`es_ES`). diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 1538dca5..4e85e23f 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -4570,4 +4570,252 @@ class AppLocalizationsFr extends AppLocalizations { String shareSheetLinkCopied(Object service) { return 'Lien $service copié'; } + + @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 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'; } diff --git a/lib/l10n/app_localizations_hi.dart b/lib/l10n/app_localizations_hi.dart index d5ebc42e..d9ad9a7b 100644 --- a/lib/l10n/app_localizations_hi.dart +++ b/lib/l10n/app_localizations_hi.dart @@ -4456,4 +4456,252 @@ class AppLocalizationsHi extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_id.dart b/lib/l10n/app_localizations_id.dart index 930600fd..ebcb3426 100644 --- a/lib/l10n/app_localizations_id.dart +++ b/lib/l10n/app_localizations_id.dart @@ -4439,4 +4439,253 @@ class AppLocalizationsId extends AppLocalizations { String shareSheetLinkCopied(Object service) { return '$service link copied'; } + + @override + String get libraryPlayback => 'Pemutaran'; + + @override + String get libraryExternalPlayer => 'Pemutar eksternal'; + + @override + String get libraryExternalPlayerSubtitle => + 'Disarankan untuk mendengarkan, kualitas terbaik, pemutaran tanpa jeda, EQ, dan dukungan format lebih luas'; + + @override + String get libraryBuiltInPreviewPlayer => 'Pemutar pratinjau bawaan'; + + @override + String get libraryBuiltInPreviewPlayerSubtitle => + 'Hanya untuk pratinjau lokal cepat di dalam SpotiFLAC Mobile, tidak disarankan untuk mendengarkan secara rutin'; + + @override + String get libraryBuiltInPlayerInfo => + 'Pemutar bawaan adalah alat pratinjau untuk memeriksa trek lokal dengan cepat. Gunakan pemutar musik eksternal untuk mendengarkan sebenarnya.'; + + @override + String get nowPlayingTitle => 'Sedang Diputar'; + + @override + String get nowPlayingNothingPlaying => 'Tidak ada yang diputar'; + + @override + String get nowPlayingMinimize => 'Minimalkan'; + + @override + String get nowPlayingUpNext => 'Berikutnya'; + + @override + String get nowPlayingDetails => 'Detail'; + + @override + String get nowPlayingOpenInExternalPlayer => 'Buka di pemutar eksternal'; + + @override + String get nowPlayingTabPlayer => 'Pemutar'; + + @override + String get nowPlayingTabLyrics => 'Lirik'; + + @override + String get nowPlayingNoLyrics => 'Tidak ada lirik di file ini'; + + @override + String get nowPlayingLibraryEmpty => 'Perpustakaan Anda kosong'; + + @override + String nowPlayingShuffleLibraryFailed(String error) { + return 'Tidak dapat mengacak perpustakaan: $error'; + } + + @override + String get nowPlayingShuffleOn => 'Acak aktif'; + + @override + String get nowPlayingPlayInOrder => 'Putar berurutan'; + + @override + String get nowPlayingShuffleLibrary => 'Acak perpustakaan'; + + @override + String get nowPlayingQueueEmpty => 'Antrean kosong'; + + @override + String get nowPlayingNoMetadata => 'Metadata tidak tersedia'; + + @override + String get announcementUnableToOpenLink => + 'Tidak dapat membuka tautan. Silakan coba lagi.'; + + @override + String trackConvertLosslessOutputWithCap(String quality) { + return 'Output lossless dengan batas $quality'; + } + + @override + String trackConvertConfirmMessageLosslessCapped( + String sourceFormat, + String targetFormat, + String quality, + ) { + return 'Konversi dari $sourceFormat ke $targetFormat ($quality)?\n\nOutput tetap codec lossless, tetapi kedalaman bit/sample rate akan dibatasi. File asli akan dihapus setelah konversi.'; + } + + @override + String selectionBatchConvertConfirmMessageLosslessCapped( + int count, + String format, + String quality, + ) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'trek', + one: 'trek', + ); + return 'Konversi $count $_temp0 ke $format ($quality)?\n\nOutput tetap codec lossless, tetapi kedalaman bit/sample rate akan dibatasi. File asli akan dihapus setelah konversi.'; + } + + @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 => + 'Proxy lirik untuk Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, dan Genius'; + + @override + String get snackbarPlayingNext => 'Memutar berikutnya'; + + @override + String get snackbarAddedToQueueGeneric => 'Ditambahkan ke antrean'; + + @override + String selectionDeletePlaylistsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'playlist', + one: 'playlist', + ); + return 'Hapus $count $_temp0'; + } + + @override + String get actionShuffle => 'Acak'; + + @override + String get downloadPrimaryArtistOnlyOn => 'Hanya utama: Aktif'; + + @override + String get downloadPrimaryArtistOnlyOff => 'Hanya utama: Nonaktif'; + + @override + String get downloadAlbumArtistMetadataPrimaryOnly => + 'Metadata Album Artist: Hanya utama'; + + @override + String get downloadAlbumArtistMetadataFull => + 'Metadata Album Artist: Lengkap'; + + @override + String get trackConvertOriginal => 'Asli'; + + @override + String get trackConvertOriginalQuality => 'Kualitas asli'; + + @override + String get trackConvertLosslessSuffix => 'Lossless'; + + @override + String get updateSeeReleaseNotes => 'Lihat catatan rilis untuk detail.'; + + @override + String get unknownTitle => 'Judul tidak diketahui'; + + @override + String get trackPlayNext => 'Putar berikutnya'; + + @override + String get trackAddToQueue => 'Tambah ke antrean'; + + @override + String snackbarExtensionInstalledEnable(String extensionName) { + return '$extensionName terpasang. Aktifkan di Pengaturan > Ekstensi'; + } + + @override + String snackbarExtensionUpdatedVersion(String extensionName, String version) { + return '$extensionName diperbarui ke v$version'; + } + + @override + String snackbarFailedToInstallNamed(String extensionName) { + return 'Gagal memasang $extensionName'; + } + + @override + String snackbarFailedToUpdateNamed(String extensionName) { + return 'Gagal memperbarui $extensionName'; + } + + @override + String get releaseTypeEp => 'EP'; + + @override + String get releaseTypeSingle => 'Single'; + + @override + String get trackCoverOnline => 'Sampul daring'; + + @override + String get regionCountryUS => 'Amerika Serikat'; + + @override + String get regionCountryGB => 'Britania Raya'; + + @override + String get regionCountryFR => 'Prancis'; + + @override + String get regionCountryDE => 'Jerman'; + + @override + String get regionCountryJP => 'Jepang'; + + @override + String get regionCountryKR => 'Korea Selatan'; + + @override + String get regionCountryIN => 'India'; + + @override + String get regionCountryID => 'Indonesia'; + + @override + String get regionCountryBR => 'Brasil'; + + @override + String get regionCountryMX => 'Meksiko'; + + @override + String get regionCountryAU => 'Australia'; + + @override + String get regionCountryCA => 'Kanada'; + + @override + String get regionCountryXK => 'Kosovo'; } diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart index 45e247ba..2068ca94 100644 --- a/lib/l10n/app_localizations_ja.dart +++ b/lib/l10n/app_localizations_ja.dart @@ -4443,4 +4443,252 @@ class AppLocalizationsJa extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart index ba841dc1..534d1cbd 100644 --- a/lib/l10n/app_localizations_ko.dart +++ b/lib/l10n/app_localizations_ko.dart @@ -4441,4 +4441,252 @@ class AppLocalizationsKo extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_nl.dart b/lib/l10n/app_localizations_nl.dart index 9d607dc3..a2fc14e9 100644 --- a/lib/l10n/app_localizations_nl.dart +++ b/lib/l10n/app_localizations_nl.dart @@ -4456,4 +4456,252 @@ class AppLocalizationsNl extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index 9ea7ef24..da880206 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -4450,6 +4450,254 @@ class AppLocalizationsPt extends AppLocalizations { 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 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'; } /// The translations for Portuguese, as used in Portugal (`pt_PT`). diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index 7a0d7f76..4ce37c0e 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -4512,4 +4512,252 @@ class AppLocalizationsRu extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart index c870fc1c..5f2a3055 100644 --- a/lib/l10n/app_localizations_tr.dart +++ b/lib/l10n/app_localizations_tr.dart @@ -4487,4 +4487,252 @@ class AppLocalizationsTr extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_uk.dart b/lib/l10n/app_localizations_uk.dart index 19856819..72696b94 100644 --- a/lib/l10n/app_localizations_uk.dart +++ b/lib/l10n/app_localizations_uk.dart @@ -4509,4 +4509,252 @@ class AppLocalizationsUk extends AppLocalizations { 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 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'; } diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index 705fa178..1661834d 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -4450,6 +4450,254 @@ class AppLocalizationsZh extends AppLocalizations { 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 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'; } /// The translations for Chinese, as used in China (`zh_CN`). diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index e3c2bdf9..913f8f5f 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -5786,5 +5786,343 @@ "placeholders": { "service": {} } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index d9179955..425809e7 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -5630,5 +5630,343 @@ "artistReleases": "Releases", "@artistReleases": { "description": "Section header for all artist releases" + }, + "libraryPlayback": "Pemutaran", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "Pemutar eksternal", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Disarankan untuk mendengarkan, kualitas terbaik, pemutaran tanpa jeda, EQ, dan dukungan format lebih luas", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Pemutar pratinjau bawaan", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Hanya untuk pratinjau lokal cepat di dalam SpotiFLAC Mobile, tidak disarankan untuk mendengarkan secara rutin", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "Pemutar bawaan adalah alat pratinjau untuk memeriksa trek lokal dengan cepat. Gunakan pemutar musik eksternal untuk mendengarkan sebenarnya.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Sedang Diputar", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Tidak ada yang diputar", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimalkan", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Berikutnya", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingDetails": "Detail", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingOpenInExternalPlayer": "Buka di pemutar eksternal", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Pemutar", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lirik", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "Tidak ada lirik di file ini", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Perpustakaan Anda kosong", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Tidak dapat mengacak perpustakaan: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Acak aktif", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Putar berurutan", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Acak perpustakaan", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Antrean kosong", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "Metadata tidak tersedia", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Tidak dapat membuka tautan. Silakan coba lagi.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Output lossless dengan batas {quality}", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Konversi dari {sourceFormat} ke {targetFormat} ({quality})?\n\nOutput tetap codec lossless, tetapi kedalaman bit/sample rate akan dibatasi. File asli akan dihapus setelah konversi.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Konversi {count} {count, plural, =1{trek} other{trek}} ke {format} ({quality})?\n\nOutput tetap codec lossless, tetapi kedalaman bit/sample rate akan dibatasi. File asli akan dihapus setelah konversi.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Proxy lirik untuk Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, dan Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Memutar berikutnya", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Ditambahkan ke antrean", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Hapus {count} {count, plural, =1{playlist} other{playlist}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Acak", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Hanya utama: Aktif", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Hanya utama: Nonaktif", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Metadata Album Artist: Hanya utama", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Metadata Album Artist: Lengkap", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Asli", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Kualitas asli", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "updateSeeReleaseNotes": "Lihat catatan rilis untuk detail.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Judul tidak diketahui", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Putar berikutnya", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Tambah ke antrean", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} terpasang. Aktifkan di Pengaturan > Ekstensi", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} diperbarui ke v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Gagal memasang {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Gagal memperbarui {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Sampul daring", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "Amerika Serikat", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "Britania Raya", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "Prancis", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryDE": "Jerman", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Jepang", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "Korea Selatan", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brasil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Meksiko", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Kanada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } }