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" } }