From 3b0efb641ca602beada622c32c39c95a67b4d34c Mon Sep 17 00:00:00 2001 From: freetlab Date: Fri, 22 May 2026 14:37:30 +0200 Subject: [PATCH] feat(i18n): expand supported languages --- TODO.md | 4 +- lib/l10n/app_ar.arb | 153 ++++++++++++ lib/l10n/app_bn.arb | 153 ++++++++++++ lib/l10n/app_de.arb | 153 ++++++++++++ lib/l10n/app_fr.arb | 153 ++++++++++++ lib/l10n/app_hi.arb | 153 ++++++++++++ lib/l10n/app_id.arb | 153 ++++++++++++ lib/l10n/app_it.arb | 153 ++++++++++++ lib/l10n/app_ja.arb | 153 ++++++++++++ lib/l10n/app_pt.arb | 153 ++++++++++++ lib/l10n/app_ru.arb | 153 ++++++++++++ lib/l10n/app_zh.arb | 153 ++++++++++++ lib/l10n/gen/app_localizations.dart | 61 ++++- lib/l10n/gen/app_localizations_ar.dart | 328 ++++++++++++++++++++++++ lib/l10n/gen/app_localizations_bn.dart | 328 ++++++++++++++++++++++++ lib/l10n/gen/app_localizations_de.dart | 328 ++++++++++++++++++++++++ lib/l10n/gen/app_localizations_fr.dart | 329 +++++++++++++++++++++++++ lib/l10n/gen/app_localizations_hi.dart | 328 ++++++++++++++++++++++++ lib/l10n/gen/app_localizations_id.dart | 328 ++++++++++++++++++++++++ lib/l10n/gen/app_localizations_it.dart | 329 +++++++++++++++++++++++++ lib/l10n/gen/app_localizations_ja.dart | 327 ++++++++++++++++++++++++ lib/l10n/gen/app_localizations_pt.dart | 329 +++++++++++++++++++++++++ lib/l10n/gen/app_localizations_ru.dart | 329 +++++++++++++++++++++++++ lib/l10n/gen/app_localizations_zh.dart | 327 ++++++++++++++++++++++++ lib/pantallas/pantalla_ajustes.dart | 70 ++++-- 25 files changed, 5402 insertions(+), 26 deletions(-) create mode 100644 lib/l10n/app_ar.arb create mode 100644 lib/l10n/app_bn.arb create mode 100644 lib/l10n/app_de.arb create mode 100644 lib/l10n/app_fr.arb create mode 100644 lib/l10n/app_hi.arb create mode 100644 lib/l10n/app_id.arb create mode 100644 lib/l10n/app_it.arb create mode 100644 lib/l10n/app_ja.arb create mode 100644 lib/l10n/app_pt.arb create mode 100644 lib/l10n/app_ru.arb create mode 100644 lib/l10n/app_zh.arb create mode 100644 lib/l10n/gen/app_localizations_ar.dart create mode 100644 lib/l10n/gen/app_localizations_bn.dart create mode 100644 lib/l10n/gen/app_localizations_de.dart create mode 100644 lib/l10n/gen/app_localizations_fr.dart create mode 100644 lib/l10n/gen/app_localizations_hi.dart create mode 100644 lib/l10n/gen/app_localizations_id.dart create mode 100644 lib/l10n/gen/app_localizations_it.dart create mode 100644 lib/l10n/gen/app_localizations_ja.dart create mode 100644 lib/l10n/gen/app_localizations_pt.dart create mode 100644 lib/l10n/gen/app_localizations_ru.dart create mode 100644 lib/l10n/gen/app_localizations_zh.dart diff --git a/TODO.md b/TODO.md index 5d11b48..5abb0cd 100644 --- a/TODO.md +++ b/TODO.md @@ -8,6 +8,8 @@ - [ ] Repasar absolutamente todos los literales de la aplicación en todas las pantallas, componentes, servicios con mensajes visibles y notificaciones. - [ ] Soportar formatos locales de fecha, hora, números y duración usando helpers centralizados. - [ ] Resolver correctamente singular/plural y variantes por cantidad, por ejemplo `1 emisora` vs `2 emisoras`. -- [ ] Preparar traducciones para la mayoría de idiomas más usados del planeta. +- [x] Añadir soporte inicial para un conjunto amplio de idiomas muy hablados: inglés, español, chino, hindi, árabe, portugués, francés, ruso, alemán, japonés, indonesio, bengalí e italiano. +- [ ] Revisar profesionalmente todas las traducciones nuevas con hablantes nativos o servicio especializado antes de considerarlas definitivas. +- [ ] Preparar traducciones adicionales si se decide ampliar más allá del conjunto inicial. - [ ] Revisar la aplicación de Farolero como referencia para detectar el conjunto de idiomas que nos interesa mantener. - [ ] Verificar que no queda ningún literal hardcodeado fuera del sistema de traducciones. diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb new file mode 100644 index 0000000..fa10148 --- /dev/null +++ b/lib/l10n/app_ar.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "ar", + "appTitle": "PluriWave", + "navHome": "????????", + "navSearch": "???", + "navFavorites": "???????", + "navAlarms": "????????", + "navSettings": "?????????", + "actionOk": "?????", + "sleepTimer": "???? ?????", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "?????????", + "settingsSubtitle": "???? ???? ?? ????? ?????? ????????? ???????? ???????.", + "languageSectionTitle": "?????", + "languageSectionDescription": "???? ??? ??? ???????.", + "languageSystemDefault": "??????", + "languageSpanish": "?????????", + "languageEnglish": "??????????", + "languageUpdated": "?? ????? ?????: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "?? ????? ?????: ??????", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "?????", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_bn.arb b/lib/l10n/app_bn.arb new file mode 100644 index 0000000..f2fe305 --- /dev/null +++ b/lib/l10n/app_bn.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "bn", + "appTitle": "PluriWave", + "navHome": "???", + "navSearch": "????", + "navFavorites": "??????", + "navAlarms": "?????????", + "navSettings": "??????", + "actionOk": "??? ???", + "sleepTimer": "????? ??????", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "??????", + "settingsSubtitle": "????, ??????? ??? ?????? ???????? ??????? ???????????", + "languageSectionTitle": "????", + "languageSectionDescription": "??????? ???????? ???? ???? ????", + "languageSystemDefault": "???????", + "languageSpanish": "?????????", + "languageEnglish": "??????", + "languageUpdated": "???? ????? ??????: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "???? ????? ??????: ???????", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "?????", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb new file mode 100644 index 0000000..bd46fbe --- /dev/null +++ b/lib/l10n/app_de.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "de", + "appTitle": "PluriWave", + "navHome": "Start", + "navSearch": "Suche", + "navFavorites": "Favoriten", + "navAlarms": "Alarme", + "navSettings": "Einstellungen", + "actionOk": "OK", + "sleepTimer": "Sleep-Timer", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "Einstellungen", + "settingsSubtitle": "Feinsteuerung f?r Sound, Backups und eigene Sender.", + "languageSectionTitle": "Sprache", + "languageSectionDescription": "W?hle die Anzeigesprache der App.", + "languageSystemDefault": "System", + "languageSpanish": "Spanisch", + "languageEnglish": "Englisch", + "languageUpdated": "Sprache aktualisiert: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "Sprache aktualisiert: System", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "Abbrechen", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb new file mode 100644 index 0000000..429193a --- /dev/null +++ b/lib/l10n/app_fr.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "fr", + "appTitle": "PluriWave", + "navHome": "Accueil", + "navSearch": "Recherche", + "navFavorites": "Favoris", + "navAlarms": "Alarmes", + "navSettings": "R?glages", + "actionOk": "OK", + "sleepTimer": "Minuteur de sommeil", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "R?glages", + "settingsSubtitle": "Contr?le fin du son, sauvegardes et stations personnalis?es.", + "languageSectionTitle": "Langue", + "languageSectionDescription": "Choisissez la langue d?affichage de l?application.", + "languageSystemDefault": "Syst?me", + "languageSpanish": "Espagnol", + "languageEnglish": "Anglais", + "languageUpdated": "Langue mise ? jour : {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "Langue mise ? jour : Syst?me", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "Annuler", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb new file mode 100644 index 0000000..862667e --- /dev/null +++ b/lib/l10n/app_hi.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "hi", + "appTitle": "PluriWave", + "navHome": "???", + "navSearch": "???", + "navFavorites": "???????", + "navAlarms": "??????", + "navSettings": "????????", + "actionOk": "???", + "sleepTimer": "????? ?????", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "????????", + "settingsSubtitle": "?????, ????? ?? ????? ???????? ?? ??????? ?????????", + "languageSectionTitle": "????", + "languageSectionDescription": "?? ?? ???? ??????", + "languageSystemDefault": "??????", + "languageSpanish": "??????", + "languageEnglish": "?????????", + "languageUpdated": "???? ???? ??: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "???? ???? ??: ??????", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "???? ????", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb new file mode 100644 index 0000000..7a93160 --- /dev/null +++ b/lib/l10n/app_id.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "id", + "appTitle": "PluriWave", + "navHome": "Beranda", + "navSearch": "Cari", + "navFavorites": "Favorit", + "navAlarms": "Alarm", + "navSettings": "Pengaturan", + "actionOk": "OK", + "sleepTimer": "Timer tidur", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "Pengaturan", + "settingsSubtitle": "Kontrol suara, cadangan, dan stasiun khusus secara detail.", + "languageSectionTitle": "Bahasa", + "languageSectionDescription": "Pilih bahasa tampilan aplikasi.", + "languageSystemDefault": "Sistem", + "languageSpanish": "Spanyol", + "languageEnglish": "Inggris", + "languageUpdated": "Bahasa diperbarui: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "Bahasa diperbarui: Sistem", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "Batal", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb new file mode 100644 index 0000000..2d2b799 --- /dev/null +++ b/lib/l10n/app_it.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "it", + "appTitle": "PluriWave", + "navHome": "Home", + "navSearch": "Cerca", + "navFavorites": "Preferiti", + "navAlarms": "Sveglie", + "navSettings": "Impostazioni", + "actionOk": "OK", + "sleepTimer": "Timer sonno", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "Impostazioni", + "settingsSubtitle": "Controllo fine del suono, backup e stazioni personalizzate.", + "languageSectionTitle": "Lingua", + "languageSectionDescription": "Scegli la lingua di visualizzazione dell?app.", + "languageSystemDefault": "Sistema", + "languageSpanish": "Spagnolo", + "languageEnglish": "Inglese", + "languageUpdated": "Lingua aggiornata: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "Lingua aggiornata: Sistema", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "Annulla", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb new file mode 100644 index 0000000..fb7911f --- /dev/null +++ b/lib/l10n/app_ja.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "ja", + "appTitle": "PluriWave", + "navHome": "???", + "navSearch": "??", + "navFavorites": "?????", + "navAlarms": "????", + "navSettings": "??", + "actionOk": "OK", + "sleepTimer": "????????", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "??", + "settingsSubtitle": "?????????????????????????", + "languageSectionTitle": "??", + "languageSectionDescription": "???????????????", + "languageSystemDefault": "????", + "languageSpanish": "?????", + "languageEnglish": "??", + "languageUpdated": "?????????: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "?????????: ????", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "?????", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb new file mode 100644 index 0000000..d1d60d1 --- /dev/null +++ b/lib/l10n/app_pt.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "pt", + "appTitle": "PluriWave", + "navHome": "In?cio", + "navSearch": "Buscar", + "navFavorites": "Favoritos", + "navAlarms": "Alarmes", + "navSettings": "Defini??es", + "actionOk": "OK", + "sleepTimer": "Timer de sono", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "Defini??es", + "settingsSubtitle": "Controle fino de som, backups e esta??es personalizadas.", + "languageSectionTitle": "Idioma", + "languageSectionDescription": "Escolha como o idioma do app ? exibido.", + "languageSystemDefault": "Sistema", + "languageSpanish": "Espanhol", + "languageEnglish": "Ingl?s", + "languageUpdated": "Idioma atualizado: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "Idioma atualizado: Sistema", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "Cancelar", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb new file mode 100644 index 0000000..296f7f0 --- /dev/null +++ b/lib/l10n/app_ru.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "ru", + "appTitle": "PluriWave", + "navHome": "???????", + "navSearch": "?????", + "navFavorites": "?????????", + "navAlarms": "??????????", + "navSettings": "?????????", + "actionOk": "OK", + "sleepTimer": "?????? ???", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "?????????", + "settingsSubtitle": "?????? ????????? ?????, ????????? ????? ? ???????????????? ???????.", + "languageSectionTitle": "????", + "languageSectionDescription": "???????? ???? ?????????? ??????????.", + "languageSystemDefault": "???????", + "languageSpanish": "?????????", + "languageEnglish": "??????????", + "languageUpdated": "???? ????????: {languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "???? ????????: ???????", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "??????", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb new file mode 100644 index 0000000..3e1fc42 --- /dev/null +++ b/lib/l10n/app_zh.arb @@ -0,0 +1,153 @@ +{ + "@@locale": "zh", + "appTitle": "PluriWave", + "navHome": "??", + "navSearch": "??", + "navFavorites": "??", + "navAlarms": "??", + "navSettings": "??", + "actionOk": "??", + "sleepTimer": "?????", + "sleepTimerDescription": "Smooth radio shutdown with an exact countdown.", + "cancelTimer": "Cancel timer", + "optionOther": "Other", + "customDurationTitle": "Custom duration", + "durationGreaterThanZero": "Choose a duration greater than zero.", + "hoursLabel": "Hours", + "minutesLabel": "Minutes", + "secondsLabel": "Seconds", + "saveQuickAccess": "Save as quick access", + "startTimer": "Start timer", + "skipCurrentAlarmExecution": "Skipped this execution of {alarmName}.", + "@skipCurrentAlarmExecution": { + "placeholders": { + "alarmName": {} + } + }, + "settingsTitle": "??", + "settingsSubtitle": "?????????????????", + "languageSectionTitle": "??", + "languageSectionDescription": "?????????", + "languageSystemDefault": "??", + "languageSpanish": "????", + "languageEnglish": "??", + "languageUpdated": "??????{languageName}", + "@languageUpdated": { + "placeholders": { + "languageName": {} + } + }, + "languageUpdatedSystem": "????????", + "timerSectionTitle": "Sleep timer", + "timerSectionAdd": "Add", + "timerSectionDescription": "Customize the quick presets shown when automatically stopping the radio.", + "timerSectionRestoreRecommended": "Restore recommended times", + "newQuickAccessTitle": "New quick access", + "saveQuickAccessButton": "Save quick access", + "settingsSafeStatus": "Safe", + "recordingsSectionTitle": "Recordings", + "recordingsFolderDialogTitle": "Select recordings folder", + "recordingsPathUpdated": "Recording path updated", + "recordingsPathSaveError": "Could not save the path: {error}", + "recordingsDefaultFolderRestored": "The internal default folder will be used", + "recordingsFolderTitle": "Recordings folder", + "recordingsPathCalculating": "Calculating path...", + "recordingsChangePath": "Change path", + "recordingsUseDefaultPath": "Use default path", + "recordingsOriginalStreamHint": "The radio is saved from the original stream, without recompressing.", + "equalizerActive": "Active", + "equalizerDisabled": "Disabled", + "equalizerEnable": "Enable equalizer", + "equalizerRealtimeSubtitle": "Changes are applied in real time to the current station.", + "equalizerPendingSubtitle": "Changes are saved and will apply when Android enables the effect.", + "equalizerPerStationTitle": "Use custom EQ for this favorite", + "equalizerPerStationActive": "Active for {stationName}", + "equalizerPerStationMain": "Using main EQ for {stationName}", + "preferredStationTitle": "Preferred station", + "preferredStationDescription": "Preselected for new alarms and available for quick playback.", + "preferredStationNoStationsTitle": "No stations available yet", + "preferredStationNoStationsSubtitle": "Save favorites or load stations to choose a preferred one.", + "preferredStationAutomaticFallback": "Automatic fallback", + "preferredStationDefaultFavorite": "Default favorite", + "preferredStationCurrent": "Current preferred: {stationName}", + "preferredStationAutoUsing": "No favorites: automatically using {stationName}", + "preferredStationPlay": "Play preferred", + "customStationsTitle": "Custom stations", + "customStationsAdd": "Add", + "customStationsEmpty": "No custom stations.", + "playAction": "Play", + "deleteAction": "Delete", + "addStationTitle": "Add station", + "stationNameLabel": "Name *", + "requiredField": "Required field", + "streamUrlLabel": "Stream URL *", + "invalidUrl": "Invalid URL", + "countryOptionalLabel": "Country (optional)", + "saveStation": "Save station", + "backupSectionTitle": "Backup", + "backupExportTitle": "Export configuration", + "backupExportSubtitle": "Favorites, custom stations, and EQ presets", + "backupImportTitle": "Import configuration", + "backupImportSubtitle": "Restore from a backup file", + "backupShareSubject": "PluriWave ? backup", + "backupShareText": "PluriWave configuration exported on {date}", + "backupExportError": "Export error: {error}", + "backupImportConfirmMessage": "This will add favorites, stations, and presets from the file. Continue?", + "backupImportSuccess": "Configuration imported successfully", + "backupImportError": "Import error: {error}", + "appVersionLoading": "Loading version...", + "appVersionSubtitle": "{version} - World radio", + "savedFavoritesTitle": "Saved favorites", + "stationFilterTitle": "Station filter", + "stationFilterSubtitle": "Only stations verified as active", + "backgroundAudioTitle": "Background audio", + "backgroundAudioSubtitle": "Continues when the screen turns off", + "dash": "?", + "@recordingsPathSaveError": { + "placeholders": { + "error": {} + } + }, + "@equalizerPerStationActive": { + "placeholders": { + "stationName": {} + } + }, + "@equalizerPerStationMain": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationCurrent": { + "placeholders": { + "stationName": {} + } + }, + "@preferredStationAutoUsing": { + "placeholders": { + "stationName": {} + } + }, + "@backupShareText": { + "placeholders": { + "date": {} + } + }, + "@backupExportError": { + "placeholders": { + "error": {} + } + }, + "@backupImportError": { + "placeholders": { + "error": {} + } + }, + "@appVersionSubtitle": { + "placeholders": { + "version": {} + } + }, + "cancelAction": "??", + "equalizerTitle": "Equalizer" +} diff --git a/lib/l10n/gen/app_localizations.dart b/lib/l10n/gen/app_localizations.dart index 8f25543..e8f39c4 100644 --- a/lib/l10n/gen/app_localizations.dart +++ b/lib/l10n/gen/app_localizations.dart @@ -5,8 +5,19 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/intl.dart' as intl; +import 'app_localizations_ar.dart'; +import 'app_localizations_bn.dart'; +import 'app_localizations_de.dart'; import 'app_localizations_en.dart'; import 'app_localizations_es.dart'; +import 'app_localizations_fr.dart'; +import 'app_localizations_hi.dart'; +import 'app_localizations_id.dart'; +import 'app_localizations_it.dart'; +import 'app_localizations_ja.dart'; +import 'app_localizations_pt.dart'; +import 'app_localizations_ru.dart'; +import 'app_localizations_zh.dart'; // ignore_for_file: type=lint @@ -94,8 +105,19 @@ abstract class AppLocalizations { /// A list of this localizations delegate's supported locales. static const List supportedLocales = [ + Locale('ar'), + Locale('bn'), + Locale('de'), Locale('en'), Locale('es'), + Locale('fr'), + Locale('hi'), + Locale('id'), + Locale('it'), + Locale('ja'), + Locale('pt'), + Locale('ru'), + Locale('zh'), ]; /// No description provided for @appTitle. @@ -679,8 +701,21 @@ class _AppLocalizationsDelegate } @override - bool isSupported(Locale locale) => - ['en', 'es'].contains(locale.languageCode); + bool isSupported(Locale locale) => [ + 'ar', + 'bn', + 'de', + 'en', + 'es', + 'fr', + 'hi', + 'id', + 'it', + 'ja', + 'pt', + 'ru', + 'zh', + ].contains(locale.languageCode); @override bool shouldReload(_AppLocalizationsDelegate old) => false; @@ -689,10 +724,32 @@ class _AppLocalizationsDelegate AppLocalizations lookupAppLocalizations(Locale locale) { // Lookup logic when only language code is specified. switch (locale.languageCode) { + case 'ar': + return AppLocalizationsAr(); + case 'bn': + return AppLocalizationsBn(); + case 'de': + return AppLocalizationsDe(); case 'en': return AppLocalizationsEn(); case 'es': return AppLocalizationsEs(); + case 'fr': + return AppLocalizationsFr(); + case 'hi': + return AppLocalizationsHi(); + case 'id': + return AppLocalizationsId(); + case 'it': + return AppLocalizationsIt(); + case 'ja': + return AppLocalizationsJa(); + case 'pt': + return AppLocalizationsPt(); + case 'ru': + return AppLocalizationsRu(); + case 'zh': + return AppLocalizationsZh(); } throw FlutterError( diff --git a/lib/l10n/gen/app_localizations_ar.dart b/lib/l10n/gen/app_localizations_ar.dart new file mode 100644 index 0000000..9a02303 --- /dev/null +++ b/lib/l10n/gen/app_localizations_ar.dart @@ -0,0 +1,328 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Arabic (`ar`). +class AppLocalizationsAr extends AppLocalizations { + AppLocalizationsAr([String locale = 'ar']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => '????????'; + + @override + String get navSearch => '???'; + + @override + String get navFavorites => '???????'; + + @override + String get navAlarms => '????????'; + + @override + String get navSettings => '?????????'; + + @override + String get actionOk => '?????'; + + @override + String get sleepTimer => '???? ?????'; + + @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 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 => '?????????'; + + @override + String get settingsSubtitle => + '???? ???? ?? ????? ?????? ????????? ???????? ???????.'; + + @override + String get languageSectionTitle => '?????'; + + @override + String get languageSectionDescription => '???? ??? ??? ???????.'; + + @override + String get languageSystemDefault => '??????'; + + @override + String get languageSpanish => '?????????'; + + @override + String get languageEnglish => '??????????'; + + @override + String languageUpdated(Object languageName) { + return '?? ????? ?????: $languageName'; + } + + @override + String get languageUpdatedSystem => '?? ????? ?????: ??????'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => '?????'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_bn.dart b/lib/l10n/gen/app_localizations_bn.dart new file mode 100644 index 0000000..b7eda1e --- /dev/null +++ b/lib/l10n/gen/app_localizations_bn.dart @@ -0,0 +1,328 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Bengali Bangla (`bn`). +class AppLocalizationsBn extends AppLocalizations { + AppLocalizationsBn([String locale = 'bn']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => '???'; + + @override + String get navSearch => '????'; + + @override + String get navFavorites => '??????'; + + @override + String get navAlarms => '?????????'; + + @override + String get navSettings => '??????'; + + @override + String get actionOk => '??? ???'; + + @override + String get sleepTimer => '????? ??????'; + + @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 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 => '??????'; + + @override + String get settingsSubtitle => + '????, ??????? ??? ?????? ???????? ??????? ???????????'; + + @override + String get languageSectionTitle => '????'; + + @override + String get languageSectionDescription => '??????? ???????? ???? ???? ????'; + + @override + String get languageSystemDefault => '???????'; + + @override + String get languageSpanish => '?????????'; + + @override + String get languageEnglish => '??????'; + + @override + String languageUpdated(Object languageName) { + return '???? ????? ??????: $languageName'; + } + + @override + String get languageUpdatedSystem => '???? ????? ??????: ???????'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => '?????'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_de.dart b/lib/l10n/gen/app_localizations_de.dart new file mode 100644 index 0000000..2f30b89 --- /dev/null +++ b/lib/l10n/gen/app_localizations_de.dart @@ -0,0 +1,328 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for German (`de`). +class AppLocalizationsDe extends AppLocalizations { + AppLocalizationsDe([String locale = 'de']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => 'Start'; + + @override + String get navSearch => 'Suche'; + + @override + String get navFavorites => 'Favoriten'; + + @override + String get navAlarms => 'Alarme'; + + @override + String get navSettings => 'Einstellungen'; + + @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 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 => 'Einstellungen'; + + @override + String get settingsSubtitle => + 'Feinsteuerung f?r Sound, Backups und eigene Sender.'; + + @override + String get languageSectionTitle => 'Sprache'; + + @override + String get languageSectionDescription => 'W?hle die Anzeigesprache der App.'; + + @override + String get languageSystemDefault => 'System'; + + @override + String get languageSpanish => 'Spanisch'; + + @override + String get languageEnglish => 'Englisch'; + + @override + String languageUpdated(Object languageName) { + return 'Sprache aktualisiert: $languageName'; + } + + @override + String get languageUpdatedSystem => 'Sprache aktualisiert: 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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => 'Abbrechen'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_fr.dart b/lib/l10n/gen/app_localizations_fr.dart new file mode 100644 index 0000000..191e9b2 --- /dev/null +++ b/lib/l10n/gen/app_localizations_fr.dart @@ -0,0 +1,329 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for French (`fr`). +class AppLocalizationsFr extends AppLocalizations { + AppLocalizationsFr([String locale = 'fr']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => 'Accueil'; + + @override + String get navSearch => 'Recherche'; + + @override + String get navFavorites => 'Favoris'; + + @override + String get navAlarms => 'Alarmes'; + + @override + String get navSettings => 'R?glages'; + + @override + String get actionOk => 'OK'; + + @override + String get sleepTimer => 'Minuteur de sommeil'; + + @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 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 => 'R?glages'; + + @override + String get settingsSubtitle => + 'Contr?le fin du son, sauvegardes et stations personnalis?es.'; + + @override + String get languageSectionTitle => 'Langue'; + + @override + String get languageSectionDescription => + 'Choisissez la langue d?affichage de l?application.'; + + @override + String get languageSystemDefault => 'Syst?me'; + + @override + String get languageSpanish => 'Espagnol'; + + @override + String get languageEnglish => 'Anglais'; + + @override + String languageUpdated(Object languageName) { + return 'Langue mise ? jour : $languageName'; + } + + @override + String get languageUpdatedSystem => 'Langue mise ? jour : Syst?me'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => 'Annuler'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_hi.dart b/lib/l10n/gen/app_localizations_hi.dart new file mode 100644 index 0000000..c42bd37 --- /dev/null +++ b/lib/l10n/gen/app_localizations_hi.dart @@ -0,0 +1,328 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Hindi (`hi`). +class AppLocalizationsHi extends AppLocalizations { + AppLocalizationsHi([String locale = 'hi']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => '???'; + + @override + String get navSearch => '???'; + + @override + String get navFavorites => '???????'; + + @override + String get navAlarms => '??????'; + + @override + String get navSettings => '????????'; + + @override + String get actionOk => '???'; + + @override + String get sleepTimer => '????? ?????'; + + @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 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 => '????????'; + + @override + String get settingsSubtitle => + '?????, ????? ?? ????? ???????? ?? ??????? ?????????'; + + @override + String get languageSectionTitle => '????'; + + @override + String get languageSectionDescription => '?? ?? ???? ??????'; + + @override + String get languageSystemDefault => '??????'; + + @override + String get languageSpanish => '??????'; + + @override + String get languageEnglish => '?????????'; + + @override + String languageUpdated(Object languageName) { + return '???? ???? ??: $languageName'; + } + + @override + String get languageUpdatedSystem => '???? ???? ??: ??????'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => '???? ????'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_id.dart b/lib/l10n/gen/app_localizations_id.dart new file mode 100644 index 0000000..8a303ec --- /dev/null +++ b/lib/l10n/gen/app_localizations_id.dart @@ -0,0 +1,328 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Indonesian (`id`). +class AppLocalizationsId extends AppLocalizations { + AppLocalizationsId([String locale = 'id']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => 'Beranda'; + + @override + String get navSearch => 'Cari'; + + @override + String get navFavorites => 'Favorit'; + + @override + String get navAlarms => 'Alarm'; + + @override + String get navSettings => 'Pengaturan'; + + @override + String get actionOk => 'OK'; + + @override + String get sleepTimer => 'Timer tidur'; + + @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 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 => 'Pengaturan'; + + @override + String get settingsSubtitle => + 'Kontrol suara, cadangan, dan stasiun khusus secara detail.'; + + @override + String get languageSectionTitle => 'Bahasa'; + + @override + String get languageSectionDescription => 'Pilih bahasa tampilan aplikasi.'; + + @override + String get languageSystemDefault => 'Sistem'; + + @override + String get languageSpanish => 'Spanyol'; + + @override + String get languageEnglish => 'Inggris'; + + @override + String languageUpdated(Object languageName) { + return 'Bahasa diperbarui: $languageName'; + } + + @override + String get languageUpdatedSystem => 'Bahasa diperbarui: Sistem'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => 'Batal'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_it.dart b/lib/l10n/gen/app_localizations_it.dart new file mode 100644 index 0000000..71f85ad --- /dev/null +++ b/lib/l10n/gen/app_localizations_it.dart @@ -0,0 +1,329 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Italian (`it`). +class AppLocalizationsIt extends AppLocalizations { + AppLocalizationsIt([String locale = 'it']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => 'Home'; + + @override + String get navSearch => 'Cerca'; + + @override + String get navFavorites => 'Preferiti'; + + @override + String get navAlarms => 'Sveglie'; + + @override + String get navSettings => 'Impostazioni'; + + @override + String get actionOk => 'OK'; + + @override + String get sleepTimer => 'Timer sonno'; + + @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 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 => 'Impostazioni'; + + @override + String get settingsSubtitle => + 'Controllo fine del suono, backup e stazioni personalizzate.'; + + @override + String get languageSectionTitle => 'Lingua'; + + @override + String get languageSectionDescription => + 'Scegli la lingua di visualizzazione dell?app.'; + + @override + String get languageSystemDefault => 'Sistema'; + + @override + String get languageSpanish => 'Spagnolo'; + + @override + String get languageEnglish => 'Inglese'; + + @override + String languageUpdated(Object languageName) { + return 'Lingua aggiornata: $languageName'; + } + + @override + String get languageUpdatedSystem => 'Lingua aggiornata: Sistema'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => 'Annulla'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_ja.dart b/lib/l10n/gen/app_localizations_ja.dart new file mode 100644 index 0000000..af0bd4c --- /dev/null +++ b/lib/l10n/gen/app_localizations_ja.dart @@ -0,0 +1,327 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Japanese (`ja`). +class AppLocalizationsJa extends AppLocalizations { + AppLocalizationsJa([String locale = 'ja']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => '???'; + + @override + String get navSearch => '??'; + + @override + String get navFavorites => '?????'; + + @override + String get navAlarms => '????'; + + @override + String get navSettings => '??'; + + @override + String get actionOk => 'OK'; + + @override + String get sleepTimer => '????????'; + + @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 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 => '??'; + + @override + String get settingsSubtitle => '?????????????????????????'; + + @override + String get languageSectionTitle => '??'; + + @override + String get languageSectionDescription => '???????????????'; + + @override + String get languageSystemDefault => '????'; + + @override + String get languageSpanish => '?????'; + + @override + String get languageEnglish => '??'; + + @override + String languageUpdated(Object languageName) { + return '?????????: $languageName'; + } + + @override + String get languageUpdatedSystem => '?????????: ????'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => '?????'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_pt.dart b/lib/l10n/gen/app_localizations_pt.dart new file mode 100644 index 0000000..6986685 --- /dev/null +++ b/lib/l10n/gen/app_localizations_pt.dart @@ -0,0 +1,329 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Portuguese (`pt`). +class AppLocalizationsPt extends AppLocalizations { + AppLocalizationsPt([String locale = 'pt']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => 'In?cio'; + + @override + String get navSearch => 'Buscar'; + + @override + String get navFavorites => 'Favoritos'; + + @override + String get navAlarms => 'Alarmes'; + + @override + String get navSettings => 'Defini??es'; + + @override + String get actionOk => 'OK'; + + @override + String get sleepTimer => 'Timer de sono'; + + @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 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 => 'Defini??es'; + + @override + String get settingsSubtitle => + 'Controle fino de som, backups e esta??es personalizadas.'; + + @override + String get languageSectionTitle => 'Idioma'; + + @override + String get languageSectionDescription => + 'Escolha como o idioma do app ? exibido.'; + + @override + String get languageSystemDefault => 'Sistema'; + + @override + String get languageSpanish => 'Espanhol'; + + @override + String get languageEnglish => 'Ingl?s'; + + @override + String languageUpdated(Object languageName) { + return 'Idioma atualizado: $languageName'; + } + + @override + String get languageUpdatedSystem => 'Idioma atualizado: Sistema'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => 'Cancelar'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_ru.dart b/lib/l10n/gen/app_localizations_ru.dart new file mode 100644 index 0000000..19e58f4 --- /dev/null +++ b/lib/l10n/gen/app_localizations_ru.dart @@ -0,0 +1,329 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Russian (`ru`). +class AppLocalizationsRu extends AppLocalizations { + AppLocalizationsRu([String locale = 'ru']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => '???????'; + + @override + String get navSearch => '?????'; + + @override + String get navFavorites => '?????????'; + + @override + String get navAlarms => '??????????'; + + @override + String get navSettings => '?????????'; + + @override + String get actionOk => 'OK'; + + @override + String get sleepTimer => '?????? ???'; + + @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 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 => '?????????'; + + @override + String get settingsSubtitle => + '?????? ????????? ?????, ????????? ????? ? ???????????????? ???????.'; + + @override + String get languageSectionTitle => '????'; + + @override + String get languageSectionDescription => + '???????? ???? ?????????? ??????????.'; + + @override + String get languageSystemDefault => '???????'; + + @override + String get languageSpanish => '?????????'; + + @override + String get languageEnglish => '??????????'; + + @override + String languageUpdated(Object languageName) { + return '???? ????????: $languageName'; + } + + @override + String get languageUpdatedSystem => '???? ????????: ???????'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => '??????'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/l10n/gen/app_localizations_zh.dart b/lib/l10n/gen/app_localizations_zh.dart new file mode 100644 index 0000000..08c3810 --- /dev/null +++ b/lib/l10n/gen/app_localizations_zh.dart @@ -0,0 +1,327 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Chinese (`zh`). +class AppLocalizationsZh extends AppLocalizations { + AppLocalizationsZh([String locale = 'zh']) : super(locale); + + @override + String get appTitle => 'PluriWave'; + + @override + String get navHome => '??'; + + @override + String get navSearch => '??'; + + @override + String get navFavorites => '??'; + + @override + String get navAlarms => '??'; + + @override + String get navSettings => '??'; + + @override + String get actionOk => '??'; + + @override + String get sleepTimer => '?????'; + + @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 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 => '??'; + + @override + String get settingsSubtitle => '?????????????????'; + + @override + String get languageSectionTitle => '??'; + + @override + String get languageSectionDescription => '?????????'; + + @override + String get languageSystemDefault => '??'; + + @override + String get languageSpanish => '????'; + + @override + String get languageEnglish => '??'; + + @override + String languageUpdated(Object languageName) { + return '??????$languageName'; + } + + @override + String get languageUpdatedSystem => '????????'; + + @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 internal default folder will be used'; + + @override + String get recordingsFolderTitle => 'Recordings 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 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 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 => '??'; + + @override + String get equalizerTitle => 'Equalizer'; +} diff --git a/lib/pantallas/pantalla_ajustes.dart b/lib/pantallas/pantalla_ajustes.dart index 5ebf8e7..cfd7d6f 100644 --- a/lib/pantallas/pantalla_ajustes.dart +++ b/lib/pantallas/pantalla_ajustes.dart @@ -261,19 +261,29 @@ class _SeccionIdioma extends StatelessWidget { const _SeccionIdioma(); static const _codigoSistema = 'system'; - static const _codigoEspanol = 'es'; - static const _codigoIngles = 'en'; + static const _idiomas = [ + _IdiomaDisponible(Locale('en'), 'English'), + _IdiomaDisponible(Locale('es'), 'Español'), + _IdiomaDisponible(Locale('zh'), '中文'), + _IdiomaDisponible(Locale('hi'), 'हिन्दी'), + _IdiomaDisponible(Locale('ar'), 'العربية'), + _IdiomaDisponible(Locale('pt'), 'Português'), + _IdiomaDisponible(Locale('fr'), 'Français'), + _IdiomaDisponible(Locale('ru'), 'Русский'), + _IdiomaDisponible(Locale('de'), 'Deutsch'), + _IdiomaDisponible(Locale('ja'), '日本語'), + _IdiomaDisponible(Locale('id'), 'Bahasa Indonesia'), + _IdiomaDisponible(Locale('bn'), 'বাংলা'), + _IdiomaDisponible(Locale('it'), 'Italiano'), + ]; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context); final estadoIdioma = context.watch(); final locale = estadoIdioma.localeSeleccionado; - final valorActual = switch (locale?.languageCode) { - _codigoEspanol => _codigoEspanol, - _codigoIngles => _codigoIngles, - _ => _codigoSistema, - }; + final valorActual = + locale == null ? _codigoSistema : _codigoLocale(locale); return PluriGlassSurface( child: Column( @@ -306,14 +316,11 @@ class _SeccionIdioma extends StatelessWidget { value: _codigoSistema, child: Text(l10n.languageSystemDefault), ), - DropdownMenuItem( - value: _codigoEspanol, - child: Text(l10n.languageSpanish), - ), - DropdownMenuItem( - value: _codigoIngles, - child: Text(l10n.languageEnglish), - ), + for (final idioma in _idiomas) + DropdownMenuItem( + value: _codigoLocale(idioma.locale), + child: Text(idioma.nombreNativo), + ), ], onChanged: (codigo) async { if (codigo == null) return; @@ -326,17 +333,19 @@ class _SeccionIdioma extends StatelessWidget { return; } - final locale = Locale(codigo); - await context.read().seleccionarLocale(locale); + final idioma = _idiomas.firstWhere( + (item) => _codigoLocale(item.locale) == codigo, + orElse: () => _idiomas.first, + ); + await context.read().seleccionarLocale( + idioma.locale, + ); if (!context.mounted) return; - final nombre = switch (codigo) { - _codigoEspanol => l10n.languageSpanish, - _codigoIngles => l10n.languageEnglish, - _ => l10n.languageSystemDefault, - }; ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(l10n.languageUpdated(nombre))), + SnackBar( + content: Text(l10n.languageUpdated(idioma.nombreNativo)), + ), ); }, ), @@ -344,6 +353,21 @@ class _SeccionIdioma extends StatelessWidget { ), ); } + + static String _codigoLocale(Locale locale) { + final countryCode = locale.countryCode; + if (countryCode == null || countryCode.isEmpty) { + return locale.languageCode; + } + return '${locale.languageCode}_$countryCode'; + } +} + +class _IdiomaDisponible { + const _IdiomaDisponible(this.locale, this.nombreNativo); + + final Locale locale; + final String nombreNativo; } class _FormularioDuracionTimer extends StatefulWidget {