From 157d52996e0cfe0a3d5ee53ce7cfed0c6647d361 Mon Sep 17 00:00:00 2001 From: freetlab Date: Fri, 22 May 2026 16:58:09 +0200 Subject: [PATCH] fix(i18n): localize settings order copy --- TODO.md | 21 +++++----- lib/l10n/app_ar.arb | 4 ++ lib/l10n/app_bn.arb | 4 ++ lib/l10n/app_de.arb | 4 ++ lib/l10n/app_en.arb | 4 ++ lib/l10n/app_es.arb | 18 ++++---- lib/l10n/app_fr.arb | 4 ++ lib/l10n/app_hi.arb | 4 ++ lib/l10n/app_id.arb | 4 ++ lib/l10n/app_it.arb | 4 ++ lib/l10n/app_ja.arb | 4 ++ lib/l10n/app_pt.arb | 4 ++ lib/l10n/app_ru.arb | 4 ++ lib/l10n/app_zh.arb | 4 ++ lib/l10n/gen/app_localizations.dart | 38 +++++++++++++---- lib/l10n/gen/app_localizations_ar.dart | 13 ++++++ lib/l10n/gen/app_localizations_bn.dart | 13 ++++++ lib/l10n/gen/app_localizations_de.dart | 13 ++++++ lib/l10n/gen/app_localizations_en.dart | 13 ++++++ lib/l10n/gen/app_localizations_es.dart | 27 ++++++++---- lib/l10n/gen/app_localizations_fr.dart | 13 ++++++ lib/l10n/gen/app_localizations_hi.dart | 13 ++++++ lib/l10n/gen/app_localizations_id.dart | 13 ++++++ lib/l10n/gen/app_localizations_it.dart | 13 ++++++ lib/l10n/gen/app_localizations_ja.dart | 13 ++++++ lib/l10n/gen/app_localizations_pt.dart | 13 ++++++ lib/l10n/gen/app_localizations_ru.dart | 13 ++++++ lib/l10n/gen/app_localizations_zh.dart | 13 ++++++ lib/pantallas/pantalla_ajustes.dart | 57 +++++++++++++------------- 29 files changed, 306 insertions(+), 59 deletions(-) diff --git a/TODO.md b/TODO.md index cb7a479..db62f12 100644 --- a/TODO.md +++ b/TODO.md @@ -33,17 +33,18 @@ ## Búsqueda de emisoras -- [ ] Añadir filtro de calidad mínima de reproducción en kbps en el buscador de emisoras. +- [x] Añadir filtro de calidad mínima de reproducción en kbps en el buscador de emisoras. + ## Favoritos -- [ ] Revisar el sistema de guardado de favoritos en instalaciones nuevas y migradas: inicializaci?n de SQLite, creaci?n de ruta/base de datos, migraciones de columnas y refresco de estado tras guardar. Reporte: en un m?vil no se est?n guardando favoritos. -- [ ] A?adir tests de regresi?n para favoritos en base de datos real/migrada, incluyendo esquemas antiguos y primera instalaci?n limpia. +- [ ] Revisar el sistema de guardado de favoritos en instalaciones nuevas y migradas: inicialización de SQLite, creación de ruta/base de datos, migraciones de columnas y refresco de estado tras guardar. Reporte: en un móvil no se están guardando favoritos. +- [ ] Añadir tests de regresión para favoritos en base de datos real/migrada, incluyendo esquemas antiguos y primera instalación limpia. + ## Agrupaciones de favoritos -- [ ] Permitir crear listas de favoritos con nombre corto configurable por el usuario desde Ajustes. -- [ ] Mantener siempre un grupo interno por defecto traducible llamado "Sin asignar", no editable y no borrable. -- [ ] Gestionar desde la vista Favoritos qu? emisoras pertenecen a cada agrupaci?n/lista. -- [x] Dise?ar migraci?n SQLite base para asociar favoritos existentes al grupo "Sin asignar" sin perder datos. -- [ ] Completar UI en Ajustes para crear, editar y borrar listas de favoritos. -- [ ] Completar UI en Favoritos para mover emisoras entre listas. - +- [x] Permitir crear listas de favoritos con nombre corto configurable por el usuario desde Ajustes. +- [x] Mantener siempre un grupo interno por defecto traducible llamado "Sin asignar", no editable y no borrable. +- [x] Gestionar desde la vista Favoritos qué emisoras pertenecen a cada agrupación/lista. +- [x] Diseñar migración SQLite base para asociar favoritos existentes al grupo "Sin asignar" sin perder datos. +- [x] Completar UI en Ajustes para crear, editar y borrar listas de favoritos. +- [x] Completar UI en Favoritos para mover emisoras entre listas. diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index 120fd5a..99d78a5 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_bn.arb b/lib/l10n/app_bn.arb index 953700b..071d36c 100644 --- a/lib/l10n/app_bn.arb +++ b/lib/l10n/app_bn.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index f35070f..0baa926 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 714164a..0a755bc 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 0792015..76c9f73 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -176,13 +176,17 @@ } } }, + "stationOrderTitle": "Orden de emisoras", + "stationOrderByName": "Por nombre", + "stationOrderByQuality": "Por calidad", + "stationOrderScopeDescription": "Se aplica a favoritos, búsquedas, emisoras cercanas y listados rápidos.", "favoriteGroupsTitle": "Listas de favoritos", - "favoriteGroupsDescription": "Cre? listas cortas para organizar tus emisoras guardadas.", - "favoriteGroupsAdd": "A?adir lista", + "favoriteGroupsDescription": "Creá listas cortas para organizar tus emisoras guardadas.", + "favoriteGroupsAdd": "Añadir lista", "favoriteGroupsEdit": "Editar lista", "favoriteGroupsDelete": "Eliminar lista", "favoriteGroupsNameLabel": "Nombre de la lista", - "favoriteGroupsNameTooLong": "M?ximo 28 caracteres.", + "favoriteGroupsNameTooLong": "Máximo 28 caracteres.", "favoriteGroupsUnassigned": "Sin asignar", "favoriteGroupsProtectedHint": "Lista por defecto: no se puede editar ni borrar.", "favoriteGroupsCreated": "Lista creada", @@ -192,10 +196,10 @@ "favoriteGroupsAssignSubtitle": "Lista actual: {groupName}", "favoriteGroupsAssigned": "{stationName} movida a {groupName}", "favoritesTitle": "Favoritos", - "favoritesEmptyTitle": "Sin favoritos a?n", - "favoritesEmptySubtitle": "Toc? el coraz?n en cualquier emisora para guardarla en tu colecci?n.", - "favoritesHeaderSubtitle": "Organiz? tu colecci?n por listas y dej? cerca las radios importantes.", - "favoritesCollection": "Colecci?n", + "favoritesEmptyTitle": "Sin favoritos aún", + "favoritesEmptySubtitle": "Tocá el corazón en cualquier emisora para guardarla en tu colección.", + "favoritesHeaderSubtitle": "Organizá tu colección por listas y dejá cerca las radios importantes.", + "favoritesCollection": "Colección", "favoritesSavedCount": "{count} guardadas", "favoritesRemoveTooltip": "Eliminar de favoritos", "favoritesRemovedMessage": "{stationName} eliminada de favoritos", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 4f2c7c0..113b25f 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index 6008bba..e1a83ce 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 301a85c..d514079 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index a86cc2f..9908ebc 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 0ceef04..55d8411 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index ce044a4..eb37984 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 80dbcde..3ef1a3f 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 9dd5899..60f3536 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -176,6 +176,10 @@ } } }, + "stationOrderTitle": "Station order", + "stationOrderByName": "By name", + "stationOrderByQuality": "By quality", + "stationOrderScopeDescription": "Applies to favorites, searches, nearby stations and quick lists.", "favoriteGroupsTitle": "Favorite lists", "favoriteGroupsDescription": "Create short lists to organize your saved stations.", "favoriteGroupsAdd": "Add list", diff --git a/lib/l10n/gen/app_localizations.dart b/lib/l10n/gen/app_localizations.dart index b5277ce..f2c7536 100644 --- a/lib/l10n/gen/app_localizations.dart +++ b/lib/l10n/gen/app_localizations.dart @@ -732,6 +732,30 @@ abstract class AppLocalizations { /// **'Límite de grabación actualizado a {size} MB'** String recordingsMaxSizeSaved(int size); + /// No description provided for @stationOrderTitle. + /// + /// In es, this message translates to: + /// **'Orden de emisoras'** + String get stationOrderTitle; + + /// No description provided for @stationOrderByName. + /// + /// In es, this message translates to: + /// **'Por nombre'** + String get stationOrderByName; + + /// No description provided for @stationOrderByQuality. + /// + /// In es, this message translates to: + /// **'Por calidad'** + String get stationOrderByQuality; + + /// No description provided for @stationOrderScopeDescription. + /// + /// In es, this message translates to: + /// **'Se aplica a favoritos, búsquedas, emisoras cercanas y listados rápidos.'** + String get stationOrderScopeDescription; + /// No description provided for @favoriteGroupsTitle. /// /// In es, this message translates to: @@ -741,13 +765,13 @@ abstract class AppLocalizations { /// No description provided for @favoriteGroupsDescription. /// /// In es, this message translates to: - /// **'Cre? listas cortas para organizar tus emisoras guardadas.'** + /// **'Creá listas cortas para organizar tus emisoras guardadas.'** String get favoriteGroupsDescription; /// No description provided for @favoriteGroupsAdd. /// /// In es, this message translates to: - /// **'A?adir lista'** + /// **'Añadir lista'** String get favoriteGroupsAdd; /// No description provided for @favoriteGroupsEdit. @@ -771,7 +795,7 @@ abstract class AppLocalizations { /// No description provided for @favoriteGroupsNameTooLong. /// /// In es, this message translates to: - /// **'M?ximo 28 caracteres.'** + /// **'Máximo 28 caracteres.'** String get favoriteGroupsNameTooLong; /// No description provided for @favoriteGroupsUnassigned. @@ -831,25 +855,25 @@ abstract class AppLocalizations { /// No description provided for @favoritesEmptyTitle. /// /// In es, this message translates to: - /// **'Sin favoritos a?n'** + /// **'Sin favoritos aún'** String get favoritesEmptyTitle; /// No description provided for @favoritesEmptySubtitle. /// /// In es, this message translates to: - /// **'Toc? el coraz?n en cualquier emisora para guardarla en tu colecci?n.'** + /// **'Tocá el corazón en cualquier emisora para guardarla en tu colección.'** String get favoritesEmptySubtitle; /// No description provided for @favoritesHeaderSubtitle. /// /// In es, this message translates to: - /// **'Organiz? tu colecci?n por listas y dej? cerca las radios importantes.'** + /// **'Organizá tu colección por listas y dejá cerca las radios importantes.'** String get favoritesHeaderSubtitle; /// No description provided for @favoritesCollection. /// /// In es, this message translates to: - /// **'Colecci?n'** + /// **'Colección'** String get favoritesCollection; /// No description provided for @favoritesSavedCount. diff --git a/lib/l10n/gen/app_localizations_ar.dart b/lib/l10n/gen/app_localizations_ar.dart index 99cb33d..405a863 100644 --- a/lib/l10n/gen/app_localizations_ar.dart +++ b/lib/l10n/gen/app_localizations_ar.dart @@ -354,6 +354,19 @@ class AppLocalizationsAr extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_bn.dart b/lib/l10n/gen/app_localizations_bn.dart index c19c9ff..551dbd5 100644 --- a/lib/l10n/gen/app_localizations_bn.dart +++ b/lib/l10n/gen/app_localizations_bn.dart @@ -354,6 +354,19 @@ class AppLocalizationsBn extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_de.dart b/lib/l10n/gen/app_localizations_de.dart index bee97b4..0245ada 100644 --- a/lib/l10n/gen/app_localizations_de.dart +++ b/lib/l10n/gen/app_localizations_de.dart @@ -354,6 +354,19 @@ class AppLocalizationsDe extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_en.dart b/lib/l10n/gen/app_localizations_en.dart index ce9ce63..7d4efe6 100644 --- a/lib/l10n/gen/app_localizations_en.dart +++ b/lib/l10n/gen/app_localizations_en.dart @@ -354,6 +354,19 @@ class AppLocalizationsEn extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_es.dart b/lib/l10n/gen/app_localizations_es.dart index 3adcea9..6b9c910 100644 --- a/lib/l10n/gen/app_localizations_es.dart +++ b/lib/l10n/gen/app_localizations_es.dart @@ -357,15 +357,28 @@ class AppLocalizationsEs extends AppLocalizations { return 'Límite de grabación actualizado a $size MB'; } + @override + String get stationOrderTitle => 'Orden de emisoras'; + + @override + String get stationOrderByName => 'Por nombre'; + + @override + String get stationOrderByQuality => 'Por calidad'; + + @override + String get stationOrderScopeDescription => + 'Se aplica a favoritos, búsquedas, emisoras cercanas y listados rápidos.'; + @override String get favoriteGroupsTitle => 'Listas de favoritos'; @override String get favoriteGroupsDescription => - 'Cre? listas cortas para organizar tus emisoras guardadas.'; + 'Creá listas cortas para organizar tus emisoras guardadas.'; @override - String get favoriteGroupsAdd => 'A?adir lista'; + String get favoriteGroupsAdd => 'Añadir lista'; @override String get favoriteGroupsEdit => 'Editar lista'; @@ -377,7 +390,7 @@ class AppLocalizationsEs extends AppLocalizations { String get favoriteGroupsNameLabel => 'Nombre de la lista'; @override - String get favoriteGroupsNameTooLong => 'M?ximo 28 caracteres.'; + String get favoriteGroupsNameTooLong => 'Máximo 28 caracteres.'; @override String get favoriteGroupsUnassigned => 'Sin asignar'; @@ -413,18 +426,18 @@ class AppLocalizationsEs extends AppLocalizations { String get favoritesTitle => 'Favoritos'; @override - String get favoritesEmptyTitle => 'Sin favoritos a?n'; + String get favoritesEmptyTitle => 'Sin favoritos aún'; @override String get favoritesEmptySubtitle => - 'Toc? el coraz?n en cualquier emisora para guardarla en tu colecci?n.'; + 'Tocá el corazón en cualquier emisora para guardarla en tu colección.'; @override String get favoritesHeaderSubtitle => - 'Organiz? tu colecci?n por listas y dej? cerca las radios importantes.'; + 'Organizá tu colección por listas y dejá cerca las radios importantes.'; @override - String get favoritesCollection => 'Colecci?n'; + String get favoritesCollection => 'Colección'; @override String favoritesSavedCount(int count) { diff --git a/lib/l10n/gen/app_localizations_fr.dart b/lib/l10n/gen/app_localizations_fr.dart index 2e864e6..e0b341d 100644 --- a/lib/l10n/gen/app_localizations_fr.dart +++ b/lib/l10n/gen/app_localizations_fr.dart @@ -354,6 +354,19 @@ class AppLocalizationsFr extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_hi.dart b/lib/l10n/gen/app_localizations_hi.dart index 7ac32e2..c6fb417 100644 --- a/lib/l10n/gen/app_localizations_hi.dart +++ b/lib/l10n/gen/app_localizations_hi.dart @@ -354,6 +354,19 @@ class AppLocalizationsHi extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_id.dart b/lib/l10n/gen/app_localizations_id.dart index 002e551..920e3d5 100644 --- a/lib/l10n/gen/app_localizations_id.dart +++ b/lib/l10n/gen/app_localizations_id.dart @@ -353,6 +353,19 @@ class AppLocalizationsId extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_it.dart b/lib/l10n/gen/app_localizations_it.dart index 7ca3405..20e64b1 100644 --- a/lib/l10n/gen/app_localizations_it.dart +++ b/lib/l10n/gen/app_localizations_it.dart @@ -354,6 +354,19 @@ class AppLocalizationsIt extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_ja.dart b/lib/l10n/gen/app_localizations_ja.dart index 2fe320b..6b14f55 100644 --- a/lib/l10n/gen/app_localizations_ja.dart +++ b/lib/l10n/gen/app_localizations_ja.dart @@ -354,6 +354,19 @@ class AppLocalizationsJa extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_pt.dart b/lib/l10n/gen/app_localizations_pt.dart index 5c0c096..f75303e 100644 --- a/lib/l10n/gen/app_localizations_pt.dart +++ b/lib/l10n/gen/app_localizations_pt.dart @@ -354,6 +354,19 @@ class AppLocalizationsPt extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_ru.dart b/lib/l10n/gen/app_localizations_ru.dart index 3204dac..cc1ba1d 100644 --- a/lib/l10n/gen/app_localizations_ru.dart +++ b/lib/l10n/gen/app_localizations_ru.dart @@ -354,6 +354,19 @@ class AppLocalizationsRu extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/l10n/gen/app_localizations_zh.dart b/lib/l10n/gen/app_localizations_zh.dart index 87f604e..fae7535 100644 --- a/lib/l10n/gen/app_localizations_zh.dart +++ b/lib/l10n/gen/app_localizations_zh.dart @@ -354,6 +354,19 @@ class AppLocalizationsZh extends AppLocalizations { return 'Recording limit updated to $size MB'; } + @override + String get stationOrderTitle => 'Station order'; + + @override + String get stationOrderByName => 'By name'; + + @override + String get stationOrderByQuality => 'By quality'; + + @override + String get stationOrderScopeDescription => + 'Applies to favorites, searches, nearby stations and quick lists.'; + @override String get favoriteGroupsTitle => 'Favorite lists'; diff --git a/lib/pantallas/pantalla_ajustes.dart b/lib/pantallas/pantalla_ajustes.dart index f42d051..6996782 100644 --- a/lib/pantallas/pantalla_ajustes.dart +++ b/lib/pantallas/pantalla_ajustes.dart @@ -572,6 +572,7 @@ class _SeccionEcualizador extends StatelessWidget { return Consumer( builder: (ctx, estado, _) { final disponible = estado.ecualizadorDisponible; + final l10n = AppLocalizations.of(ctx); final emisoraActual = estado.emisoraActual; final mostrarModoPorEmisora = emisoraActual != null && estado.emisoraActualEsFavorita; @@ -586,13 +587,13 @@ class _SeccionEcualizador extends StatelessWidget { const Icon(Icons.equalizer), const SizedBox(width: 12), Text( - AppLocalizations.of(ctx).equalizerTitle, + l10n.equalizerTitle, style: Theme.of(ctx).textTheme.titleMedium, ), const Spacer(), Chip( label: Text( - estado.ecualizadorActivo ? AppLocalizations.of(ctx).equalizerActive : AppLocalizations.of(ctx).equalizerDisabled, + estado.ecualizadorActivo ? l10n.equalizerActive : l10n.equalizerDisabled, ), visualDensity: VisualDensity.compact, ), @@ -601,11 +602,11 @@ class _SeccionEcualizador extends StatelessWidget { const SizedBox(height: 8), SwitchListTile.adaptive( contentPadding: EdgeInsets.zero, - title: Text(AppLocalizations.of(ctx).equalizerEnable), + title: Text(l10n.equalizerEnable), subtitle: Text( disponible - ? 'Los cambios se aplican en tiempo real a la emisora actual.' - : 'Se guardan los cambios y se aplicarán cuando Android habilite el efecto.', + ? l10n.equalizerRealtimeSubtitle + : l10n.equalizerPendingSubtitle, ), value: estado.ecualizadorActivo, onChanged: estado.cambiarEcualizadorActivo, @@ -614,11 +615,11 @@ class _SeccionEcualizador extends StatelessWidget { const SizedBox(height: 8), SwitchListTile.adaptive( contentPadding: EdgeInsets.zero, - title: Text(AppLocalizations.of(ctx).equalizerPerStationTitle), + title: Text(l10n.equalizerPerStationTitle), subtitle: Text( usandoEqPropio - ? AppLocalizations.of(ctx).equalizerPerStationActive(emisoraActual.nombre) - : AppLocalizations.of(ctx).equalizerPerStationMain(emisoraActual.nombre), + ? l10n.equalizerPerStationActive(emisoraActual.nombre) + : l10n.equalizerPerStationMain(emisoraActual.nombre), ), value: usandoEqPropio, onChanged: @@ -652,6 +653,7 @@ class _SeccionOrdenListas extends StatelessWidget { @override Widget build(BuildContext context) { final estado = context.watch(); + final l10n = AppLocalizations.of(context); return PluriGlassSurface( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -661,23 +663,23 @@ class _SeccionOrdenListas extends StatelessWidget { const Icon(Icons.sort_rounded), const SizedBox(width: 12), Text( - 'Orden de emisoras', + l10n.stationOrderTitle, style: Theme.of(context).textTheme.titleMedium, ), ], ), const SizedBox(height: 8), SegmentedButton( - segments: const [ + segments: [ ButtonSegment( value: OrdenEmisoras.nombre, - icon: Icon(Icons.sort_by_alpha_rounded), - label: Text('Por nombre'), + icon: const Icon(Icons.sort_by_alpha_rounded), + label: Text(l10n.stationOrderByName), ), ButtonSegment( value: OrdenEmisoras.calidad, - icon: Icon(Icons.hd_rounded), - label: Text('Por calidad'), + icon: const Icon(Icons.hd_rounded), + label: Text(l10n.stationOrderByQuality), ), ], selected: {estado.ordenListas}, @@ -687,7 +689,7 @@ class _SeccionOrdenListas extends StatelessWidget { ), const SizedBox(height: 8), Text( - 'Se aplica a favoritos, b?squedas, emisoras cercanas y listados r?pidos.', + l10n.stationOrderScopeDescription, style: Theme.of(context).textTheme.bodySmall, ), ], @@ -837,6 +839,7 @@ class _SeccionEmisoraPreferida extends StatelessWidget { @override Widget build(BuildContext context) { final estado = context.watch(); + final l10n = AppLocalizations.of(context); final favoritas = estado.listaFavoritos; final preferida = estado.emisoraPreferida; final opciones = _opciones(estado, preferida); @@ -850,25 +853,23 @@ class _SeccionEmisoraPreferida extends StatelessWidget { const Icon(Icons.radio_rounded), const SizedBox(width: 12), Text( - AppLocalizations.of(context).preferredStationTitle, + l10n.preferredStationTitle, style: Theme.of(context).textTheme.titleMedium, ), ], ), const SizedBox(height: 8), Text( - 'Se preselecciona al crear alarmas y puede iniciarse como reproducción rápida.', + l10n.preferredStationDescription, style: Theme.of(context).textTheme.bodySmall, ), const SizedBox(height: 12), if (opciones.isEmpty) - const ListTile( + ListTile( contentPadding: EdgeInsets.zero, - leading: Icon(Icons.info_outline_rounded), - title: Text('Todavía no hay emisoras disponibles'), - subtitle: Text( - 'Guardá favoritas o cargá emisoras para elegir una preferida.', - ), + leading: const Icon(Icons.info_outline_rounded), + title: Text(l10n.preferredStationNoStationsTitle), + subtitle: Text(l10n.preferredStationNoStationsSubtitle), ) else DropdownButtonFormField( @@ -876,8 +877,8 @@ class _SeccionEmisoraPreferida extends StatelessWidget { decoration: InputDecoration( labelText: favoritas.isEmpty - ? 'Fallback automático' - : 'Favorita por defecto', + ? l10n.preferredStationAutomaticFallback + : l10n.preferredStationDefaultFavorite, ), items: [ for (final emisora in opciones) @@ -900,15 +901,15 @@ class _SeccionEmisoraPreferida extends StatelessWidget { const SizedBox(height: 8), Text( favoritas.any((e) => e.uuid == preferida.uuid) - ? 'Preferida actual: ${preferida.nombre}' - : 'Sin favoritas: usando automáticamente ${preferida.nombre}', + ? l10n.preferredStationCurrent(preferida.nombre) + : l10n.preferredStationAutoUsing(preferida.nombre), ), const SizedBox(height: 8), Align( alignment: Alignment.centerLeft, child: FilledButton.tonalIcon( icon: const Icon(Icons.play_arrow_rounded), - label: Text(AppLocalizations.of(context).preferredStationPlay), + label: Text(l10n.preferredStationPlay), onPressed: () => context.read().reproducirEmisoraPreferida(), ),