Fixes 9 of 10 review findings (10th requires a manual Play Console step, no code change): 1. app.dart/banner_anuncio_superior.dart: move the top SafeArea inside BannerAnuncioSuperior so it only reserves status-bar height when an ad actually renders, restoring edge-to-edge layout for premium and free-unloaded users. 2. servicio_anuncios.dart: bound every interstitial await (load, presentation, and the injected implementation itself) with injectable timeouts so a callback that never fires can no longer hang a caller. 3. estado_entitlement.dart/hoja_premium.dart: expose a typed resultadoUsuario signal for purchase/restore failures and restore-found-nothing, with dedicated localized messages (compraError, restauracionSinCompras) across all 13 locales -- never the raw developer/exception string. 4. main.dart/servicio_consentimiento.dart: add a GDPR/UMP consent flow (ConsentInformation/ConsentForm) that gates Mobile Ads SDK init on canRequestAds(); premium users never see a consent form; failures degrade to no ads instead of crashing or blocking startup. 6. servicio_anuncios.dart: track real ad presentation (onAdShowedFullScreenContent) so a failed-to-show interstitial no longer consumes a session cap slot. 7. banner_anuncio_superior.dart: add an explicit load-attempted guard so repeated didChangeDependencies (e.g. entitlement notifyListeners during a purchase) can only ever trigger one banner load attempt. 8. servicio_anuncios.dart: make esPremium a required constructor parameter, matching the hardened contract already applied to EstadoAlarmas/EstadoGrabacion/EstadoRadio. 9. hoja_premium.dart: add a dedicated premiumActivo localized string instead of reusing the equalizer's equalizerActive translation, across all 13 locales. All fixes implemented RED-first (failing test before production code). Full suite: 1261 passed, 2 pre-existing skips, 0 failures. flutter analyze: 5 pre-existing issues only, 0 new. [version set]
1885 lines
46 KiB
Dart
1885 lines
46 KiB
Dart
// ignore: unused_import
|
||
import 'package:intl/intl.dart' as intl;
|
||
import 'app_localizations.dart';
|
||
|
||
// ignore_for_file: type=lint
|
||
|
||
/// The translations for Spanish Castilian (`es`).
|
||
class AppLocalizationsEs extends AppLocalizations {
|
||
AppLocalizationsEs([String locale = 'es']) : super(locale);
|
||
|
||
@override
|
||
String get appTitle => 'PluriWave';
|
||
|
||
@override
|
||
String get navHome => 'Escuchar';
|
||
|
||
@override
|
||
String get navSearch => 'Buscar';
|
||
|
||
@override
|
||
String get navFavorites => 'Favoritos';
|
||
|
||
@override
|
||
String get navAlarms => 'Alarmas';
|
||
|
||
@override
|
||
String get navSettings => 'Ajustes';
|
||
|
||
@override
|
||
String get actionOk => 'OK';
|
||
|
||
@override
|
||
String get sleepTimer => 'Timer de sueño';
|
||
|
||
@override
|
||
String get sleepTimerDescription =>
|
||
'Apagado suave de la radio con cuenta atrás exacta.';
|
||
|
||
@override
|
||
String get cancelTimer => 'Cancelar timer';
|
||
|
||
@override
|
||
String get optionOther => 'Otro';
|
||
|
||
@override
|
||
String get customDurationTitle => 'Duración personalizada';
|
||
|
||
@override
|
||
String get durationGreaterThanZero => 'Elegí una duración mayor que cero.';
|
||
|
||
@override
|
||
String get hoursLabel => 'Horas';
|
||
|
||
@override
|
||
String get minutesLabel => 'Minutos';
|
||
|
||
@override
|
||
String get secondsLabel => 'Segundos';
|
||
|
||
@override
|
||
String durationHoursMinutesSeconds(
|
||
Object hours,
|
||
Object minutes,
|
||
Object seconds,
|
||
) {
|
||
return '$hours h $minutes min $seconds s';
|
||
}
|
||
|
||
@override
|
||
String durationMinutesSeconds(Object minutes, Object seconds) {
|
||
return '$minutes min $seconds s';
|
||
}
|
||
|
||
@override
|
||
String durationMinutesOnly(Object minutes) {
|
||
return '$minutes min';
|
||
}
|
||
|
||
@override
|
||
String durationSecondsOnly(Object seconds) {
|
||
return '$seconds s';
|
||
}
|
||
|
||
@override
|
||
String get saveQuickAccess => 'Guardar como acceso rápido';
|
||
|
||
@override
|
||
String get startTimer => 'Iniciar timer';
|
||
|
||
@override
|
||
String skipCurrentAlarmExecution(Object alarmName) {
|
||
return 'Omitida esta ejecución de $alarmName.';
|
||
}
|
||
|
||
@override
|
||
String get settingsTitle => 'Ajustes';
|
||
|
||
@override
|
||
String get settingsSubtitle =>
|
||
'Control fino de sonido, copias de seguridad y emisoras personalizadas.';
|
||
|
||
@override
|
||
String get settingsGroupAudioTitle => 'AUDIO';
|
||
|
||
@override
|
||
String get settingsGroupStationsTitle => 'EMISORAS';
|
||
|
||
@override
|
||
String get settingsGroupRecordingsTitle => 'GRABACIONES Y MÚSICA';
|
||
|
||
@override
|
||
String get settingsGroupApplicationTitle => 'APLICACIÓN';
|
||
|
||
@override
|
||
String get infoSectionTitle => 'Información';
|
||
|
||
@override
|
||
String get languageSectionTitle => 'Idioma';
|
||
|
||
@override
|
||
String get languageSectionDescription =>
|
||
'Elegí cómo se muestra el idioma de la app.';
|
||
|
||
@override
|
||
String get languageSystemDefault => 'Sistema';
|
||
|
||
@override
|
||
String get languageSpanish => 'Español';
|
||
|
||
@override
|
||
String get languageEnglish => 'Inglés';
|
||
|
||
@override
|
||
String languageUpdated(Object languageName) {
|
||
return 'Idioma actualizado: $languageName';
|
||
}
|
||
|
||
@override
|
||
String get languageUpdatedSystem => 'Idioma actualizado: Sistema';
|
||
|
||
@override
|
||
String get timerSectionTitle => 'Timer de sueño';
|
||
|
||
@override
|
||
String get timerSectionAdd => 'Añadir';
|
||
|
||
@override
|
||
String get timerSectionDescription =>
|
||
'Personalizá los accesos rápidos que aparecen al apagar la radio automáticamente.';
|
||
|
||
@override
|
||
String get timerSectionRestoreRecommended => 'Restaurar tiempos recomendados';
|
||
|
||
@override
|
||
String get newQuickAccessTitle => 'Nuevo acceso rápido';
|
||
|
||
@override
|
||
String get saveQuickAccessButton => 'Guardar acceso rápido';
|
||
|
||
@override
|
||
String get settingsSafeStatus => 'Seguro';
|
||
|
||
@override
|
||
String get recordingsSectionTitle => 'Grabaciones';
|
||
|
||
@override
|
||
String get recordingsFolderDialogTitle =>
|
||
'Selecciona la carpeta de grabaciones';
|
||
|
||
@override
|
||
String get recordingsPathUpdated => 'Ruta de grabación actualizada';
|
||
|
||
@override
|
||
String recordingsPathSaveError(Object error) {
|
||
return 'No se pudo guardar la ruta: $error';
|
||
}
|
||
|
||
@override
|
||
String get recordingsDefaultFolderRestored =>
|
||
'Se usará la carpeta interna por defecto';
|
||
|
||
@override
|
||
String get recordingsFolderTitle => 'Carpeta de grabación';
|
||
|
||
@override
|
||
String get recordingsPathCalculating => 'Calculando ruta...';
|
||
|
||
@override
|
||
String get recordingsChangePath => 'Cambiar ruta';
|
||
|
||
@override
|
||
String get recordingsUseDefaultPath => 'Usar ruta por defecto';
|
||
|
||
@override
|
||
String get recordingsOriginalStreamHint =>
|
||
'La radio se guarda desde el stream original, sin recomprimir.';
|
||
|
||
@override
|
||
String get equalizerActive => 'Activo';
|
||
|
||
@override
|
||
String get equalizerDisabled => 'Desactivado';
|
||
|
||
@override
|
||
String get equalizerEnable => 'Activar ecualizador';
|
||
|
||
@override
|
||
String get equalizerRealtimeSubtitle =>
|
||
'Los cambios se aplican en tiempo real a la emisora actual.';
|
||
|
||
@override
|
||
String get equalizerPendingSubtitle =>
|
||
'Se guardan los cambios y se aplicarán cuando Android habilite el efecto.';
|
||
|
||
@override
|
||
String get equalizerPerStationTitle => 'Usar EQ propio para esta favorita';
|
||
|
||
@override
|
||
String equalizerPerStationActive(Object stationName) {
|
||
return 'Activo para $stationName';
|
||
}
|
||
|
||
@override
|
||
String equalizerPerStationMain(Object stationName) {
|
||
return 'Usando EQ principal para $stationName';
|
||
}
|
||
|
||
@override
|
||
String get equalizerBaseExplainer =>
|
||
'Este es el ecualizador base: se aplica a todas las emisoras que no tengan un ajuste propio. El de una emisora concreta se define desde su propia reproducción y manda sobre este.';
|
||
|
||
@override
|
||
String get equalizerActiveOutputLabel => 'Salida activa';
|
||
|
||
@override
|
||
String get equalizerActiveOutputDefault => 'El altavoz de este dispositivo';
|
||
|
||
@override
|
||
String get equalizerStationsWithOwnEqTitle => 'Emisoras con ajuste propio';
|
||
|
||
@override
|
||
String get equalizerStationsWithOwnEqSubtitle =>
|
||
'Ignoran este ecualizador base';
|
||
|
||
@override
|
||
String get equalizerStationsWithOwnEqEmpty =>
|
||
'Ninguna emisora tiene ajuste propio todavía.';
|
||
|
||
@override
|
||
String get equalizerSaveAsPresetAction => 'Guardar como preset';
|
||
|
||
@override
|
||
String get equalizerResetToFlatAction => 'Restablecer a plano';
|
||
|
||
@override
|
||
String get equalizerSavePresetDialogTitle => 'Guardar como preset';
|
||
|
||
@override
|
||
String get equalizerSavePresetNameLabel => 'Nombre del preset';
|
||
|
||
@override
|
||
String get equalizerSavePresetEmptyNameError =>
|
||
'Ingresá un nombre para el preset.';
|
||
|
||
@override
|
||
String get equalizerSavePresetConfirm => 'Guardar';
|
||
|
||
@override
|
||
String get preferredStationTitle => 'Emisora preferida';
|
||
|
||
@override
|
||
String get preferredStationDescription =>
|
||
'Se preselecciona al crear alarmas y puede iniciarse como reproducción rápida.';
|
||
|
||
@override
|
||
String get preferredStationNoStationsTitle =>
|
||
'Todavía no hay emisoras disponibles';
|
||
|
||
@override
|
||
String get preferredStationNoStationsSubtitle =>
|
||
'Guardá favoritas o cargá emisoras para elegir una preferida.';
|
||
|
||
@override
|
||
String get preferredStationAutomaticFallback => 'Fallback automático';
|
||
|
||
@override
|
||
String get preferredStationDefaultFavorite => 'Favorita por defecto';
|
||
|
||
@override
|
||
String preferredStationCurrent(Object stationName) {
|
||
return 'Preferida actual: $stationName';
|
||
}
|
||
|
||
@override
|
||
String preferredStationAutoUsing(Object stationName) {
|
||
return 'Sin favoritas: usando automáticamente $stationName';
|
||
}
|
||
|
||
@override
|
||
String get preferredStationPlay => 'Reproducir preferida';
|
||
|
||
@override
|
||
String get customStationsTitle => 'Emisoras personalizadas';
|
||
|
||
@override
|
||
String get customStationsAdd => 'Añadir';
|
||
|
||
@override
|
||
String get customStationsEmpty => 'No hay emisoras personalizadas.';
|
||
|
||
@override
|
||
String get playAction => 'Reproducir';
|
||
|
||
@override
|
||
String get deleteAction => 'Eliminar';
|
||
|
||
@override
|
||
String get addStationTitle => 'Añadir emisora';
|
||
|
||
@override
|
||
String get stationNameLabel => 'Nombre *';
|
||
|
||
@override
|
||
String get unnamedStation => 'Sin nombre';
|
||
|
||
@override
|
||
String get requiredField => 'Campo obligatorio';
|
||
|
||
@override
|
||
String get streamUrlLabel => 'URL del stream *';
|
||
|
||
@override
|
||
String get invalidUrl => 'URL no válida';
|
||
|
||
@override
|
||
String get countryOptionalLabel => 'País (opcional)';
|
||
|
||
@override
|
||
String get saveStation => 'Guardar emisora';
|
||
|
||
@override
|
||
String get backupSectionTitle => 'Copia de seguridad';
|
||
|
||
@override
|
||
String get backupExportTitle => 'Exportar configuración';
|
||
|
||
@override
|
||
String get backupExportSubtitle =>
|
||
'Favoritos, emisoras custom y presets de EQ';
|
||
|
||
@override
|
||
String get backupImportTitle => 'Importar configuración';
|
||
|
||
@override
|
||
String get backupImportSubtitle =>
|
||
'Restaurar desde un fichero de copia de seguridad';
|
||
|
||
@override
|
||
String get backupShareSubject => 'PluriWave — copia de seguridad';
|
||
|
||
@override
|
||
String backupShareText(Object date) {
|
||
return 'Configuración de PluriWave exportada el $date';
|
||
}
|
||
|
||
@override
|
||
String backupExportError(Object error) {
|
||
return 'Error al exportar: $error';
|
||
}
|
||
|
||
@override
|
||
String get backupImportConfirmMessage =>
|
||
'Esto añadirá los favoritos, emisoras y presets del fichero. ¿Continuar?';
|
||
|
||
@override
|
||
String get backupImportSuccess => 'Configuración importada correctamente';
|
||
|
||
@override
|
||
String backupImportError(Object error) {
|
||
return 'Error al importar: $error';
|
||
}
|
||
|
||
@override
|
||
String get appVersionLoading => 'Cargando versión...';
|
||
|
||
@override
|
||
String appVersionSubtitle(Object version) {
|
||
return '$version - Radio mundial';
|
||
}
|
||
|
||
@override
|
||
String get savedFavoritesTitle => 'Favoritos guardados';
|
||
|
||
@override
|
||
String get stationFilterTitle => 'Filtro de emisoras';
|
||
|
||
@override
|
||
String get stationFilterSubtitle => 'Solo emisoras verificadas como activas';
|
||
|
||
@override
|
||
String get backgroundAudioTitle => 'Audio en background';
|
||
|
||
@override
|
||
String get backgroundAudioSubtitle => 'Continúa al apagar la pantalla';
|
||
|
||
@override
|
||
String get dash => '—';
|
||
|
||
@override
|
||
String get cancelAction => 'Cancelar';
|
||
|
||
@override
|
||
String get equalizerTitle => 'Ecualizador';
|
||
|
||
@override
|
||
String get recordingsOpenFolder => 'Abrir carpeta';
|
||
|
||
@override
|
||
String recordingsOpenFolderError(Object error) {
|
||
return 'No se pudo abrir la carpeta: $error';
|
||
}
|
||
|
||
@override
|
||
String get recordingsMaxSizeTitle => 'Tamaño máximo de grabación';
|
||
|
||
@override
|
||
String recordingsMaxSizeSubtitle(int size) {
|
||
return 'Límite actual: $size MB';
|
||
}
|
||
|
||
@override
|
||
String get recordingsMaxSizeDialogTitle => 'Tamaño máximo por grabación';
|
||
|
||
@override
|
||
String get recordingsMaxSizeMbLabel => 'Megabytes máximos';
|
||
|
||
@override
|
||
String recordingsMaxSizeSaved(int size) {
|
||
return 'Límite de grabación actualizado a $size MB';
|
||
}
|
||
|
||
@override
|
||
String get recordingsLibraryTitle => 'Mis grabaciones';
|
||
|
||
@override
|
||
String recordingsLibraryStorageCaption(int usedMb, int totalMb) {
|
||
return '$usedMb MB de $totalMb MB usados';
|
||
}
|
||
|
||
@override
|
||
String get recordingsLibraryStorageFolderCaption =>
|
||
'Music/PluriWave · se borran las más antiguas al llegar al límite';
|
||
|
||
@override
|
||
String get recordingsLibraryEmptyTitle => 'Todavía no hay grabaciones';
|
||
|
||
@override
|
||
String get recordingsLibraryEmptySubtitle =>
|
||
'Las grabaciones que guardes van a aparecer acá.';
|
||
|
||
@override
|
||
String get recordingActionRename => 'Renombrar';
|
||
|
||
@override
|
||
String get recordingActionShare => 'Compartir';
|
||
|
||
@override
|
||
String get recordingActionDelete => 'Eliminar';
|
||
|
||
@override
|
||
String get recordingRenameDialogTitle => 'Renombrar grabación';
|
||
|
||
@override
|
||
String get recordingRenameLabel => 'Nombre';
|
||
|
||
@override
|
||
String get recordingRenameEmptyError => 'Ingresá un nombre';
|
||
|
||
@override
|
||
String get recordingDeleteConfirmTitle => '¿Eliminar grabación?';
|
||
|
||
@override
|
||
String get recordingDeleteConfirmMessage =>
|
||
'Esta acción no se puede deshacer.';
|
||
|
||
@override
|
||
String get recordingsLibrarySettingsTooltip => 'Ajustes de grabación';
|
||
|
||
@override
|
||
String get stationOrderTitle => 'Orden de emisoras';
|
||
|
||
@override
|
||
String get stationOrderByName => 'Por nombre';
|
||
|
||
@override
|
||
String get stationOrderByQuality => 'Por calidad';
|
||
|
||
@override
|
||
String get stationOrderByPopularity => 'Por popularidad';
|
||
|
||
@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.';
|
||
|
||
@override
|
||
String get favoriteGroupsAdd => 'Añadir lista';
|
||
|
||
@override
|
||
String get favoriteGroupsEdit => 'Editar lista';
|
||
|
||
@override
|
||
String get favoriteGroupsDelete => 'Eliminar lista';
|
||
|
||
@override
|
||
String get favoriteGroupsNameLabel => 'Nombre de la lista';
|
||
|
||
@override
|
||
String get favoriteGroupsNameTooLong => 'Máximo 28 caracteres.';
|
||
|
||
@override
|
||
String get favoriteGroupsUnassigned => 'Sin asignar';
|
||
|
||
@override
|
||
String get favoriteGroupsProtectedHint =>
|
||
'Lista por defecto: no se puede editar ni borrar.';
|
||
|
||
@override
|
||
String get favoriteGroupsCreated => 'Lista creada';
|
||
|
||
@override
|
||
String get favoriteGroupsUpdated => 'Lista actualizada';
|
||
|
||
@override
|
||
String get favoriteGroupsDeleted =>
|
||
'Lista eliminada; sus emisoras vuelven a Sin asignar.';
|
||
|
||
@override
|
||
String get favoriteGroupsAssign => 'Mover a lista';
|
||
|
||
@override
|
||
String favoriteGroupsAssignSubtitle(Object groupName) {
|
||
return 'Lista actual: $groupName';
|
||
}
|
||
|
||
@override
|
||
String favoriteGroupsAssigned(Object stationName, Object groupName) {
|
||
return '$stationName movida a $groupName';
|
||
}
|
||
|
||
@override
|
||
String get favoritesTitle => 'Favoritos';
|
||
|
||
@override
|
||
String get favoritesEmptyTitle => 'Sin favoritos aún';
|
||
|
||
@override
|
||
String get favoritesEmptySubtitle =>
|
||
'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.';
|
||
|
||
@override
|
||
String get favoritesCollection => 'Colección';
|
||
|
||
@override
|
||
String favoritesSavedCount(int count) {
|
||
return '$count guardadas';
|
||
}
|
||
|
||
@override
|
||
String get favoritesRemoveTooltip => 'Eliminar de favoritos';
|
||
|
||
@override
|
||
String favoritesRemovedMessage(Object stationName) {
|
||
return '$stationName eliminada de favoritos';
|
||
}
|
||
|
||
@override
|
||
String get favoritesFilterAllLabel => 'Todas';
|
||
|
||
@override
|
||
String favoriteGroupsChipLabel(Object groupName, int count) {
|
||
return '$groupName · $count';
|
||
}
|
||
|
||
@override
|
||
String get favoriteGroupsManage => 'Gestionar listas';
|
||
|
||
@override
|
||
String get customStationsAddCta => 'Añadir emisora personalizada';
|
||
|
||
@override
|
||
String get alarmPostponedCurrentExecution =>
|
||
'Alarma pospuesta para esta ejecución.';
|
||
|
||
@override
|
||
String get searchScreenTitle => 'Buscar señal';
|
||
|
||
@override
|
||
String get searchScreenSubtitle =>
|
||
'Encontrá radios por nombre, país o idioma con filtros rápidos y alto contraste.';
|
||
|
||
@override
|
||
String get searchFiltersLabel => 'Filtros';
|
||
|
||
@override
|
||
String get searchHint => 'Radio Horizonte, jazz, noticias...';
|
||
|
||
@override
|
||
String get searchCountryFilterLabel => 'País';
|
||
|
||
@override
|
||
String get searchLanguageFilterLabel => 'Idioma';
|
||
|
||
@override
|
||
String get searchMinQualityFilterLabel => 'Calidad mínima';
|
||
|
||
@override
|
||
String get searchLoadingStationsLabel => 'BUSCANDO EMISORAS…';
|
||
|
||
@override
|
||
String get searchEmptyTitle => 'Buscá una emisora';
|
||
|
||
@override
|
||
String get searchNoResultsTitle => 'Sin resultados';
|
||
|
||
@override
|
||
String searchNoResultsForQueryTitle(Object query) {
|
||
return 'Sin resultados para «$query»';
|
||
}
|
||
|
||
@override
|
||
String get searchEmptySubtitle =>
|
||
'Usá la barra superior o los chips para descubrir señales de todo el mundo.';
|
||
|
||
@override
|
||
String get searchNoResultsSubtitle =>
|
||
'Probá quitar filtros o escribir otro nombre para encontrar una señal activa.';
|
||
|
||
@override
|
||
String searchResultsCount(num count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count resultados',
|
||
one: '1 resultado',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String searchClearFiltersAction(num count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: 'Quitar los $count filtros',
|
||
one: 'Quitar el filtro',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String get countriesScreenTitle => 'Países';
|
||
|
||
@override
|
||
String get countriesSearchHint => 'País o código...';
|
||
|
||
@override
|
||
String get countriesYourLanguagesTitle => 'Tus idiomas';
|
||
|
||
@override
|
||
String get countriesAllTitle => 'Todos los países';
|
||
|
||
@override
|
||
String get radioCountriesError => 'No pudimos cargar los países.';
|
||
|
||
@override
|
||
String get countrySpain => 'España';
|
||
|
||
@override
|
||
String get countryUsa => 'EE. UU.';
|
||
|
||
@override
|
||
String get countryMexico => 'México';
|
||
|
||
@override
|
||
String get countryArgentina => 'Argentina';
|
||
|
||
@override
|
||
String get countryUk => 'Reino Unido';
|
||
|
||
@override
|
||
String get countryFrance => 'Francia';
|
||
|
||
@override
|
||
String get countryGermany => 'Alemania';
|
||
|
||
@override
|
||
String get countryItaly => 'Italia';
|
||
|
||
@override
|
||
String get countryBrazil => 'Brasil';
|
||
|
||
@override
|
||
String get countryJapan => 'Japón';
|
||
|
||
@override
|
||
String get languageNameSpanish => 'Español';
|
||
|
||
@override
|
||
String get languageNameEnglish => 'Inglés';
|
||
|
||
@override
|
||
String get languageNameFrench => 'Francés';
|
||
|
||
@override
|
||
String get languageNameGerman => 'Alemán';
|
||
|
||
@override
|
||
String get languageNamePortuguese => 'Portugués';
|
||
|
||
@override
|
||
String get languageNameItalian => 'Italiano';
|
||
|
||
@override
|
||
String get languageNameJapanese => 'Japonés';
|
||
|
||
@override
|
||
String get languageNameArabic => 'Árabe';
|
||
|
||
@override
|
||
String get languageNameRussian => 'Ruso';
|
||
|
||
@override
|
||
String get homeScreenSubtitle =>
|
||
'Radio global en vivo con señales limpias, favoritos inteligentes y una experiencia visual de concurso.';
|
||
|
||
@override
|
||
String get exploreStations => 'Explorar emisoras';
|
||
|
||
@override
|
||
String stationsCount(int count) {
|
||
return '$count radios';
|
||
}
|
||
|
||
@override
|
||
String get qualityHd => 'Calidad HD';
|
||
|
||
@override
|
||
String get yourStationsTitle => 'Tus emisoras';
|
||
|
||
@override
|
||
String get seeAllAction => 'Ver todas';
|
||
|
||
@override
|
||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||
|
||
@override
|
||
String get nowListeningLabel => 'Escuchando ahora';
|
||
|
||
@override
|
||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||
|
||
@override
|
||
String get nothingPlayingSubtitle =>
|
||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||
|
||
@override
|
||
String get nearYou => 'Cerca de vos';
|
||
|
||
@override
|
||
String nearYouInCountry(Object country) {
|
||
return 'Cerca de vos · $country';
|
||
}
|
||
|
||
@override
|
||
String get detectAction => 'Detectar';
|
||
|
||
@override
|
||
String get liveRadar => 'Radar en directo';
|
||
|
||
@override
|
||
String get genresTitle => 'Géneros';
|
||
|
||
@override
|
||
String get exploreByTitle => 'Explorar por';
|
||
|
||
@override
|
||
String get exploreTrendingTitle => 'Tendencias';
|
||
|
||
@override
|
||
String get exploreTrendingSubtitle => 'Hoy';
|
||
|
||
@override
|
||
String get exploreNewTitle => 'Novedades';
|
||
|
||
@override
|
||
String get exploreNewSubtitle => 'Esta semana';
|
||
|
||
@override
|
||
String get popularNowTitle => 'Populares ahora';
|
||
|
||
@override
|
||
String get offlineBannerTitle => 'Sin conexión';
|
||
|
||
@override
|
||
String get retryAction => 'Reintentar';
|
||
|
||
@override
|
||
String get noStationsAvailable => 'No hay emisoras disponibles';
|
||
|
||
@override
|
||
String get noStationsAvailableSubtitle =>
|
||
'Probá refrescar o elegir otro género para volver a capturar señal.';
|
||
|
||
@override
|
||
String get genrePop => 'Pop';
|
||
|
||
@override
|
||
String get genreRock => 'Rock';
|
||
|
||
@override
|
||
String get genreJazz => 'Jazz';
|
||
|
||
@override
|
||
String get genreClassical => 'Clásica';
|
||
|
||
@override
|
||
String get genreElectronic => 'Electrónica';
|
||
|
||
@override
|
||
String get genreNews => 'Noticias';
|
||
|
||
@override
|
||
String get genreTalk => 'Charlas';
|
||
|
||
@override
|
||
String get genreHipHop => 'Hip-hop';
|
||
|
||
@override
|
||
String get genreCountry => 'Country';
|
||
|
||
@override
|
||
String get genreMetal => 'Metal';
|
||
|
||
@override
|
||
String get genreReggae => 'Reggae';
|
||
|
||
@override
|
||
String get genreLatin => 'Latina';
|
||
|
||
@override
|
||
String get alarmScreenTitle => 'Despertar musical';
|
||
|
||
@override
|
||
String get alarmScreenSubtitle =>
|
||
'Alarmas con radio, sonido seguro, vacaciones inteligentes y próxima ejecución siempre visible.';
|
||
|
||
@override
|
||
String get createAlarmAction => 'Crear alarma';
|
||
|
||
@override
|
||
String alarmsCount(int count) {
|
||
return '$count alarmas';
|
||
}
|
||
|
||
@override
|
||
String get activeAlarmsWithoutNextTitle =>
|
||
'Alarmas activas sin próxima ejecución';
|
||
|
||
@override
|
||
String get noActiveAlarms => 'Sin alarmas activas';
|
||
|
||
@override
|
||
String get nextAlarmTitle => 'Próxima alarma';
|
||
|
||
@override
|
||
String activeAlarmsWithoutNextSubtitle(int count) {
|
||
return 'Hay $count alarma(s) activas, pero ahora mismo no tienen una fecha futura válida. Revisá fecha, días y vacaciones.';
|
||
}
|
||
|
||
@override
|
||
String get createAlarmHint =>
|
||
'Creá una alarma y PluriWave calculará la siguiente ejecución automáticamente.';
|
||
|
||
@override
|
||
String get alarmVacationPlay => 'Suena en vacaciones';
|
||
|
||
@override
|
||
String get alarmVacationPause => 'Pausa en vacaciones';
|
||
|
||
@override
|
||
String alarmFadeInLabel(int seconds) {
|
||
return 'Fade-in ${seconds}s';
|
||
}
|
||
|
||
@override
|
||
String alarmNextExecution(Object date) {
|
||
return 'Siguiente ejecución: $date';
|
||
}
|
||
|
||
@override
|
||
String get alarmNoNextExecution => 'No tiene próxima ejecución activa.';
|
||
|
||
@override
|
||
String alarmSkippedExecution(Object date) {
|
||
return 'Una ejecución fue omitida: $date.';
|
||
}
|
||
|
||
@override
|
||
String get editAction => 'Editar';
|
||
|
||
@override
|
||
String get skipNextAction => 'Omitir siguiente';
|
||
|
||
@override
|
||
String get deleteTooltip => 'Eliminar';
|
||
|
||
@override
|
||
String get alarmHeroSkipAction => 'Saltar';
|
||
|
||
@override
|
||
String get alarmDeleteConfirmTitle => '¿Eliminar alarma?';
|
||
|
||
@override
|
||
String get alarmDeleteConfirmMessage => 'Esta acción no se puede deshacer.';
|
||
|
||
@override
|
||
String get alarmSkippedNoNextSnackbar =>
|
||
'Alarma omitida. No queda próxima ejecución.';
|
||
|
||
@override
|
||
String alarmSkippedReturnsSnackbar(Object date) {
|
||
return 'Alarma omitida. Volverá el $date.';
|
||
}
|
||
|
||
@override
|
||
String alarmVacationPausedNoNext(Object vacationName) {
|
||
return 'Está pausada por vacaciones ($vacationName) y sin próxima ejecución.';
|
||
}
|
||
|
||
@override
|
||
String alarmVacationPausedReturns(Object vacationName, Object date) {
|
||
return 'Está pausada por vacaciones ($vacationName) y vuelve el $date.';
|
||
}
|
||
|
||
@override
|
||
String alarmVacationReturns(Object date) {
|
||
return 'Con vacaciones activas, volverá a sonar el $date.';
|
||
}
|
||
|
||
@override
|
||
String get defaultAlarmName => 'Despertador musical';
|
||
|
||
@override
|
||
String get newAlarmTitle => 'Nueva alarma';
|
||
|
||
@override
|
||
String get editAlarmTitle => 'Editar alarma';
|
||
|
||
@override
|
||
String get nameField => 'Nombre';
|
||
|
||
@override
|
||
String get timeField => 'Hora';
|
||
|
||
@override
|
||
String get dateField => 'Fecha';
|
||
|
||
@override
|
||
String get onceOption => 'Una vez';
|
||
|
||
@override
|
||
String get dailyOption => 'Diaria';
|
||
|
||
@override
|
||
String get weekdaysOption => 'Días';
|
||
|
||
@override
|
||
String get soundAndVolumeSection => 'Sonido y volumen';
|
||
|
||
@override
|
||
String get alarmFadeInTitle => 'Fade-in de alarma';
|
||
|
||
@override
|
||
String get alarmFadeInOff => '0 s (sin transición)';
|
||
|
||
@override
|
||
String alarmFadeInSummary(int seconds) {
|
||
return '$seconds s (de 5% al volumen elegido)';
|
||
}
|
||
|
||
@override
|
||
String get internalSafeSoundLabel => 'Sonido seguro interno';
|
||
|
||
@override
|
||
String get soundWarmSunrise => 'Amanecer cálido';
|
||
|
||
@override
|
||
String get soundSoftBell => 'Campana suave';
|
||
|
||
@override
|
||
String get soundDigitalPulse => 'Pulso digital';
|
||
|
||
@override
|
||
String get favoriteStationLabel => 'Emisora favorita';
|
||
|
||
@override
|
||
String get noStationUseInternalSound => 'Sin emisora: usar sonido interno';
|
||
|
||
@override
|
||
String get alarmFallbackStationLabel => 'Emisora de respaldo';
|
||
|
||
@override
|
||
String get alarmStationPickerSearchHint => 'Buscá una emisora por nombre';
|
||
|
||
@override
|
||
String get alarmSnoozeDurationTitle => 'Duración de la posposición';
|
||
|
||
@override
|
||
String get snoozeAction => 'Posponer';
|
||
|
||
@override
|
||
String alarmSnoozeOptionLabel(int minutes) {
|
||
return '$minutes min';
|
||
}
|
||
|
||
@override
|
||
String get alarmSnoozeUsualLabel => 'habitual';
|
||
|
||
@override
|
||
String get saveFavoritesAlarmHint =>
|
||
'Guardá emisoras en Favoritos para usarlas como alarma musical.';
|
||
|
||
@override
|
||
String get useCurrentStationAction => 'Usar emisora actual';
|
||
|
||
@override
|
||
String get playDuringVacations => 'Sonar durante vacaciones';
|
||
|
||
@override
|
||
String get playDuringVacationsHint =>
|
||
'Si lo apagás, la próxima ejecución saltará al primer día válido.';
|
||
|
||
@override
|
||
String get saveAlarmAction => 'Guardar alarma';
|
||
|
||
@override
|
||
String get chooseOneWeekdayError => 'Elegí al menos un día de la semana.';
|
||
|
||
@override
|
||
String get androidReliabilityReview => 'Revisar fiabilidad Android';
|
||
|
||
@override
|
||
String get statusOk => 'OK';
|
||
|
||
@override
|
||
String get statusPending => 'pendiente';
|
||
|
||
@override
|
||
String androidReliabilityStatus(
|
||
Object exact,
|
||
Object notifications,
|
||
Object screen,
|
||
) {
|
||
return 'Fiabilidad: exactas $exact · notificaciones $notifications · pantalla $screen';
|
||
}
|
||
|
||
@override
|
||
String get vacationRangesTitle => 'Rangos de vacaciones';
|
||
|
||
@override
|
||
String get addAction => 'Agregar';
|
||
|
||
@override
|
||
String get vacationRangesHint =>
|
||
'Si una alarma tiene \"Pausa en vacaciones\", se salta automáticamente estos rangos.';
|
||
|
||
@override
|
||
String get noVacationRangesLoaded => 'Sin rangos cargados.';
|
||
|
||
@override
|
||
String get deleteRangeTooltip => 'Eliminar rango';
|
||
|
||
@override
|
||
String vacationRangesCount(int count) {
|
||
return '$count rangos';
|
||
}
|
||
|
||
@override
|
||
String vacationSummaryActiveCountdown(int days) {
|
||
return 'En curso · quedan $days días';
|
||
}
|
||
|
||
@override
|
||
String vacationSummaryUpcomingCountdown(int days) {
|
||
return 'Próximo rango en $days días';
|
||
}
|
||
|
||
@override
|
||
String vacationImpactPausedLabel(Object times) {
|
||
return 'Pausa: $times';
|
||
}
|
||
|
||
@override
|
||
String vacationImpactContinuesLabel(Object times) {
|
||
return 'Sigue sonando: $times';
|
||
}
|
||
|
||
@override
|
||
String get vacationUpcomingSectionTitle => 'PROGRAMADOS';
|
||
|
||
@override
|
||
String get vacationPastSectionTitle => 'Rangos pasados';
|
||
|
||
@override
|
||
String get addVacationRangeCta => 'Añadir rango';
|
||
|
||
@override
|
||
String get vacationExplainerBanner =>
|
||
'Durante estos rangos no suenan las alarmas marcadas como \"pausar en vacaciones\". Las marcadas como \"sonar siempre\" no se ven afectadas.';
|
||
|
||
@override
|
||
String get vacationNoActiveRangeHint =>
|
||
'No hay un rango de vacaciones activo ahora mismo.';
|
||
|
||
@override
|
||
String get vacationsDefaultName => 'Vacaciones';
|
||
|
||
@override
|
||
String get newVacationRangeTitle => 'Nuevo rango de vacaciones';
|
||
|
||
@override
|
||
String get editVacationRangeTitle => 'Editar rango de vacaciones';
|
||
|
||
@override
|
||
String get vacationDeleteConfirmTitle => '¿Eliminar rango de vacaciones?';
|
||
|
||
@override
|
||
String get vacationDeleteConfirmMessage =>
|
||
'Esta acción no se puede deshacer.';
|
||
|
||
@override
|
||
String get startField => 'Inicio';
|
||
|
||
@override
|
||
String get endField => 'Fin';
|
||
|
||
@override
|
||
String get saveRangeAction => 'Guardar rango';
|
||
|
||
@override
|
||
String get noAlarmsYetTitle => 'Todavía no hay alarmas.';
|
||
|
||
@override
|
||
String get noAlarmsYetSubtitle =>
|
||
'Creá una para diseñar tu despertar musical.';
|
||
|
||
@override
|
||
String get ringingInternalAudioActive => 'Sonando con audio seguro interno.';
|
||
|
||
@override
|
||
String get ringingPreparingInternalAudio =>
|
||
'Preparando audio seguro interno.';
|
||
|
||
@override
|
||
String get stopAlarmAction => 'Detener alarma';
|
||
|
||
@override
|
||
String get alarmStopFailedMessage =>
|
||
'No pudimos confirmar que la alarma se detuvo. Inténtalo de nuevo.';
|
||
|
||
@override
|
||
String get alarmForceStopAction => 'Forzar detención';
|
||
|
||
@override
|
||
String get alarmMissedNotificationTitle => 'Alarma perdida';
|
||
|
||
@override
|
||
String alarmMissedNotificationText(Object name) {
|
||
return '$name se silenció automáticamente después de 10 minutos.';
|
||
}
|
||
|
||
@override
|
||
String get pauseAction => 'Pausar';
|
||
|
||
@override
|
||
String miniPlayerOpenLabel(Object stationName) {
|
||
return 'Abrir reproductor de $stationName';
|
||
}
|
||
|
||
@override
|
||
String get playerIconLabel => 'Reproductor';
|
||
|
||
@override
|
||
String get playbackStatusConnecting => 'Conectando...';
|
||
|
||
@override
|
||
String get playbackStatusLive => 'En directo';
|
||
|
||
@override
|
||
String get playbackStatusPaused => 'Pausado';
|
||
|
||
@override
|
||
String get playbackStatusReconnecting => 'Reconectando...';
|
||
|
||
@override
|
||
String get playbackStatusConnectionError => 'Error de conexión';
|
||
|
||
@override
|
||
String get playbackStatusStopped => 'Detenido';
|
||
|
||
@override
|
||
String stationSemanticLabel(Object stationName) {
|
||
return 'Emisora $stationName';
|
||
}
|
||
|
||
@override
|
||
String get favoritesAddTooltip => 'Añadir a favoritos';
|
||
|
||
@override
|
||
String favoritesAddedMessage(Object stationName) {
|
||
return '$stationName añadida a favoritos';
|
||
}
|
||
|
||
@override
|
||
String get stationIconLabel => 'Icono de emisora';
|
||
|
||
@override
|
||
String get liveNow => 'En vivo';
|
||
|
||
@override
|
||
String equalizerBandLabel(Object band) {
|
||
return 'Banda $band';
|
||
}
|
||
|
||
@override
|
||
String equalizerBandValue(Object value) {
|
||
return '$value decibelios';
|
||
}
|
||
|
||
@override
|
||
String get equalizerPresetFlat => 'Plano';
|
||
|
||
@override
|
||
String get equalizerPresetRock => 'Rock';
|
||
|
||
@override
|
||
String get equalizerPresetPop => 'Pop';
|
||
|
||
@override
|
||
String get equalizerPresetBassBoost => 'Refuerzo de graves';
|
||
|
||
@override
|
||
String get equalizerPresetJazz => 'Jazz';
|
||
|
||
@override
|
||
String get equalizerPresetVoice => 'Voz';
|
||
|
||
@override
|
||
String get equalizerPresetCustom => 'Personalizado';
|
||
|
||
@override
|
||
String get onboardingTitle => 'Bienvenido a PluriWave';
|
||
|
||
@override
|
||
String get onboardingNewsTitle => 'Novedades';
|
||
|
||
@override
|
||
String get onboardingStartAction => 'Empezar';
|
||
|
||
@override
|
||
String get onboardingCloseTooltip => 'Cerrar';
|
||
|
||
@override
|
||
String radioRecordingError(Object error) {
|
||
return 'Error al grabar la radio: $error';
|
||
}
|
||
|
||
@override
|
||
String get radioApiConnectionError => 'Sin conexión a la API de radio';
|
||
|
||
@override
|
||
String get radioSearchError => 'Error en la búsqueda. Comprueba tu conexión.';
|
||
|
||
@override
|
||
String get radioLoadMoreStationsError =>
|
||
'No se pudieron cargar más emisoras.';
|
||
|
||
@override
|
||
String get radioNearbyStationsError =>
|
||
'No pudimos detectar emisoras cercanas. Usa filtros por país.';
|
||
|
||
@override
|
||
String radioCannotPlayStation(Object stationName) {
|
||
return 'No se puede reproducir \"$stationName\"';
|
||
}
|
||
|
||
@override
|
||
String get recordingSelectStationFirst =>
|
||
'Primero selecciona una emisora para grabar.';
|
||
|
||
@override
|
||
String recordingStartError(Object error) {
|
||
return 'No se pudo iniciar la grabación: $error';
|
||
}
|
||
|
||
@override
|
||
String get unsupportedConfigVersion =>
|
||
'Versión de configuración no compatible';
|
||
|
||
@override
|
||
String get audioErrorGeneric => 'Error de reproducción';
|
||
|
||
@override
|
||
String get audioErrorNoInternet => 'Sin conexión a internet';
|
||
|
||
@override
|
||
String get audioErrorInvalidUrl => 'La URL de la radio no es válida';
|
||
|
||
@override
|
||
String get audioErrorNotFound => 'La radio no está disponible (error 404)';
|
||
|
||
@override
|
||
String get audioErrorTimeout => 'Tiempo de espera agotado al conectar';
|
||
|
||
@override
|
||
String get audioErrorCannotConnect => 'No se puede conectar a la radio';
|
||
|
||
@override
|
||
String get audioErrorUnsupportedFormat => 'Formato de stream no compatible';
|
||
|
||
@override
|
||
String get audioErrorDecode => 'Error al decodificar el stream de audio';
|
||
|
||
@override
|
||
String get audioErrorCleartext =>
|
||
'Esta radio usa HTTP sin cifrar, y no está permitido';
|
||
|
||
@override
|
||
String get audioErrorSsl => 'Certificado SSL inválido en la radio';
|
||
|
||
@override
|
||
String get audioErrorCannotPlay => 'No se puede reproducir esta radio';
|
||
|
||
@override
|
||
String get audioErrorUnexpectedPlayback => 'Error inesperado al reproducir';
|
||
|
||
@override
|
||
String get androidExactAlarmScheduleError =>
|
||
'Android no pudo programar una alarma exacta. Revisa el permiso de alarmas exactas.';
|
||
|
||
@override
|
||
String get recordingPathEmptyError =>
|
||
'La ruta de grabación no puede estar vacía';
|
||
|
||
@override
|
||
String get recordingMaxSizeInvalidError =>
|
||
'El tamaño máximo debe ser mayor que cero';
|
||
|
||
@override
|
||
String get recordingAlreadyActiveError => 'Ya hay una grabación en curso';
|
||
|
||
@override
|
||
String get alarmRingingFallbackActive => 'Sonando con audio seguro interno.';
|
||
|
||
@override
|
||
String get alarmRingingPreparingFallback =>
|
||
'Preparando audio seguro interno.';
|
||
|
||
@override
|
||
String get alarmRingingTryingStation =>
|
||
'Intentando reproducir tu emisora con máxima calidad disponible.';
|
||
|
||
@override
|
||
String get alarmScheduleDaily => 'Cada mañana';
|
||
|
||
@override
|
||
String alarmScheduleOnce(Object date) {
|
||
return 'Una vez · $date';
|
||
}
|
||
|
||
@override
|
||
String alarmScheduleWeekdays(Object days) {
|
||
return 'Días: $days';
|
||
}
|
||
|
||
@override
|
||
String get alarmRepeatSectionLabel => 'REPETIR';
|
||
|
||
@override
|
||
String get alarmVolumeLabel => 'Volumen';
|
||
|
||
@override
|
||
String get androidReliabilityTitle => 'Revisar fiabilidad Android';
|
||
|
||
@override
|
||
String get closeAction => 'Cerrar';
|
||
|
||
@override
|
||
String get customOption => 'Personalizada';
|
||
|
||
@override
|
||
String get endLabel => 'Fin';
|
||
|
||
@override
|
||
String get equalizerDisable => 'Desactivar ecualizador';
|
||
|
||
@override
|
||
String get helpTitle => 'Ayuda y tutorial';
|
||
|
||
@override
|
||
String get helpSubtitle => '9 pantallas · vuelve a verlo cuando quieras';
|
||
|
||
@override
|
||
String get tutorialSkipAction => 'Saltar';
|
||
|
||
@override
|
||
String get tutorialNextAction => 'Siguiente';
|
||
|
||
@override
|
||
String get tutorialPage1Headline => 'Guarda tus emisoras y agrúpalas';
|
||
|
||
@override
|
||
String get tutorialPage1Body =>
|
||
'Toca el corazón para guardar una emisora. En «Tus emisoras» puedes crear grupos como «Cada mañana» o «Coche» y reordenarlas arrastrando.';
|
||
|
||
@override
|
||
String get tutorialPage2Headline => 'Un ecualizador base y otro por emisora';
|
||
|
||
@override
|
||
String get tutorialPage2Body =>
|
||
'En Ajustes defines el ecualizador general. Y desde la reproducción de una emisora concreta puedes darle su propio ajuste, que manda sobre el general.';
|
||
|
||
@override
|
||
String get tutorialPage3Headline => 'Graba lo que estás escuchando';
|
||
|
||
@override
|
||
String get tutorialPage3Body =>
|
||
'Desde la bandeja de herramientas del reproductor, «Grabar» guarda el stream original. Encuentra tus grabaciones en Ajustes › Grabaciones.';
|
||
|
||
@override
|
||
String get tutorialPage4Headline => 'Alarmas que se adaptan a ti';
|
||
|
||
@override
|
||
String get tutorialPage4Body =>
|
||
'Despiértate con tu emisora favorita, pospón 3, 5 o 10 minutos, y añade rangos de vacaciones para que algunas alarmas se salten solas.';
|
||
|
||
@override
|
||
String get tutorialPage5Headline => 'Tus favoritas, también en el coche';
|
||
|
||
@override
|
||
String get tutorialPage5Body =>
|
||
'Conecta el móvil con Android Auto y encontrarás Favoritos, Todas las emisoras, Mis emisoras y tu Música Local, con botones grandes pensados para conducir.';
|
||
|
||
@override
|
||
String get tutorialPage6Headline => 'Se reconecta sola';
|
||
|
||
@override
|
||
String get tutorialPage6Body =>
|
||
'Si se corta la señal, PluriWave reintenta automáticamente y sigue mostrando tus favoritas guardadas aunque no tengas conexión.';
|
||
|
||
@override
|
||
String get tutorialPage7Headline => 'Elige cuánto posponer';
|
||
|
||
@override
|
||
String get tutorialPage7Body =>
|
||
'Cuando suene una alarma, no hay un único «posponer»: eliges 3, 5 o 10 minutos según lo que necesites en ese momento.';
|
||
|
||
@override
|
||
String get tutorialPage8Headline => '¿No la encuentras? Añádela tú';
|
||
|
||
@override
|
||
String get tutorialPage8Body =>
|
||
'En «Tus emisoras» → Añadir emisora personalizada pega la URL del stream de una emisora que no esté en el buscador. Se guarda en «Mis emisoras», también disponible en el coche.';
|
||
|
||
@override
|
||
String get tutorialPage9Headline => 'Listo, ya conoces lo esencial';
|
||
|
||
@override
|
||
String get tutorialPage9BannerBody =>
|
||
'Para volver a ver este tutorial cuando quieras: Ajustes → Información → Ayuda y tutorial.';
|
||
|
||
@override
|
||
String get indefiniteOption => 'Indefinida';
|
||
|
||
@override
|
||
String get invalidNumber => 'Número inválido';
|
||
|
||
@override
|
||
String get nameLabel => 'Nombre';
|
||
|
||
@override
|
||
String get notPlaying => 'No está reproduciendo';
|
||
|
||
@override
|
||
String get oneTimeOption => 'Una vez';
|
||
|
||
@override
|
||
String get pausePlaybackTooltip => 'Pausar reproducción';
|
||
|
||
@override
|
||
String get playerQualityChangeAction => 'Cambiar';
|
||
|
||
@override
|
||
String get playerToolEqLabel => 'EQ propio';
|
||
|
||
@override
|
||
String qualityOriginal(Object quality) {
|
||
return 'Calidad original: $quality';
|
||
}
|
||
|
||
@override
|
||
String get qualityUnknown => 'Calidad no informada';
|
||
|
||
@override
|
||
String get recordAction => 'Grabar';
|
||
|
||
@override
|
||
String get recordDurationTitle => 'Duración de grabación';
|
||
|
||
@override
|
||
String get recordRadioSubtitle => 'Elegí cuánto tiempo querés grabar.';
|
||
|
||
@override
|
||
String get recordRadioTitle => 'Grabar radio';
|
||
|
||
@override
|
||
String get recordingActiveTitle => 'Grabando radio';
|
||
|
||
@override
|
||
String get recordingDirectTitle => 'Grabación directa';
|
||
|
||
@override
|
||
String get recordingsOpenFolderPlainError =>
|
||
'No se pudo abrir la carpeta de grabaciones';
|
||
|
||
@override
|
||
String get recordingsOpenLatest => 'Abrir última grabación';
|
||
|
||
@override
|
||
String get recordingsOpenLatestError =>
|
||
'No se pudo abrir la última grabación';
|
||
|
||
@override
|
||
String get startLabel => 'Inicio';
|
||
|
||
@override
|
||
String get startPlaybackTooltip => 'Iniciar reproducción';
|
||
|
||
@override
|
||
String get stopAction => 'Parar';
|
||
|
||
@override
|
||
String get stopPlaybackTooltip => 'Detener reproducción';
|
||
|
||
@override
|
||
String get weekdayShortMonday => 'Lun';
|
||
|
||
@override
|
||
String get weekdayShortTuesday => 'Mar';
|
||
|
||
@override
|
||
String get weekdayShortWednesday => 'Mié';
|
||
|
||
@override
|
||
String get weekdayShortThursday => 'Jue';
|
||
|
||
@override
|
||
String get weekdayShortFriday => 'Vie';
|
||
|
||
@override
|
||
String get weekdayShortSaturday => 'Sáb';
|
||
|
||
@override
|
||
String get weekdayShortSunday => 'Dom';
|
||
|
||
@override
|
||
String stationCount(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count emisoras',
|
||
one: '1 emisora',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String get alarmIconLabel => 'Alarma musical';
|
||
|
||
@override
|
||
String get vacationIconLabel => 'Modo vacaciones';
|
||
|
||
@override
|
||
String get alarmAdvancedSectionTitle => 'Avanzado';
|
||
|
||
@override
|
||
String get alarmInlineHourLabel => 'Hora';
|
||
|
||
@override
|
||
String get alarmInlineMinuteLabel => 'Minuto';
|
||
|
||
@override
|
||
String get alarmVolumeRisingStatus => 'Subiendo volumen';
|
||
|
||
@override
|
||
String get streamUrlHint => 'https://stream.example.com:8000/radio';
|
||
|
||
@override
|
||
String get advancedEqSectionTitle => 'Opciones avanzadas de ecualización';
|
||
|
||
@override
|
||
String get advancedEqEnableToggle => 'Activar EQ por dispositivo';
|
||
|
||
@override
|
||
String get advancedEqEnableToggleSubtitle =>
|
||
'Aplica automáticamente un preset de EQ distinto al cambiar la salida de audio.';
|
||
|
||
@override
|
||
String get advancedEqKnownDevicesTitle => 'Dispositivos de audio conocidos';
|
||
|
||
@override
|
||
String get advancedEqKnownDevicesEmpty =>
|
||
'No hay dispositivos registrados. Conectá uno para empezar.';
|
||
|
||
@override
|
||
String advancedEqDevicePresetLabel(Object presetName) {
|
||
return 'Preset: $presetName';
|
||
}
|
||
|
||
@override
|
||
String preNoticeCountdown(int minutes) {
|
||
return 'Empieza en $minutes min';
|
||
}
|
||
|
||
@override
|
||
String snoozeCountdown(int minutes) {
|
||
return 'Suena en $minutes min';
|
||
}
|
||
|
||
@override
|
||
String get snoozeAgainAction => 'Posponer otra vez';
|
||
|
||
@override
|
||
String get alarmRingingNotificationTitle => 'Alarma PluriWave';
|
||
|
||
@override
|
||
String get alarmFireChannelName => 'Alarmas sonando';
|
||
|
||
@override
|
||
String get alarmFireChannelDescription =>
|
||
'Sonido y pantalla urgente cuando una alarma musical debe sonar';
|
||
|
||
@override
|
||
String get alarmPreNoticeChannelName => 'Preavisos de alarmas';
|
||
|
||
@override
|
||
String get alarmPreNoticeChannelDescription =>
|
||
'Notificaciones silenciosas antes de la alarma';
|
||
|
||
@override
|
||
String get openFolderChooserTitle => 'Abrir carpeta';
|
||
|
||
@override
|
||
String get openRecordingChooserTitle => 'Abrir grabación';
|
||
|
||
@override
|
||
String get eqDeviceEditTitle => 'Editar dispositivo';
|
||
|
||
@override
|
||
String get eqDeviceNameLabel => 'Nombre del dispositivo';
|
||
|
||
@override
|
||
String get eqDeviceNameHint => 'Ej: Altavoz del living';
|
||
|
||
@override
|
||
String get eqDeviceNameConfirm => 'Guardar';
|
||
|
||
@override
|
||
String get eqDeviceConnected => 'Conectado';
|
||
|
||
@override
|
||
String get eqDeviceActiveOutput =>
|
||
'El audio está saliendo por este dispositivo';
|
||
|
||
@override
|
||
String get eqDeviceRemove => 'Quitar dispositivo';
|
||
|
||
@override
|
||
String eqDeviceRemoved(Object device) {
|
||
return 'Se quitó $device';
|
||
}
|
||
|
||
@override
|
||
String get localMusicSectionTitle => 'Música local (Android Auto)';
|
||
|
||
@override
|
||
String get localMusicSectionDescription =>
|
||
'Elegí una carpeta de este dispositivo para explorar y reproducir sus archivos de audio desde el auto.';
|
||
|
||
@override
|
||
String get localMusicFolderNotConfigured => 'No hay carpeta seleccionada';
|
||
|
||
@override
|
||
String get localMusicFolderTitle => 'Carpeta de música local';
|
||
|
||
@override
|
||
String get localMusicChoosePath => 'Elegir carpeta';
|
||
|
||
@override
|
||
String get localMusicChangePath => 'Cambiar carpeta';
|
||
|
||
@override
|
||
String get localMusicFolderUpdated => 'Carpeta de música local actualizada';
|
||
|
||
@override
|
||
String localMusicFolderSaveError(Object error) {
|
||
return 'No se pudo guardar la carpeta: $error';
|
||
}
|
||
|
||
@override
|
||
String get localMusicFolderGenericName => 'Carpeta seleccionada';
|
||
|
||
@override
|
||
String get welcomeHeadline => 'Tu mundo, en directo';
|
||
|
||
@override
|
||
String get welcomeBody =>
|
||
'53.412 emisoras de 238 países. Guardá tus favoritas, llevalas al auto y despertate con ellas.';
|
||
|
||
@override
|
||
String get welcomeBullet1Title => 'Ecualizador por emisora';
|
||
|
||
@override
|
||
String get welcomeBullet1Subtitle => 'Y un preset por dispositivo de salida';
|
||
|
||
@override
|
||
String get welcomeBullet2Title => 'Android Auto';
|
||
|
||
@override
|
||
String get welcomeBullet2Subtitle =>
|
||
'Tus favoritas y tu música local en el auto';
|
||
|
||
@override
|
||
String get welcomeBullet3Title => 'Alarmas musicales';
|
||
|
||
@override
|
||
String get welcomeBullet3Subtitle =>
|
||
'Con subida progresiva y modo vacaciones';
|
||
|
||
@override
|
||
String get welcomeCtaLabel => 'Empezar a escuchar';
|
||
|
||
@override
|
||
String get eqCustomActionEnableLabel => 'Activar ecualizador';
|
||
|
||
@override
|
||
String get eqCustomActionDisableLabel => 'Desactivar ecualizador';
|
||
|
||
@override
|
||
String eqCustomActionPresetLabel(String preset) {
|
||
return 'Preset: $preset';
|
||
}
|
||
|
||
@override
|
||
String get alarmCardVacationPausedBadge => 'Pausada por vacaciones';
|
||
|
||
@override
|
||
String get alarmCardSchedulingFailedMessage =>
|
||
'Esta alarma no se pudo registrar en el sistema, así que podría no sonar.';
|
||
|
||
@override
|
||
String get alarmCardPreNoticeFailedMessage =>
|
||
'Esta alarma está programada, pero no se pudo activar su aviso previo.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsExactAlarmsTitle =>
|
||
'Programación de alarma exacta';
|
||
|
||
@override
|
||
String get alarmDiagnosticsExactAlarmsHint =>
|
||
'Permite que la alarma suene en el minuto exacto que elegiste, incluso con el teléfono en reposo.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNotificationsTitle => 'Notificaciones';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNotificationsHint =>
|
||
'Necesarias para mostrar la alarma y el aviso previo.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsFullScreenTitle =>
|
||
'Pantalla completa de la alarma';
|
||
|
||
@override
|
||
String get alarmDiagnosticsFullScreenHint =>
|
||
'Permite que la pantalla de la alarma aparezca automáticamente, incluso con el teléfono bloqueado.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsBatteryTitle => 'Optimización de batería';
|
||
|
||
@override
|
||
String get alarmDiagnosticsBatteryHint =>
|
||
'Evita que el sistema cierre PluriWave en segundo plano para que la alarma pueda sonar.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNativeCountTitle =>
|
||
'Alarmas registradas en Android';
|
||
|
||
@override
|
||
String alarmDiagnosticsNativeCountValue(int count) {
|
||
return 'Registradas ahora mismo: $count';
|
||
}
|
||
|
||
@override
|
||
String get alarmDiagnosticsNativeCountAttentionHint =>
|
||
'Tenés una alarma activada, pero todavía ninguna está registrada en el sistema. Volvé a abrir PluriWave o solucioná primero los puntos de arriba.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsManufacturerLabel => 'Fabricante';
|
||
|
||
@override
|
||
String get alarmDiagnosticsSdkLabel => 'Versión de Android (SDK)';
|
||
|
||
@override
|
||
String get alarmDiagnosticsNeedsAttentionStatus => 'Necesita atención';
|
||
|
||
@override
|
||
String get alarmDiagnosticsAutostartTitle =>
|
||
'Un paso manual más en este teléfono';
|
||
|
||
@override
|
||
String alarmDiagnosticsAutostartBody(String manufacturer) {
|
||
return 'Los teléfonos $manufacturer suelen cerrar las apps que están en segundo plano para ahorrar batería. No hay ningún ajuste que PluriWave pueda activar por su cuenta: tenés que activar vos mismo el Inicio automático (a veces llamado \"Autostart\" o \"Actividad en segundo plano\"). Buscalo en Ajustes, dentro de Apps o Batería, o en la app de Seguridad del teléfono.';
|
||
}
|
||
|
||
@override
|
||
String get alarmDiagnosticsFixAction => 'Solucionar';
|
||
|
||
@override
|
||
String get alarmDiagnosticsIntentUnavailable =>
|
||
'No se pudo abrir esa pantalla de ajustes en este teléfono. Buscala manualmente en Ajustes.';
|
||
|
||
@override
|
||
String get alarmDiagnosticsUnavailableHint =>
|
||
'Todavía no pudimos revisar tus ajustes de alarma.';
|
||
|
||
@override
|
||
String get autoEqDisableOption => 'Desactivar';
|
||
|
||
@override
|
||
String get funcionPremium => 'Función Premium';
|
||
|
||
@override
|
||
String get limiteAlarmasAlcanzado =>
|
||
'Has alcanzado el límite de 5 alarmas gratuitas.';
|
||
|
||
@override
|
||
String get desbloquearPremium => 'Desbloquear Premium';
|
||
|
||
@override
|
||
String get restaurarCompras => 'Restaurar compras';
|
||
|
||
@override
|
||
String get compraError =>
|
||
'No se ha podido completar la compra. Inténtalo de nuevo.';
|
||
|
||
@override
|
||
String get restauracionSinCompras =>
|
||
'No hemos encontrado ninguna compra anterior en esta cuenta.';
|
||
|
||
@override
|
||
String get premiumActivo => 'Premium activo';
|
||
}
|