Files
pluriwave/lib/l10n/gen/app_localizations_en.dart
T
FreeTLab aa0b242374 feat(iap): add freemium unlock via one-time in-app purchase
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.
2026-08-10 20:37:07 +02:00

1860 lines
44 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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';
}