Adds a permanent, non-consumable premium unlock (EstadoEntitlement + PuertoCompras/ServicioComprasPlayBilling) that removes ads and unlocks alarm vacations, alarms past a 5-alarm free cap, recording start, and full Android Auto browsing. The phone equalizer stays free for everyone. - Entitlement is prefs-backed (compra_premium_v1), fail-open, and resolvable headlessly via esPremiumPersistido() for the Android Auto audio handler, which registers before runApp. - Android Auto reduced mode keeps the real root folder labels for free users; browsing into any of them (and playFromMediaId/playFromSearch/ skipToNext/skipToPrevious) is blocked at the getChildren/servicio_audio choke points, with a locked "Función Premium" item as the backstop. Current-station play/pause/stop stays untouched. A free -> premium transition actively invalidates the head unit's cached browse tree. - Ads (top banner + capped interstitial before adding a station or an alarm) are gated behind entitlement via ServicioAnuncios, using official Google test ad unit IDs pending AdMob provisioning. - Alarm cap UX shows an explanatory message with a secondary unlock action rather than a bare paywall jump; existing data is grandfathered. - 4 new localization keys translated across all 13 supported locales. Co-located tests use strict TDD (RED test before implementation) for every new pure-logic unit; full existing suite passes unchanged.
1860 lines
44 KiB
Dart
1860 lines
44 KiB
Dart
// ignore: unused_import
|
||
import 'package:intl/intl.dart' as intl;
|
||
import 'app_localizations.dart';
|
||
|
||
// ignore_for_file: type=lint
|
||
|
||
/// The translations for English (`en`).
|
||
class AppLocalizationsEn extends AppLocalizations {
|
||
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
||
|
||
@override
|
||
String get appTitle => 'PluriWave';
|
||
|
||
@override
|
||
String get navHome => 'Listen';
|
||
|
||
@override
|
||
String get navSearch => 'Search';
|
||
|
||
@override
|
||
String get navFavorites => 'Favorites';
|
||
|
||
@override
|
||
String get navAlarms => 'Alarms';
|
||
|
||
@override
|
||
String get navSettings => 'Settings';
|
||
|
||
@override
|
||
String get actionOk => 'OK';
|
||
|
||
@override
|
||
String get sleepTimer => 'Sleep timer';
|
||
|
||
@override
|
||
String get sleepTimerDescription =>
|
||
'Smooth radio shutdown with an exact countdown.';
|
||
|
||
@override
|
||
String get cancelTimer => 'Cancel timer';
|
||
|
||
@override
|
||
String get optionOther => 'Other';
|
||
|
||
@override
|
||
String get customDurationTitle => 'Custom duration';
|
||
|
||
@override
|
||
String get durationGreaterThanZero => 'Choose a duration greater than zero.';
|
||
|
||
@override
|
||
String get hoursLabel => 'Hours';
|
||
|
||
@override
|
||
String get minutesLabel => 'Minutes';
|
||
|
||
@override
|
||
String get secondsLabel => 'Seconds';
|
||
|
||
@override
|
||
String durationHoursMinutesSeconds(
|
||
Object hours,
|
||
Object minutes,
|
||
Object seconds,
|
||
) {
|
||
return '$hours h $minutes min $seconds s';
|
||
}
|
||
|
||
@override
|
||
String durationMinutesSeconds(Object minutes, Object seconds) {
|
||
return '$minutes min $seconds s';
|
||
}
|
||
|
||
@override
|
||
String durationMinutesOnly(Object minutes) {
|
||
return '$minutes min';
|
||
}
|
||
|
||
@override
|
||
String durationSecondsOnly(Object seconds) {
|
||
return '$seconds s';
|
||
}
|
||
|
||
@override
|
||
String get saveQuickAccess => 'Save as quick access';
|
||
|
||
@override
|
||
String get startTimer => 'Start timer';
|
||
|
||
@override
|
||
String skipCurrentAlarmExecution(Object alarmName) {
|
||
return 'Skipped this execution of $alarmName.';
|
||
}
|
||
|
||
@override
|
||
String get settingsTitle => 'Settings';
|
||
|
||
@override
|
||
String get settingsSubtitle =>
|
||
'Fine-grained sound control, backups, and custom stations.';
|
||
|
||
@override
|
||
String get settingsGroupAudioTitle => 'AUDIO';
|
||
|
||
@override
|
||
String get settingsGroupStationsTitle => 'STATIONS';
|
||
|
||
@override
|
||
String get settingsGroupRecordingsTitle => 'RECORDINGS & MUSIC';
|
||
|
||
@override
|
||
String get settingsGroupApplicationTitle => 'APPLICATION';
|
||
|
||
@override
|
||
String get infoSectionTitle => 'Info';
|
||
|
||
@override
|
||
String get languageSectionTitle => 'Language';
|
||
|
||
@override
|
||
String get languageSectionDescription =>
|
||
'Choose how the app language is displayed.';
|
||
|
||
@override
|
||
String get languageSystemDefault => 'System';
|
||
|
||
@override
|
||
String get languageSpanish => 'Spanish';
|
||
|
||
@override
|
||
String get languageEnglish => 'English';
|
||
|
||
@override
|
||
String languageUpdated(Object languageName) {
|
||
return 'Language updated: $languageName';
|
||
}
|
||
|
||
@override
|
||
String get languageUpdatedSystem => 'Language updated: System';
|
||
|
||
@override
|
||
String get timerSectionTitle => 'Sleep timer';
|
||
|
||
@override
|
||
String get timerSectionAdd => 'Add';
|
||
|
||
@override
|
||
String get timerSectionDescription =>
|
||
'Customize the quick presets shown when automatically stopping the radio.';
|
||
|
||
@override
|
||
String get timerSectionRestoreRecommended => 'Restore recommended times';
|
||
|
||
@override
|
||
String get newQuickAccessTitle => 'New quick access';
|
||
|
||
@override
|
||
String get saveQuickAccessButton => 'Save quick access';
|
||
|
||
@override
|
||
String get settingsSafeStatus => 'Safe';
|
||
|
||
@override
|
||
String get recordingsSectionTitle => 'Recordings';
|
||
|
||
@override
|
||
String get recordingsFolderDialogTitle => 'Select recordings folder';
|
||
|
||
@override
|
||
String get recordingsPathUpdated => 'Recording path updated';
|
||
|
||
@override
|
||
String recordingsPathSaveError(Object error) {
|
||
return 'Could not save the path: $error';
|
||
}
|
||
|
||
@override
|
||
String get recordingsDefaultFolderRestored =>
|
||
'The default internal folder will be used';
|
||
|
||
@override
|
||
String get recordingsFolderTitle => 'Recording folder';
|
||
|
||
@override
|
||
String get recordingsPathCalculating => 'Calculating path...';
|
||
|
||
@override
|
||
String get recordingsChangePath => 'Change path';
|
||
|
||
@override
|
||
String get recordingsUseDefaultPath => 'Use default path';
|
||
|
||
@override
|
||
String get recordingsOriginalStreamHint =>
|
||
'The radio is saved from the original stream, without recompressing.';
|
||
|
||
@override
|
||
String get equalizerActive => 'Active';
|
||
|
||
@override
|
||
String get equalizerDisabled => 'Disabled';
|
||
|
||
@override
|
||
String get equalizerEnable => 'Enable equalizer';
|
||
|
||
@override
|
||
String get equalizerRealtimeSubtitle =>
|
||
'Changes are applied in real time to the current station.';
|
||
|
||
@override
|
||
String get equalizerPendingSubtitle =>
|
||
'Changes are saved and will apply when Android enables the effect.';
|
||
|
||
@override
|
||
String get equalizerPerStationTitle => 'Use custom EQ for this favorite';
|
||
|
||
@override
|
||
String equalizerPerStationActive(Object stationName) {
|
||
return 'Active for $stationName';
|
||
}
|
||
|
||
@override
|
||
String equalizerPerStationMain(Object stationName) {
|
||
return 'Using main EQ for $stationName';
|
||
}
|
||
|
||
@override
|
||
String get equalizerBaseExplainer =>
|
||
'This is the base equalizer: it applies to every station without its own setting. A station\'s own EQ is set from its own playback screen and overrides this one.';
|
||
|
||
@override
|
||
String get equalizerActiveOutputLabel => 'Active output';
|
||
|
||
@override
|
||
String get equalizerActiveOutputDefault => 'This device\'s speaker';
|
||
|
||
@override
|
||
String get equalizerStationsWithOwnEqTitle => 'Stations with their own EQ';
|
||
|
||
@override
|
||
String get equalizerStationsWithOwnEqSubtitle => 'Ignore this base equalizer';
|
||
|
||
@override
|
||
String get equalizerStationsWithOwnEqEmpty =>
|
||
'No stations have their own EQ yet.';
|
||
|
||
@override
|
||
String get equalizerSaveAsPresetAction => 'Save as preset';
|
||
|
||
@override
|
||
String get equalizerResetToFlatAction => 'Reset to flat';
|
||
|
||
@override
|
||
String get equalizerSavePresetDialogTitle => 'Save as preset';
|
||
|
||
@override
|
||
String get equalizerSavePresetNameLabel => 'Preset name';
|
||
|
||
@override
|
||
String get equalizerSavePresetEmptyNameError =>
|
||
'Enter a name for the preset.';
|
||
|
||
@override
|
||
String get equalizerSavePresetConfirm => 'Save';
|
||
|
||
@override
|
||
String get preferredStationTitle => 'Preferred station';
|
||
|
||
@override
|
||
String get preferredStationDescription =>
|
||
'Preselected for new alarms and available for quick playback.';
|
||
|
||
@override
|
||
String get preferredStationNoStationsTitle => 'No stations available yet';
|
||
|
||
@override
|
||
String get preferredStationNoStationsSubtitle =>
|
||
'Save favorites or load stations to choose a preferred one.';
|
||
|
||
@override
|
||
String get preferredStationAutomaticFallback => 'Automatic fallback';
|
||
|
||
@override
|
||
String get preferredStationDefaultFavorite => 'Default favorite';
|
||
|
||
@override
|
||
String preferredStationCurrent(Object stationName) {
|
||
return 'Current preferred: $stationName';
|
||
}
|
||
|
||
@override
|
||
String preferredStationAutoUsing(Object stationName) {
|
||
return 'No favorites: automatically using $stationName';
|
||
}
|
||
|
||
@override
|
||
String get preferredStationPlay => 'Play preferred';
|
||
|
||
@override
|
||
String get customStationsTitle => 'Custom stations';
|
||
|
||
@override
|
||
String get customStationsAdd => 'Add';
|
||
|
||
@override
|
||
String get customStationsEmpty => 'No custom stations.';
|
||
|
||
@override
|
||
String get playAction => 'Play';
|
||
|
||
@override
|
||
String get deleteAction => 'Delete';
|
||
|
||
@override
|
||
String get addStationTitle => 'Add station';
|
||
|
||
@override
|
||
String get stationNameLabel => 'Name *';
|
||
|
||
@override
|
||
String get unnamedStation => 'Unnamed station';
|
||
|
||
@override
|
||
String get requiredField => 'Required field';
|
||
|
||
@override
|
||
String get streamUrlLabel => 'Stream URL *';
|
||
|
||
@override
|
||
String get invalidUrl => 'Invalid URL';
|
||
|
||
@override
|
||
String get countryOptionalLabel => 'Country (optional)';
|
||
|
||
@override
|
||
String get saveStation => 'Save station';
|
||
|
||
@override
|
||
String get backupSectionTitle => 'Backup';
|
||
|
||
@override
|
||
String get backupExportTitle => 'Export configuration';
|
||
|
||
@override
|
||
String get backupExportSubtitle =>
|
||
'Favorites, custom stations, and EQ presets';
|
||
|
||
@override
|
||
String get backupImportTitle => 'Import configuration';
|
||
|
||
@override
|
||
String get backupImportSubtitle => 'Restore from a backup file';
|
||
|
||
@override
|
||
String get backupShareSubject => 'PluriWave — backup';
|
||
|
||
@override
|
||
String backupShareText(Object date) {
|
||
return 'PluriWave configuration exported on $date';
|
||
}
|
||
|
||
@override
|
||
String backupExportError(Object error) {
|
||
return 'Export error: $error';
|
||
}
|
||
|
||
@override
|
||
String get backupImportConfirmMessage =>
|
||
'This will add favorites, stations, and presets from the file. Continue?';
|
||
|
||
@override
|
||
String get backupImportSuccess => 'Configuration imported successfully';
|
||
|
||
@override
|
||
String backupImportError(Object error) {
|
||
return 'Import error: $error';
|
||
}
|
||
|
||
@override
|
||
String get appVersionLoading => 'Loading version...';
|
||
|
||
@override
|
||
String appVersionSubtitle(Object version) {
|
||
return '$version - World radio';
|
||
}
|
||
|
||
@override
|
||
String get savedFavoritesTitle => 'Saved favorites';
|
||
|
||
@override
|
||
String get stationFilterTitle => 'Station filter';
|
||
|
||
@override
|
||
String get stationFilterSubtitle => 'Only stations verified as active';
|
||
|
||
@override
|
||
String get backgroundAudioTitle => 'Background audio';
|
||
|
||
@override
|
||
String get backgroundAudioSubtitle => 'Continues when the screen turns off';
|
||
|
||
@override
|
||
String get dash => '—';
|
||
|
||
@override
|
||
String get cancelAction => 'Cancel';
|
||
|
||
@override
|
||
String get equalizerTitle => 'Equalizer';
|
||
|
||
@override
|
||
String get recordingsOpenFolder => 'Open folder';
|
||
|
||
@override
|
||
String recordingsOpenFolderError(Object error) {
|
||
return 'Could not open the folder: $error';
|
||
}
|
||
|
||
@override
|
||
String get recordingsMaxSizeTitle => 'Maximum recording size';
|
||
|
||
@override
|
||
String recordingsMaxSizeSubtitle(int size) {
|
||
return 'Current limit: $size MB';
|
||
}
|
||
|
||
@override
|
||
String get recordingsMaxSizeDialogTitle => 'Maximum size per recording';
|
||
|
||
@override
|
||
String get recordingsMaxSizeMbLabel => 'Maximum megabytes';
|
||
|
||
@override
|
||
String recordingsMaxSizeSaved(int size) {
|
||
return 'Recording limit updated to $size MB';
|
||
}
|
||
|
||
@override
|
||
String get recordingsLibraryTitle => 'My recordings';
|
||
|
||
@override
|
||
String recordingsLibraryStorageCaption(int usedMb, int totalMb) {
|
||
return '$usedMb MB of $totalMb MB used';
|
||
}
|
||
|
||
@override
|
||
String get recordingsLibraryStorageFolderCaption =>
|
||
'Music/PluriWave · purges oldest at limit';
|
||
|
||
@override
|
||
String get recordingsLibraryEmptyTitle => 'No recordings yet';
|
||
|
||
@override
|
||
String get recordingsLibraryEmptySubtitle =>
|
||
'Recordings you save will appear here.';
|
||
|
||
@override
|
||
String get recordingActionRename => 'Rename';
|
||
|
||
@override
|
||
String get recordingActionShare => 'Share';
|
||
|
||
@override
|
||
String get recordingActionDelete => 'Delete';
|
||
|
||
@override
|
||
String get recordingRenameDialogTitle => 'Rename recording';
|
||
|
||
@override
|
||
String get recordingRenameLabel => 'Name';
|
||
|
||
@override
|
||
String get recordingRenameEmptyError => 'Enter a name';
|
||
|
||
@override
|
||
String get recordingDeleteConfirmTitle => 'Delete recording?';
|
||
|
||
@override
|
||
String get recordingDeleteConfirmMessage => 'This can\'t be undone.';
|
||
|
||
@override
|
||
String get recordingsLibrarySettingsTooltip => 'Recording settings';
|
||
|
||
@override
|
||
String get stationOrderTitle => 'Station order';
|
||
|
||
@override
|
||
String get stationOrderByName => 'By name';
|
||
|
||
@override
|
||
String get stationOrderByQuality => 'By quality';
|
||
|
||
@override
|
||
String get stationOrderByPopularity => 'By popularity';
|
||
|
||
@override
|
||
String get stationOrderScopeDescription =>
|
||
'Applies to favorites, searches, nearby stations and quick lists.';
|
||
|
||
@override
|
||
String get favoriteGroupsTitle => 'Favorite lists';
|
||
|
||
@override
|
||
String get favoriteGroupsDescription =>
|
||
'Create short lists to organize your saved stations.';
|
||
|
||
@override
|
||
String get favoriteGroupsAdd => 'Add list';
|
||
|
||
@override
|
||
String get favoriteGroupsEdit => 'Edit list';
|
||
|
||
@override
|
||
String get favoriteGroupsDelete => 'Delete list';
|
||
|
||
@override
|
||
String get favoriteGroupsNameLabel => 'List name';
|
||
|
||
@override
|
||
String get favoriteGroupsNameTooLong => 'Maximum 28 characters.';
|
||
|
||
@override
|
||
String get favoriteGroupsUnassigned => 'Unassigned';
|
||
|
||
@override
|
||
String get favoriteGroupsProtectedHint =>
|
||
'Default list: it cannot be edited or deleted.';
|
||
|
||
@override
|
||
String get favoriteGroupsCreated => 'List created';
|
||
|
||
@override
|
||
String get favoriteGroupsUpdated => 'List updated';
|
||
|
||
@override
|
||
String get favoriteGroupsDeleted =>
|
||
'List deleted; its stations return to Unassigned.';
|
||
|
||
@override
|
||
String get favoriteGroupsAssign => 'Move to list';
|
||
|
||
@override
|
||
String favoriteGroupsAssignSubtitle(Object groupName) {
|
||
return 'Current list: $groupName';
|
||
}
|
||
|
||
@override
|
||
String favoriteGroupsAssigned(Object stationName, Object groupName) {
|
||
return '$stationName moved to $groupName';
|
||
}
|
||
|
||
@override
|
||
String get favoritesTitle => 'Favorites';
|
||
|
||
@override
|
||
String get favoritesEmptyTitle => 'No favorites yet';
|
||
|
||
@override
|
||
String get favoritesEmptySubtitle =>
|
||
'Tap the heart on any station to save it to your collection.';
|
||
|
||
@override
|
||
String get favoritesHeaderSubtitle =>
|
||
'Organize your collection by lists and keep important radios close.';
|
||
|
||
@override
|
||
String get favoritesCollection => 'Collection';
|
||
|
||
@override
|
||
String favoritesSavedCount(int count) {
|
||
return '$count saved';
|
||
}
|
||
|
||
@override
|
||
String get favoritesRemoveTooltip => 'Remove from favorites';
|
||
|
||
@override
|
||
String favoritesRemovedMessage(Object stationName) {
|
||
return '$stationName removed from favorites';
|
||
}
|
||
|
||
@override
|
||
String get favoritesFilterAllLabel => 'All';
|
||
|
||
@override
|
||
String favoriteGroupsChipLabel(Object groupName, int count) {
|
||
return '$groupName · $count';
|
||
}
|
||
|
||
@override
|
||
String get favoriteGroupsManage => 'Manage lists';
|
||
|
||
@override
|
||
String get customStationsAddCta => 'Add custom station';
|
||
|
||
@override
|
||
String get alarmPostponedCurrentExecution =>
|
||
'Alarm postponed for this occurrence.';
|
||
|
||
@override
|
||
String get searchScreenTitle => 'Search signal';
|
||
|
||
@override
|
||
String get searchScreenSubtitle =>
|
||
'Find stations by name, country, or language with fast filters and high contrast.';
|
||
|
||
@override
|
||
String get searchFiltersLabel => 'Filters';
|
||
|
||
@override
|
||
String get searchHint => 'Radio Horizon, jazz, news...';
|
||
|
||
@override
|
||
String get searchCountryFilterLabel => 'Country';
|
||
|
||
@override
|
||
String get searchLanguageFilterLabel => 'Language';
|
||
|
||
@override
|
||
String get searchMinQualityFilterLabel => 'Minimum quality';
|
||
|
||
@override
|
||
String get searchLoadingStationsLabel => 'SEARCHING FOR STATIONS…';
|
||
|
||
@override
|
||
String get searchEmptyTitle => 'Search for a station';
|
||
|
||
@override
|
||
String get searchNoResultsTitle => 'No results';
|
||
|
||
@override
|
||
String searchNoResultsForQueryTitle(Object query) {
|
||
return 'No results for \"$query\"';
|
||
}
|
||
|
||
@override
|
||
String get searchEmptySubtitle =>
|
||
'Use the top bar or chips to discover stations from around the world.';
|
||
|
||
@override
|
||
String get searchNoResultsSubtitle =>
|
||
'Try removing filters or typing another name to find an active station.';
|
||
|
||
@override
|
||
String searchResultsCount(num count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count results',
|
||
one: '1 result',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String searchClearFiltersAction(num count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: 'Clear $count filters',
|
||
one: 'Clear filter',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String get countriesScreenTitle => 'Countries';
|
||
|
||
@override
|
||
String get countriesSearchHint => 'Country or code...';
|
||
|
||
@override
|
||
String get countriesYourLanguagesTitle => 'Your languages';
|
||
|
||
@override
|
||
String get countriesAllTitle => 'All countries';
|
||
|
||
@override
|
||
String get radioCountriesError => 'We couldn\'t load the countries.';
|
||
|
||
@override
|
||
String get countrySpain => 'Spain';
|
||
|
||
@override
|
||
String get countryUsa => 'USA';
|
||
|
||
@override
|
||
String get countryMexico => 'Mexico';
|
||
|
||
@override
|
||
String get countryArgentina => 'Argentina';
|
||
|
||
@override
|
||
String get countryUk => 'UK';
|
||
|
||
@override
|
||
String get countryFrance => 'France';
|
||
|
||
@override
|
||
String get countryGermany => 'Germany';
|
||
|
||
@override
|
||
String get countryItaly => 'Italy';
|
||
|
||
@override
|
||
String get countryBrazil => 'Brazil';
|
||
|
||
@override
|
||
String get countryJapan => 'Japan';
|
||
|
||
@override
|
||
String get languageNameSpanish => 'Spanish';
|
||
|
||
@override
|
||
String get languageNameEnglish => 'English';
|
||
|
||
@override
|
||
String get languageNameFrench => 'French';
|
||
|
||
@override
|
||
String get languageNameGerman => 'German';
|
||
|
||
@override
|
||
String get languageNamePortuguese => 'Portuguese';
|
||
|
||
@override
|
||
String get languageNameItalian => 'Italian';
|
||
|
||
@override
|
||
String get languageNameJapanese => 'Japanese';
|
||
|
||
@override
|
||
String get languageNameArabic => 'Arabic';
|
||
|
||
@override
|
||
String get languageNameRussian => 'Russian';
|
||
|
||
@override
|
||
String get homeScreenSubtitle =>
|
||
'Live global radio with clean signals, smart favorites, and a show-style visual experience.';
|
||
|
||
@override
|
||
String get exploreStations => 'Explore stations';
|
||
|
||
@override
|
||
String stationsCount(int count) {
|
||
return '$count stations';
|
||
}
|
||
|
||
@override
|
||
String get qualityHd => 'HD quality';
|
||
|
||
@override
|
||
String get yourStationsTitle => 'Your stations';
|
||
|
||
@override
|
||
String get seeAllAction => 'See all';
|
||
|
||
@override
|
||
String get openFullPlayerTooltip => 'Open full player';
|
||
|
||
@override
|
||
String get nowListeningLabel => 'Now listening';
|
||
|
||
@override
|
||
String get nothingPlayingTitle => 'Nothing playing yet';
|
||
|
||
@override
|
||
String get nothingPlayingSubtitle =>
|
||
'Pick a station from Your stations or search to start.';
|
||
|
||
@override
|
||
String get nearYou => 'Near you';
|
||
|
||
@override
|
||
String nearYouInCountry(Object country) {
|
||
return 'Near you · $country';
|
||
}
|
||
|
||
@override
|
||
String get detectAction => 'Detect';
|
||
|
||
@override
|
||
String get liveRadar => 'Live radar';
|
||
|
||
@override
|
||
String get genresTitle => 'Genres';
|
||
|
||
@override
|
||
String get exploreByTitle => 'Browse by';
|
||
|
||
@override
|
||
String get exploreTrendingTitle => 'Trending';
|
||
|
||
@override
|
||
String get exploreTrendingSubtitle => 'Today';
|
||
|
||
@override
|
||
String get exploreNewTitle => 'New';
|
||
|
||
@override
|
||
String get exploreNewSubtitle => 'This week';
|
||
|
||
@override
|
||
String get popularNowTitle => 'Popular now';
|
||
|
||
@override
|
||
String get offlineBannerTitle => 'No connection';
|
||
|
||
@override
|
||
String get retryAction => 'Retry';
|
||
|
||
@override
|
||
String get noStationsAvailable => 'No stations available';
|
||
|
||
@override
|
||
String get noStationsAvailableSubtitle =>
|
||
'Try refreshing or choosing another genre to capture a signal again.';
|
||
|
||
@override
|
||
String get genrePop => 'Pop';
|
||
|
||
@override
|
||
String get genreRock => 'Rock';
|
||
|
||
@override
|
||
String get genreJazz => 'Jazz';
|
||
|
||
@override
|
||
String get genreClassical => 'Classical';
|
||
|
||
@override
|
||
String get genreElectronic => 'Electronic';
|
||
|
||
@override
|
||
String get genreNews => 'News';
|
||
|
||
@override
|
||
String get genreTalk => 'Talk';
|
||
|
||
@override
|
||
String get genreHipHop => 'Hip-hop';
|
||
|
||
@override
|
||
String get genreCountry => 'Country';
|
||
|
||
@override
|
||
String get genreMetal => 'Metal';
|
||
|
||
@override
|
||
String get genreReggae => 'Reggae';
|
||
|
||
@override
|
||
String get genreLatin => 'Latin';
|
||
|
||
@override
|
||
String get alarmScreenTitle => 'Music wake-up';
|
||
|
||
@override
|
||
String get alarmScreenSubtitle =>
|
||
'Alarms with radio, safe fallback sound, smart vacations, and the next occurrence always visible.';
|
||
|
||
@override
|
||
String get createAlarmAction => 'Create alarm';
|
||
|
||
@override
|
||
String alarmsCount(int count) {
|
||
return '$count alarms';
|
||
}
|
||
|
||
@override
|
||
String get activeAlarmsWithoutNextTitle =>
|
||
'Active alarms without a next occurrence';
|
||
|
||
@override
|
||
String get noActiveAlarms => 'No active alarms';
|
||
|
||
@override
|
||
String get nextAlarmTitle => 'Next alarm';
|
||
|
||
@override
|
||
String activeAlarmsWithoutNextSubtitle(int count) {
|
||
return 'There are $count active alarm(s), but they do not currently have a valid future date. Check date, weekdays, and vacations.';
|
||
}
|
||
|
||
@override
|
||
String get createAlarmHint =>
|
||
'Create an alarm and PluriWave will calculate the next occurrence automatically.';
|
||
|
||
@override
|
||
String get alarmVacationPlay => 'Plays during vacations';
|
||
|
||
@override
|
||
String get alarmVacationPause => 'Paused during vacations';
|
||
|
||
@override
|
||
String alarmFadeInLabel(int seconds) {
|
||
return 'Fade-in ${seconds}s';
|
||
}
|
||
|
||
@override
|
||
String alarmNextExecution(Object date) {
|
||
return 'Next occurrence: $date';
|
||
}
|
||
|
||
@override
|
||
String get alarmNoNextExecution => 'It has no active next occurrence.';
|
||
|
||
@override
|
||
String alarmSkippedExecution(Object date) {
|
||
return 'One occurrence was skipped: $date.';
|
||
}
|
||
|
||
@override
|
||
String get editAction => 'Edit';
|
||
|
||
@override
|
||
String get skipNextAction => 'Skip next';
|
||
|
||
@override
|
||
String get deleteTooltip => 'Delete';
|
||
|
||
@override
|
||
String get alarmHeroSkipAction => 'Skip';
|
||
|
||
@override
|
||
String get alarmDeleteConfirmTitle => 'Delete alarm?';
|
||
|
||
@override
|
||
String get alarmDeleteConfirmMessage => 'This can\'t be undone.';
|
||
|
||
@override
|
||
String get alarmSkippedNoNextSnackbar =>
|
||
'Alarm skipped. There is no next occurrence left.';
|
||
|
||
@override
|
||
String alarmSkippedReturnsSnackbar(Object date) {
|
||
return 'Alarm skipped. It will return on $date.';
|
||
}
|
||
|
||
@override
|
||
String alarmVacationPausedNoNext(Object vacationName) {
|
||
return 'It is paused for vacations ($vacationName) and has no next occurrence.';
|
||
}
|
||
|
||
@override
|
||
String alarmVacationPausedReturns(Object vacationName, Object date) {
|
||
return 'It is paused for vacations ($vacationName) and returns on $date.';
|
||
}
|
||
|
||
@override
|
||
String alarmVacationReturns(Object date) {
|
||
return 'With vacations enabled, it will ring again on $date.';
|
||
}
|
||
|
||
@override
|
||
String get defaultAlarmName => 'Music alarm';
|
||
|
||
@override
|
||
String get newAlarmTitle => 'New alarm';
|
||
|
||
@override
|
||
String get editAlarmTitle => 'Edit alarm';
|
||
|
||
@override
|
||
String get nameField => 'Name';
|
||
|
||
@override
|
||
String get timeField => 'Time';
|
||
|
||
@override
|
||
String get dateField => 'Date';
|
||
|
||
@override
|
||
String get onceOption => 'Once';
|
||
|
||
@override
|
||
String get dailyOption => 'Daily';
|
||
|
||
@override
|
||
String get weekdaysOption => 'Weekdays';
|
||
|
||
@override
|
||
String get soundAndVolumeSection => 'Sound and volume';
|
||
|
||
@override
|
||
String get alarmFadeInTitle => 'Alarm fade-in';
|
||
|
||
@override
|
||
String get alarmFadeInOff => '0 s (no transition)';
|
||
|
||
@override
|
||
String alarmFadeInSummary(int seconds) {
|
||
return '$seconds s (from 5% to the selected volume)';
|
||
}
|
||
|
||
@override
|
||
String get internalSafeSoundLabel => 'Internal safe sound';
|
||
|
||
@override
|
||
String get soundWarmSunrise => 'Warm sunrise';
|
||
|
||
@override
|
||
String get soundSoftBell => 'Soft bell';
|
||
|
||
@override
|
||
String get soundDigitalPulse => 'Digital pulse';
|
||
|
||
@override
|
||
String get favoriteStationLabel => 'Favorite station';
|
||
|
||
@override
|
||
String get noStationUseInternalSound => 'No station: use internal sound';
|
||
|
||
@override
|
||
String get alarmFallbackStationLabel => 'Backup station';
|
||
|
||
@override
|
||
String get alarmStationPickerSearchHint => 'Search for a station by name';
|
||
|
||
@override
|
||
String get alarmSnoozeDurationTitle => 'Snooze duration';
|
||
|
||
@override
|
||
String get snoozeAction => 'Snooze';
|
||
|
||
@override
|
||
String alarmSnoozeOptionLabel(int minutes) {
|
||
return '$minutes min';
|
||
}
|
||
|
||
@override
|
||
String get alarmSnoozeUsualLabel => 'usual';
|
||
|
||
@override
|
||
String get saveFavoritesAlarmHint =>
|
||
'Save stations in Favorites to use them as a music alarm.';
|
||
|
||
@override
|
||
String get useCurrentStationAction => 'Use current station';
|
||
|
||
@override
|
||
String get playDuringVacations => 'Play during vacations';
|
||
|
||
@override
|
||
String get playDuringVacationsHint =>
|
||
'If you turn this off, the next occurrence will jump to the first valid day.';
|
||
|
||
@override
|
||
String get saveAlarmAction => 'Save alarm';
|
||
|
||
@override
|
||
String get chooseOneWeekdayError => 'Choose at least one weekday.';
|
||
|
||
@override
|
||
String get androidReliabilityReview => 'Review Android reliability';
|
||
|
||
@override
|
||
String get statusOk => 'OK';
|
||
|
||
@override
|
||
String get statusPending => 'pending';
|
||
|
||
@override
|
||
String androidReliabilityStatus(
|
||
Object exact,
|
||
Object notifications,
|
||
Object screen,
|
||
) {
|
||
return 'Reliability: exact $exact · notifications $notifications · screen $screen';
|
||
}
|
||
|
||
@override
|
||
String get vacationRangesTitle => 'Vacation ranges';
|
||
|
||
@override
|
||
String get addAction => 'Add';
|
||
|
||
@override
|
||
String get vacationRangesHint =>
|
||
'If an alarm is set to \"Paused during vacations\", it automatically skips these ranges.';
|
||
|
||
@override
|
||
String get noVacationRangesLoaded => 'No ranges loaded.';
|
||
|
||
@override
|
||
String get deleteRangeTooltip => 'Delete range';
|
||
|
||
@override
|
||
String vacationRangesCount(int count) {
|
||
return '$count ranges';
|
||
}
|
||
|
||
@override
|
||
String vacationSummaryActiveCountdown(int days) {
|
||
return 'Active now · $days days left';
|
||
}
|
||
|
||
@override
|
||
String vacationSummaryUpcomingCountdown(int days) {
|
||
return 'Next range in $days days';
|
||
}
|
||
|
||
@override
|
||
String vacationImpactPausedLabel(Object times) {
|
||
return 'Paused: $times';
|
||
}
|
||
|
||
@override
|
||
String vacationImpactContinuesLabel(Object times) {
|
||
return 'Still ringing: $times';
|
||
}
|
||
|
||
@override
|
||
String get vacationUpcomingSectionTitle => 'SCHEDULED';
|
||
|
||
@override
|
||
String get vacationPastSectionTitle => 'Past ranges';
|
||
|
||
@override
|
||
String get addVacationRangeCta => 'Add range';
|
||
|
||
@override
|
||
String get vacationExplainerBanner =>
|
||
'During these ranges, alarms marked \"pause during vacations\" won\'t ring. Alarms marked \"always ring\" are not affected.';
|
||
|
||
@override
|
||
String get vacationNoActiveRangeHint => 'No active vacation range right now.';
|
||
|
||
@override
|
||
String get vacationsDefaultName => 'Vacation';
|
||
|
||
@override
|
||
String get newVacationRangeTitle => 'New vacation range';
|
||
|
||
@override
|
||
String get editVacationRangeTitle => 'Edit vacation range';
|
||
|
||
@override
|
||
String get vacationDeleteConfirmTitle => 'Delete vacation range?';
|
||
|
||
@override
|
||
String get vacationDeleteConfirmMessage => 'This can\'t be undone.';
|
||
|
||
@override
|
||
String get startField => 'Start';
|
||
|
||
@override
|
||
String get endField => 'End';
|
||
|
||
@override
|
||
String get saveRangeAction => 'Save range';
|
||
|
||
@override
|
||
String get noAlarmsYetTitle => 'There are no alarms yet.';
|
||
|
||
@override
|
||
String get noAlarmsYetSubtitle =>
|
||
'Create one to design your musical wake-up.';
|
||
|
||
@override
|
||
String get ringingInternalAudioActive => 'Playing with internal safe audio.';
|
||
|
||
@override
|
||
String get ringingPreparingInternalAudio => 'Preparing internal safe audio.';
|
||
|
||
@override
|
||
String get stopAlarmAction => 'Stop alarm';
|
||
|
||
@override
|
||
String get alarmStopFailedMessage =>
|
||
'We couldn\'t confirm the alarm stopped. Try again.';
|
||
|
||
@override
|
||
String get alarmForceStopAction => 'Force stop';
|
||
|
||
@override
|
||
String get alarmMissedNotificationTitle => 'Missed alarm';
|
||
|
||
@override
|
||
String alarmMissedNotificationText(Object name) {
|
||
return '$name was silenced automatically after 10 minutes.';
|
||
}
|
||
|
||
@override
|
||
String get pauseAction => 'Pause';
|
||
|
||
@override
|
||
String miniPlayerOpenLabel(Object stationName) {
|
||
return 'Open player for $stationName';
|
||
}
|
||
|
||
@override
|
||
String get playerIconLabel => 'Player';
|
||
|
||
@override
|
||
String get playbackStatusConnecting => 'Connecting...';
|
||
|
||
@override
|
||
String get playbackStatusLive => 'Live';
|
||
|
||
@override
|
||
String get playbackStatusPaused => 'Paused';
|
||
|
||
@override
|
||
String get playbackStatusReconnecting => 'Reconnecting...';
|
||
|
||
@override
|
||
String get playbackStatusConnectionError => 'Connection error';
|
||
|
||
@override
|
||
String get playbackStatusStopped => 'Stopped';
|
||
|
||
@override
|
||
String stationSemanticLabel(Object stationName) {
|
||
return 'Station $stationName';
|
||
}
|
||
|
||
@override
|
||
String get favoritesAddTooltip => 'Add to favorites';
|
||
|
||
@override
|
||
String favoritesAddedMessage(Object stationName) {
|
||
return '$stationName added to favorites';
|
||
}
|
||
|
||
@override
|
||
String get stationIconLabel => 'Station icon';
|
||
|
||
@override
|
||
String get liveNow => 'Live';
|
||
|
||
@override
|
||
String equalizerBandLabel(Object band) {
|
||
return '$band band';
|
||
}
|
||
|
||
@override
|
||
String equalizerBandValue(Object value) {
|
||
return '$value decibels';
|
||
}
|
||
|
||
@override
|
||
String get equalizerPresetFlat => 'Flat';
|
||
|
||
@override
|
||
String get equalizerPresetRock => 'Rock';
|
||
|
||
@override
|
||
String get equalizerPresetPop => 'Pop';
|
||
|
||
@override
|
||
String get equalizerPresetBassBoost => 'Bass Boost';
|
||
|
||
@override
|
||
String get equalizerPresetJazz => 'Jazz';
|
||
|
||
@override
|
||
String get equalizerPresetVoice => 'Voice';
|
||
|
||
@override
|
||
String get equalizerPresetCustom => 'Custom';
|
||
|
||
@override
|
||
String get onboardingTitle => 'Welcome to PluriWave';
|
||
|
||
@override
|
||
String get onboardingNewsTitle => 'What\'s new';
|
||
|
||
@override
|
||
String get onboardingStartAction => 'Start';
|
||
|
||
@override
|
||
String get onboardingCloseTooltip => 'Close';
|
||
|
||
@override
|
||
String radioRecordingError(Object error) {
|
||
return 'Error recording the radio: $error';
|
||
}
|
||
|
||
@override
|
||
String get radioApiConnectionError => 'No connection to the radio API';
|
||
|
||
@override
|
||
String get radioSearchError => 'Search error. Check your connection.';
|
||
|
||
@override
|
||
String get radioLoadMoreStationsError => 'Could not load more stations.';
|
||
|
||
@override
|
||
String get radioNearbyStationsError =>
|
||
'We could not detect nearby stations. Use country filters.';
|
||
|
||
@override
|
||
String radioCannotPlayStation(Object stationName) {
|
||
return 'Cannot play \"$stationName\"';
|
||
}
|
||
|
||
@override
|
||
String get recordingSelectStationFirst =>
|
||
'Select a station before recording.';
|
||
|
||
@override
|
||
String recordingStartError(Object error) {
|
||
return 'Could not start recording: $error';
|
||
}
|
||
|
||
@override
|
||
String get unsupportedConfigVersion => 'Unsupported configuration version';
|
||
|
||
@override
|
||
String get audioErrorGeneric => 'Playback error';
|
||
|
||
@override
|
||
String get audioErrorNoInternet => 'No internet connection';
|
||
|
||
@override
|
||
String get audioErrorInvalidUrl => 'The radio URL is not valid';
|
||
|
||
@override
|
||
String get audioErrorNotFound => 'The radio is not available (404 error)';
|
||
|
||
@override
|
||
String get audioErrorTimeout => 'Connection timed out';
|
||
|
||
@override
|
||
String get audioErrorCannotConnect => 'Cannot connect to the radio';
|
||
|
||
@override
|
||
String get audioErrorUnsupportedFormat => 'Unsupported stream format';
|
||
|
||
@override
|
||
String get audioErrorDecode => 'Error decoding the audio stream';
|
||
|
||
@override
|
||
String get audioErrorCleartext =>
|
||
'This radio uses unencrypted HTTP, which is not allowed';
|
||
|
||
@override
|
||
String get audioErrorSsl => 'Invalid SSL certificate on the radio';
|
||
|
||
@override
|
||
String get audioErrorCannotPlay => 'This radio cannot be played';
|
||
|
||
@override
|
||
String get audioErrorUnexpectedPlayback => 'Unexpected playback error';
|
||
|
||
@override
|
||
String get androidExactAlarmScheduleError =>
|
||
'Android could not schedule an exact alarm. Check the exact alarm permission.';
|
||
|
||
@override
|
||
String get recordingPathEmptyError => 'The recording path cannot be empty';
|
||
|
||
@override
|
||
String get recordingMaxSizeInvalidError =>
|
||
'The maximum size must be greater than zero';
|
||
|
||
@override
|
||
String get recordingAlreadyActiveError =>
|
||
'A recording is already in progress';
|
||
|
||
@override
|
||
String get alarmRingingFallbackActive => 'Playing with internal safe audio.';
|
||
|
||
@override
|
||
String get alarmRingingPreparingFallback => 'Preparing internal safe audio.';
|
||
|
||
@override
|
||
String get alarmRingingTryingStation =>
|
||
'Trying to play your station at the highest available quality.';
|
||
|
||
@override
|
||
String get alarmScheduleDaily => 'Every morning';
|
||
|
||
@override
|
||
String alarmScheduleOnce(Object date) {
|
||
return 'Once · $date';
|
||
}
|
||
|
||
@override
|
||
String alarmScheduleWeekdays(Object days) {
|
||
return 'Days: $days';
|
||
}
|
||
|
||
@override
|
||
String get alarmRepeatSectionLabel => 'REPEAT';
|
||
|
||
@override
|
||
String get alarmVolumeLabel => 'Volume';
|
||
|
||
@override
|
||
String get androidReliabilityTitle => 'Review Android reliability';
|
||
|
||
@override
|
||
String get closeAction => 'Close';
|
||
|
||
@override
|
||
String get customOption => 'Custom';
|
||
|
||
@override
|
||
String get endLabel => 'End';
|
||
|
||
@override
|
||
String get equalizerDisable => 'Disable equalizer';
|
||
|
||
@override
|
||
String get helpTitle => 'Help and tutorial';
|
||
|
||
@override
|
||
String get helpSubtitle => '9 screens · watch it again anytime';
|
||
|
||
@override
|
||
String get tutorialSkipAction => 'Skip';
|
||
|
||
@override
|
||
String get tutorialNextAction => 'Next';
|
||
|
||
@override
|
||
String get tutorialPage1Headline => 'Save your stations and group them';
|
||
|
||
@override
|
||
String get tutorialPage1Body =>
|
||
'Tap the heart to save a station. In \"Your stations\" you can create groups like \"Every morning\" or \"Car\" and drag to reorder them.';
|
||
|
||
@override
|
||
String get tutorialPage2Headline =>
|
||
'One base equalizer, plus one per station';
|
||
|
||
@override
|
||
String get tutorialPage2Body =>
|
||
'In Settings you set the general equalizer. And from a specific station\'s playback screen you can give it its own setting, which overrides the general one.';
|
||
|
||
@override
|
||
String get tutorialPage3Headline => 'Record what you\'re listening to';
|
||
|
||
@override
|
||
String get tutorialPage3Body =>
|
||
'From the player\'s tool tray, \"Record\" saves the original stream. Find your recordings under Settings › Recordings.';
|
||
|
||
@override
|
||
String get tutorialPage4Headline => 'Alarms that adapt to you';
|
||
|
||
@override
|
||
String get tutorialPage4Body =>
|
||
'Wake up to your favorite station, snooze for 3, 5, or 10 minutes, and add vacation ranges so some alarms skip themselves.';
|
||
|
||
@override
|
||
String get tutorialPage5Headline => 'Your favorites, in the car too';
|
||
|
||
@override
|
||
String get tutorialPage5Body =>
|
||
'Connect your phone with Android Auto to find Favorites, All stations, Your stations, and your Local Music, with big buttons made for driving.';
|
||
|
||
@override
|
||
String get tutorialPage6Headline => 'It reconnects on its own';
|
||
|
||
@override
|
||
String get tutorialPage6Body =>
|
||
'If the signal drops, PluriWave retries automatically and keeps showing your saved favorites even without a connection.';
|
||
|
||
@override
|
||
String get tutorialPage7Headline => 'Choose how long to snooze';
|
||
|
||
@override
|
||
String get tutorialPage7Body =>
|
||
'When an alarm rings, there\'s no single \"snooze\": you choose 3, 5, or 10 minutes depending on what you need at that moment.';
|
||
|
||
@override
|
||
String get tutorialPage8Headline => 'Can\'t find it? Add it yourself';
|
||
|
||
@override
|
||
String get tutorialPage8Body =>
|
||
'In \"Your stations\" → Add custom station, paste the stream URL of a station that isn\'t in the search results. It\'s saved under \"Your stations\", also available in the car.';
|
||
|
||
@override
|
||
String get tutorialPage9Headline => 'Done — now you know the essentials';
|
||
|
||
@override
|
||
String get tutorialPage9BannerBody =>
|
||
'To watch this tutorial again anytime: Settings → Information → Help and tutorial.';
|
||
|
||
@override
|
||
String get indefiniteOption => 'Indefinite';
|
||
|
||
@override
|
||
String get invalidNumber => 'Invalid number';
|
||
|
||
@override
|
||
String get nameLabel => 'Name';
|
||
|
||
@override
|
||
String get notPlaying => 'Not playing';
|
||
|
||
@override
|
||
String get oneTimeOption => 'Once';
|
||
|
||
@override
|
||
String get pausePlaybackTooltip => 'Pause playback';
|
||
|
||
@override
|
||
String get playerQualityChangeAction => 'Change';
|
||
|
||
@override
|
||
String get playerToolEqLabel => 'Own EQ';
|
||
|
||
@override
|
||
String qualityOriginal(Object quality) {
|
||
return 'Original quality: $quality';
|
||
}
|
||
|
||
@override
|
||
String get qualityUnknown => 'Quality not reported';
|
||
|
||
@override
|
||
String get recordAction => 'Record';
|
||
|
||
@override
|
||
String get recordDurationTitle => 'Recording duration';
|
||
|
||
@override
|
||
String get recordRadioSubtitle => 'Choose how long you want to record.';
|
||
|
||
@override
|
||
String get recordRadioTitle => 'Record radio';
|
||
|
||
@override
|
||
String get recordingActiveTitle => 'Recording radio';
|
||
|
||
@override
|
||
String get recordingDirectTitle => 'Direct recording';
|
||
|
||
@override
|
||
String get recordingsOpenFolderPlainError =>
|
||
'Could not open the recordings folder';
|
||
|
||
@override
|
||
String get recordingsOpenLatest => 'Open latest recording';
|
||
|
||
@override
|
||
String get recordingsOpenLatestError => 'Could not open the latest recording';
|
||
|
||
@override
|
||
String get startLabel => 'Start';
|
||
|
||
@override
|
||
String get startPlaybackTooltip => 'Start playback';
|
||
|
||
@override
|
||
String get stopAction => 'Stop';
|
||
|
||
@override
|
||
String get stopPlaybackTooltip => 'Stop playback';
|
||
|
||
@override
|
||
String get weekdayShortMonday => 'Mon';
|
||
|
||
@override
|
||
String get weekdayShortTuesday => 'Tue';
|
||
|
||
@override
|
||
String get weekdayShortWednesday => 'Wed';
|
||
|
||
@override
|
||
String get weekdayShortThursday => 'Thu';
|
||
|
||
@override
|
||
String get weekdayShortFriday => 'Fri';
|
||
|
||
@override
|
||
String get weekdayShortSaturday => 'Sat';
|
||
|
||
@override
|
||
String get weekdayShortSunday => 'Sun';
|
||
|
||
@override
|
||
String stationCount(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count stations',
|
||
one: '1 station',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String get alarmIconLabel => 'Musical alarm';
|
||
|
||
@override
|
||
String get vacationIconLabel => 'Vacation mode';
|
||
|
||
@override
|
||
String get alarmAdvancedSectionTitle => 'Advanced';
|
||
|
||
@override
|
||
String get alarmInlineHourLabel => 'Hour';
|
||
|
||
@override
|
||
String get alarmInlineMinuteLabel => 'Minute';
|
||
|
||
@override
|
||
String get alarmVolumeRisingStatus => 'Turning up the volume';
|
||
|
||
@override
|
||
String get streamUrlHint => 'https://stream.example.com:8000/radio';
|
||
|
||
@override
|
||
String get advancedEqSectionTitle => 'Advanced Equalization Options';
|
||
|
||
@override
|
||
String get advancedEqEnableToggle => 'Enable per-device EQ';
|
||
|
||
@override
|
||
String get advancedEqEnableToggleSubtitle =>
|
||
'Automatically apply a different EQ preset when your audio output changes.';
|
||
|
||
@override
|
||
String get advancedEqKnownDevicesTitle => 'Known audio devices';
|
||
|
||
@override
|
||
String get advancedEqKnownDevicesEmpty =>
|
||
'No audio devices recorded yet. Connect a device to get started.';
|
||
|
||
@override
|
||
String advancedEqDevicePresetLabel(Object presetName) {
|
||
return 'Preset: $presetName';
|
||
}
|
||
|
||
@override
|
||
String preNoticeCountdown(int minutes) {
|
||
return 'Starts in $minutes min';
|
||
}
|
||
|
||
@override
|
||
String snoozeCountdown(int minutes) {
|
||
return 'Rings in $minutes min';
|
||
}
|
||
|
||
@override
|
||
String get snoozeAgainAction => 'Snooze again';
|
||
|
||
@override
|
||
String get alarmRingingNotificationTitle => 'PluriWave alarm';
|
||
|
||
@override
|
||
String get alarmFireChannelName => 'Ringing alarms';
|
||
|
||
@override
|
||
String get alarmFireChannelDescription =>
|
||
'Urgent sound and screen when a music alarm must ring';
|
||
|
||
@override
|
||
String get alarmPreNoticeChannelName => 'Alarm reminders';
|
||
|
||
@override
|
||
String get alarmPreNoticeChannelDescription =>
|
||
'Silent notifications before the alarm';
|
||
|
||
@override
|
||
String get openFolderChooserTitle => 'Open folder';
|
||
|
||
@override
|
||
String get openRecordingChooserTitle => 'Open recording';
|
||
|
||
@override
|
||
String get eqDeviceEditTitle => 'Edit device';
|
||
|
||
@override
|
||
String get eqDeviceNameLabel => 'Device name';
|
||
|
||
@override
|
||
String get eqDeviceNameHint => 'e.g. Living Room Speaker';
|
||
|
||
@override
|
||
String get eqDeviceNameConfirm => 'Save';
|
||
|
||
@override
|
||
String get eqDeviceConnected => 'Connected';
|
||
|
||
@override
|
||
String get eqDeviceActiveOutput => 'Audio is playing through this device';
|
||
|
||
@override
|
||
String get eqDeviceRemove => 'Remove device';
|
||
|
||
@override
|
||
String eqDeviceRemoved(Object device) {
|
||
return '$device removed';
|
||
}
|
||
|
||
@override
|
||
String get localMusicSectionTitle => 'Local music (Android Auto)';
|
||
|
||
@override
|
||
String get localMusicSectionDescription =>
|
||
'Pick a folder on this device to browse and play its audio files from the car.';
|
||
|
||
@override
|
||
String get localMusicFolderNotConfigured => 'No folder selected';
|
||
|
||
@override
|
||
String get localMusicFolderTitle => 'Local music folder';
|
||
|
||
@override
|
||
String get localMusicChoosePath => 'Choose folder';
|
||
|
||
@override
|
||
String get localMusicChangePath => 'Change folder';
|
||
|
||
@override
|
||
String get localMusicFolderUpdated => 'Local music folder updated';
|
||
|
||
@override
|
||
String localMusicFolderSaveError(Object error) {
|
||
return 'Could not save the folder: $error';
|
||
}
|
||
|
||
@override
|
||
String get localMusicFolderGenericName => 'Selected folder';
|
||
|
||
@override
|
||
String get welcomeHeadline => 'Your world, live';
|
||
|
||
@override
|
||
String get welcomeBody =>
|
||
'53,412 stations from 238 countries. Save your favorites, take them to the car, and wake up to them.';
|
||
|
||
@override
|
||
String get welcomeBullet1Title => 'Per-station equalizer';
|
||
|
||
@override
|
||
String get welcomeBullet1Subtitle => 'Plus a preset per output device';
|
||
|
||
@override
|
||
String get welcomeBullet2Title => 'Android Auto';
|
||
|
||
@override
|
||
String get welcomeBullet2Subtitle =>
|
||
'Your favorites and local music in the car';
|
||
|
||
@override
|
||
String get welcomeBullet3Title => 'Music alarms';
|
||
|
||
@override
|
||
String get welcomeBullet3Subtitle =>
|
||
'With gradual volume rise and vacation mode';
|
||
|
||
@override
|
||
String get welcomeCtaLabel => 'Start listening';
|
||
|
||
@override
|
||
String get eqCustomActionEnableLabel => 'Enable equalizer';
|
||
|
||
@override
|
||
String get eqCustomActionDisableLabel => 'Disable equalizer';
|
||
|
||
@override
|
||
String eqCustomActionPresetLabel(String preset) {
|
||
return 'Preset: $preset';
|
||
}
|
||
|
||
@override
|
||
String get alarmCardVacationPausedBadge => 'Paused for vacation';
|
||
|
||
@override
|
||
String get alarmCardSchedulingFailedMessage =>
|
||
'This alarm could not be registered with the system, so it may not ring.';
|
||
|
||
@override
|
||
String get alarmCardPreNoticeFailedMessage =>
|
||
'This alarm is scheduled, but its early reminder could not be set.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsExactAlarmsTitle => 'Exact alarm scheduling';
|
||
|
||
@override
|
||
String get alarmDiagnosticsExactAlarmsHint =>
|
||
'Lets the alarm ring at the exact minute you set, even while the phone is asleep.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNotificationsTitle => 'Notifications';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNotificationsHint =>
|
||
'Needed to show the alarm and the advance-warning notice.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsFullScreenTitle => 'Full-screen alarm display';
|
||
|
||
@override
|
||
String get alarmDiagnosticsFullScreenHint =>
|
||
'Lets the ringing screen appear automatically, even with the phone locked.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsBatteryTitle => 'Battery optimization';
|
||
|
||
@override
|
||
String get alarmDiagnosticsBatteryHint =>
|
||
'Stops the system from closing PluriWave in the background so the alarm can still fire.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNativeCountTitle =>
|
||
'Alarms registered with Android';
|
||
|
||
@override
|
||
String alarmDiagnosticsNativeCountValue(int count) {
|
||
return 'Currently registered: $count';
|
||
}
|
||
|
||
@override
|
||
String get alarmDiagnosticsNativeCountAttentionHint =>
|
||
'You have an alarm turned on, but none are registered with the system yet. Reopen PluriWave, or fix the items above first.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsManufacturerLabel => 'Manufacturer';
|
||
|
||
@override
|
||
String get alarmDiagnosticsSdkLabel => 'Android version (SDK)';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNeedsAttentionStatus => 'Needs attention';
|
||
|
||
@override
|
||
String get alarmDiagnosticsAutostartTitle =>
|
||
'One more manual step on this phone';
|
||
|
||
@override
|
||
String alarmDiagnosticsAutostartBody(String manufacturer) {
|
||
return '$manufacturer phones often close apps running in the background to save battery. There is no setting PluriWave can switch on its own — you need to turn on Autostart (sometimes called \"Auto-start\" or \"Background activity\") for PluriWave yourself. Look in Settings, under Apps or Battery, or in the phone\'s own Security app.';
|
||
}
|
||
|
||
@override
|
||
String get alarmDiagnosticsFixAction => 'Fix this';
|
||
|
||
@override
|
||
String get alarmDiagnosticsIntentUnavailable =>
|
||
'Couldn\'t open that settings screen on this phone. Try looking for it manually in Settings.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsUnavailableHint =>
|
||
'We couldn\'t check your alarm settings yet.';
|
||
|
||
@override
|
||
String get autoEqDisableOption => 'Disable';
|
||
|
||
@override
|
||
String get funcionPremium => 'Premium Feature';
|
||
|
||
@override
|
||
String get limiteAlarmasAlcanzado =>
|
||
'You\'ve reached the free 5-alarm limit.';
|
||
|
||
@override
|
||
String get desbloquearPremium => 'Unlock Premium';
|
||
|
||
@override
|
||
String get restaurarCompras => 'Restore purchases';
|
||
}
|