fix(i18n): normalize translations and fallbacks
Build & Deploy PluriWave / Análisis de código (push) Successful in 38s
Build & Deploy PluriWave / Build APK + AAB release (push) Successful in 2m34s

This commit is contained in:
2026-06-03 21:20:08 +02:00
parent a5475ce118
commit 089b8b4227
46 changed files with 17720 additions and 4869 deletions
+740
View File
@@ -57,6 +57,30 @@ class AppLocalizationsEn extends AppLocalizations {
@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';
@@ -239,6 +263,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get stationNameLabel => 'Name *';
@override
String get unnamedStation => 'Unnamed station';
@override
String get requiredField => 'Required field';
@@ -448,4 +475,717 @@ class AppLocalizationsEn extends AppLocalizations {
String favoritesRemovedMessage(Object stationName) {
return '$stationName removed from favorites';
}
@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 searchEmptyTitle => 'Search for a station';
@override
String get searchNoResultsTitle => 'No results';
@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 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 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 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 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 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 get vacationsDefaultName => 'Vacation';
@override
String get newVacationRangeTitle => 'New vacation range';
@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 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 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 alarmScheduleOnce(Object date) {
return 'Once · $date';
}
@override
String alarmScheduleWeekdays(Object days) {
return 'Days: $days';
}
@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 => 'Review PluriWave features, tips and whats new.';
@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 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';
}