Files
pluriwave/lib/l10n/gen/app_localizations_es.dart
T
FreeTLab aa0b242374 feat(iap): add freemium unlock via one-time in-app purchase
Adds a permanent, non-consumable premium unlock (EstadoEntitlement +
PuertoCompras/ServicioComprasPlayBilling) that removes ads and unlocks
alarm vacations, alarms past a 5-alarm free cap, recording start, and
full Android Auto browsing. The phone equalizer stays free for everyone.

- Entitlement is prefs-backed (compra_premium_v1), fail-open, and
  resolvable headlessly via esPremiumPersistido() for the Android Auto
  audio handler, which registers before runApp.
- Android Auto reduced mode keeps the real root folder labels for free
  users; browsing into any of them (and playFromMediaId/playFromSearch/
  skipToNext/skipToPrevious) is blocked at the getChildren/servicio_audio
  choke points, with a locked "Función Premium" item as the backstop.
  Current-station play/pause/stop stays untouched. A free -> premium
  transition actively invalidates the head unit's cached browse tree.
- Ads (top banner + capped interstitial before adding a station or an
  alarm) are gated behind entitlement via ServicioAnuncios, using
  official Google test ad unit IDs pending AdMob provisioning.
- Alarm cap UX shows an explanatory message with a secondary unlock
  action rather than a bare paywall jump; existing data is grandfathered.
- 4 new localization keys translated across all 13 supported locales.

Co-located tests use strict TDD (RED test before implementation) for
every new pure-logic unit; full existing suite passes unchanged.
2026-08-10 20:37:07 +02:00

1874 lines
46 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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';
}