fix(i18n): normalize translations and fallbacks
This commit is contained in:
@@ -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 what’s 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';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user