Files
FreeTLab 8e155cc0ac fix: cumplir las guias de calidad de Android Auto y localizar el arbol del coche
Google Play devolvio "Approved with Issues" en el codigo 157: "clicking on
stop button makes the entire app useless", citado contra las Android for Cars
App Quality Guidelines. La causa no era el boton de parar.

Maquina de estados del transporte

_cambiarFuente publicaba mediaItem y loading ANTES de su primer await y solo
comprobaba su revision despues de que _recrearPlayer retornase. Los cambios de
fuente se encolan incrementando la revision al encolar, no al ejecutar, asi
que tocar una emisora, tocar otra antes de que cargue y pulsar Stop dejaba que
las entradas obsoletas reescribieran loading sobre el idle que stop() acababa
de publicar. Estado final: loading para siempre sobre una sesion que
audio_service ya habia desactivado. Ahora la guarda de revision es la primera
sentencia del metodo.

pause() no invalidaba una carga en vuelo, asi que la emisora arrancaba igual
despues de pulsar pausa; se revalida la intencion antes de llamar a play().
Se anade un suelo de estado que cierra cualquier loading o buffering sin carga
viva, exento cuando el reproductor ya entrego audio y solo esta rebufferando,
para no convertir un tunel en un error. El presupuesto hasta el primer mensaje
baja a menos de diez segundos y los reintentos ya no borran el mensaje visible.

Tier gratuito en el coche

El arbol devolvia una unica fila no reproducible para cualquier carpeta cuando
no habia premium, y un revisor con instalacion limpia siempre es tier
gratuito. Ademas skipToNext, skipToPrevious, playFromSearch y playFromMediaId
retornaban en silencio. La raiz gratuita pasa a ofrecer una sola carpeta con
emisoras reales y reproducibles, compiladas en el binario para que existan en
frio, y la puerta de entitlement acota contenido en vez de bloquear acciones.
Se elimina la fila "Funcion Premium". Una consulta de voz vacia arranca la
ultima emisora, que fallaba tambien a los clientes de pago.

Localizacion

El locale del handler solo lo fijaba un widget que el motor headless nunca
construye, asi que todo error del coche salia en castellano. Se resuelve desde
el locale de plataforma. Se traducen las once etiquetas del arbol que estaban
a fuego y se retira la convencion que lo justificaba. Un test nuevo falla si
vuelve a aparecer texto visible fuera del sistema de traduccion.

Suite completa: 1455 pasan, 2 omitidos. Los mecanismos se verificaron por
mutacion: borrar cada uno pone la suite en rojo. flutter analyze mantiene los
5 avisos preexistentes.
2026-09-04 13:26:00 +02:00

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