Files
pluriwave/lib/l10n/gen/app_localizations_ru.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

1878 lines
58 KiB
Dart
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 Russian (`ru`).
class AppLocalizationsRu extends AppLocalizations {
AppLocalizationsRu([String locale = 'ru']) : super(locale);
@override
String get appTitle => 'PluriWave';
@override
String get navHome => 'Слушать';
@override
String get navSearch => 'Поиск';
@override
String get navFavorites => 'Избранное';
@override
String get navAlarms => 'Будильники';
@override
String get navSettings => 'Настройки';
@override
String get actionOk => 'ОК';
@override
String get sleepTimer => 'Таймер сна';
@override
String get sleepTimerDescription =>
'Плавное выключение радио с точным обратным отсчётом.';
@override
String get cancelTimer => 'Отменить таймер';
@override
String get optionOther => 'Другое';
@override
String get customDurationTitle => 'Своя длительность';
@override
String get durationGreaterThanZero => 'Выберите длительность больше нуля.';
@override
String get hoursLabel => 'Часы';
@override
String get minutesLabel => 'Минуты';
@override
String get secondsLabel => 'Секунды';
@override
String durationHoursMinutesSeconds(
Object hours,
Object minutes,
Object seconds,
) {
return '$hours ч $minutes мин $seconds сек';
}
@override
String durationMinutesSeconds(Object minutes, Object seconds) {
return '$minutes мин $seconds сек';
}
@override
String durationMinutesOnly(Object minutes) {
return '$minutes мин';
}
@override
String durationSecondsOnly(Object seconds) {
return '$seconds сек';
}
@override
String get saveQuickAccess => 'Сохранить как быстрый доступ';
@override
String get startTimer => 'Запустить таймер';
@override
String skipCurrentAlarmExecution(Object alarmName) {
return 'Этот запуск $alarmName пропущен.';
}
@override
String get settingsTitle => 'Настройки';
@override
String get settingsSubtitle =>
'Точная настройка звука, резервных копий и пользовательских станций.';
@override
String get settingsGroupAudioTitle => 'АУДИО';
@override
String get settingsGroupStationsTitle => 'СТАНЦИИ';
@override
String get settingsGroupRecordingsTitle => 'ЗАПИСИ И МУЗЫКА';
@override
String get settingsGroupApplicationTitle => 'ПРИЛОЖЕНИЕ';
@override
String get infoSectionTitle => 'Информация';
@override
String get languageSectionTitle => 'Язык';
@override
String get languageSectionDescription =>
'Выберите, как отображается язык приложения.';
@override
String get languageSystemDefault => 'Система';
@override
String get languageSpanish => 'Испанский';
@override
String get languageEnglish => 'Английский';
@override
String languageUpdated(Object languageName) {
return 'Язык обновлён: $languageName';
}
@override
String get languageUpdatedSystem => 'Язык обновлён: система';
@override
String get timerSectionTitle => 'Таймер сна';
@override
String get timerSectionAdd => 'Добавить';
@override
String get timerSectionDescription =>
'Настройте быстрые пресеты, которые появляются при автоматическом выключении радио.';
@override
String get timerSectionRestoreRecommended =>
'Восстановить рекомендуемое время';
@override
String get newQuickAccessTitle => 'Новый быстрый доступ';
@override
String get saveQuickAccessButton => 'Сохранить быстрый доступ';
@override
String get settingsSafeStatus => 'Безопасно';
@override
String get recordingsSectionTitle => 'Записи';
@override
String get recordingsFolderDialogTitle => 'Выберите папку для записей';
@override
String get recordingsPathUpdated => 'Путь записи обновлён';
@override
String recordingsPathSaveError(Object error) {
return 'Не удалось сохранить путь: $error';
}
@override
String get recordingsDefaultFolderRestored =>
'Будет использована внутренняя папка по умолчанию';
@override
String get recordingsFolderTitle => 'Папка записей';
@override
String get recordingsPathCalculating => 'Вычисление пути...';
@override
String get recordingsChangePath => 'Изменить путь';
@override
String get recordingsUseDefaultPath => 'Использовать путь по умолчанию';
@override
String get recordingsOriginalStreamHint =>
'Радио сохраняется из исходного потока без повторного сжатия.';
@override
String get equalizerActive => 'Активно';
@override
String get equalizerDisabled => 'Отключено';
@override
String get equalizerEnable => 'Включить эквалайзер';
@override
String get equalizerRealtimeSubtitle =>
'Изменения применяются к текущей станции в реальном времени.';
@override
String get equalizerPendingSubtitle =>
'Изменения сохраняются и применятся, когда Android включит эффект.';
@override
String get equalizerPerStationTitle =>
'Использовать свой EQ для этого избранного';
@override
String equalizerPerStationActive(Object stationName) {
return 'Активно для $stationName';
}
@override
String equalizerPerStationMain(Object stationName) {
return 'Используется основной EQ для $stationName';
}
@override
String get equalizerBaseExplainer =>
'Это базовый эквалайзер: он применяется ко всем станциям без собственной настройки. Свой EQ конкретной станции задаётся на экране её воспроизведения и имеет приоритет над этим.';
@override
String get equalizerActiveOutputLabel => 'Активный выход';
@override
String get equalizerActiveOutputDefault => 'Динамик этого устройства';
@override
String get equalizerStationsWithOwnEqTitle => 'Станции со своим EQ';
@override
String get equalizerStationsWithOwnEqSubtitle =>
'Игнорируют этот базовый эквалайзер';
@override
String get equalizerStationsWithOwnEqEmpty =>
'Пока ни у одной станции нет своего EQ.';
@override
String get equalizerSaveAsPresetAction => 'Сохранить как пресет';
@override
String get equalizerResetToFlatAction => 'Сбросить на плоский';
@override
String get equalizerSavePresetDialogTitle => 'Сохранить как пресет';
@override
String get equalizerSavePresetNameLabel => 'Название пресета';
@override
String get equalizerSavePresetEmptyNameError => 'Введите название пресета.';
@override
String get equalizerSavePresetConfirm => 'Сохранить';
@override
String get preferredStationTitle => 'Предпочитаемая станция';
@override
String get preferredStationDescription =>
'Предварительно выбирается при создании будильников и доступна для быстрого воспроизведения.';
@override
String get preferredStationNoStationsTitle => 'Пока нет доступных станций';
@override
String get preferredStationNoStationsSubtitle =>
'Сохраните избранные или загрузите станции, чтобы выбрать предпочитаемую.';
@override
String get preferredStationAutomaticFallback => 'Автоматический резерв';
@override
String get preferredStationDefaultFavorite => 'Избранное по умолчанию';
@override
String preferredStationCurrent(Object stationName) {
return 'Текущая предпочитаемая: $stationName';
}
@override
String preferredStationAutoUsing(Object stationName) {
return 'Нет избранных: автоматически используется $stationName';
}
@override
String get preferredStationPlay => 'Воспроизвести предпочитаемую';
@override
String get customStationsTitle => 'Пользовательские станции';
@override
String get customStationsAdd => 'Добавить';
@override
String get customStationsEmpty => 'Пользовательских станций нет.';
@override
String get playAction => 'Воспроизвести';
@override
String get deleteAction => 'Удалить';
@override
String get addStationTitle => 'Добавить станцию';
@override
String get stationNameLabel => 'Название *';
@override
String get unnamedStation => 'Станция без названия';
@override
String get requiredField => 'Обязательное поле';
@override
String get streamUrlLabel => 'URL потока *';
@override
String get invalidUrl => 'Недопустимый URL';
@override
String get countryOptionalLabel => 'Страна (необязательно)';
@override
String get saveStation => 'Сохранить станцию';
@override
String get backupSectionTitle => 'Резервная копия';
@override
String get backupExportTitle => 'Экспортировать настройки';
@override
String get backupExportSubtitle =>
'Избранное, пользовательские станции и пресеты EQ';
@override
String get backupImportTitle => 'Импортировать настройки';
@override
String get backupImportSubtitle => 'Восстановить из файла резервной копии';
@override
String get backupShareSubject => 'PluriWave — резервная копия';
@override
String backupShareText(Object date) {
return 'Настройки PluriWave, экспортированные $date';
}
@override
String backupExportError(Object error) {
return 'Ошибка при экспорте: $error';
}
@override
String get backupImportConfirmMessage =>
'Это добавит избранное, станции и пресеты из файла. Продолжить?';
@override
String get backupImportSuccess => 'Настройки успешно импортированы';
@override
String backupImportError(Object error) {
return 'Ошибка при импорте: $error';
}
@override
String get appVersionLoading => 'Загрузка версии...';
@override
String appVersionSubtitle(Object version) {
return '$version — мировое радио';
}
@override
String get savedFavoritesTitle => 'Сохранённое избранное';
@override
String get stationFilterTitle => 'Фильтр станций';
@override
String get stationFilterSubtitle =>
'Только станции, подтверждённые как активные';
@override
String get backgroundAudioTitle => 'Фоновое аудио';
@override
String get backgroundAudioSubtitle => 'Продолжается при выключенном экране';
@override
String get dash => '—';
@override
String get cancelAction => 'Отмена';
@override
String get equalizerTitle => 'Эквалайзер';
@override
String get recordingsOpenFolder => 'Открыть папку';
@override
String recordingsOpenFolderError(Object error) {
return 'Не удалось открыть папку: $error';
}
@override
String get recordingsMaxSizeTitle => 'Максимальный размер записи';
@override
String recordingsMaxSizeSubtitle(int size) {
return 'Текущий лимит: $size МБ';
}
@override
String get recordingsMaxSizeDialogTitle => 'Максимальный размер одной записи';
@override
String get recordingsMaxSizeMbLabel => 'Максимум мегабайт';
@override
String recordingsMaxSizeSaved(int size) {
return 'Лимит записи обновлён до $size МБ';
}
@override
String get recordingsLibraryTitle => 'Мои записи';
@override
String recordingsLibraryStorageCaption(int usedMb, int totalMb) {
return 'Использовано $usedMb МБ из $totalMb МБ';
}
@override
String get recordingsLibraryStorageFolderCaption =>
'Music/PluriWave · при достижении лимита удаляются старые записи';
@override
String get recordingsLibraryEmptyTitle => 'Записей пока нет';
@override
String get recordingsLibraryEmptySubtitle =>
'Записи, которые вы сохраните, появятся здесь.';
@override
String get recordingActionRename => 'Переименовать';
@override
String get recordingActionShare => 'Поделиться';
@override
String get recordingActionDelete => 'Удалить';
@override
String get recordingRenameDialogTitle => 'Переименовать запись';
@override
String get recordingRenameLabel => 'Название';
@override
String get recordingRenameEmptyError => 'Введите название';
@override
String get recordingDeleteConfirmTitle => 'Удалить запись?';
@override
String get recordingDeleteConfirmMessage => 'Это действие нельзя отменить.';
@override
String get recordingsLibrarySettingsTooltip => 'Настройки записи';
@override
String get stationOrderTitle => 'Порядок станций';
@override
String get stationOrderByName => 'По названию';
@override
String get stationOrderByQuality => 'По качеству';
@override
String get stationOrderByPopularity => 'По популярности';
@override
String get stationOrderScopeDescription =>
'Применяется к избранному, поиску, ближайшим станциям и быстрым спискам.';
@override
String get favoriteGroupsTitle => 'Списки избранного';
@override
String get favoriteGroupsDescription =>
'Создавайте короткие списки, чтобы упорядочить сохранённые станции.';
@override
String get favoriteGroupsAdd => 'Добавить список';
@override
String get favoriteGroupsEdit => 'Изменить список';
@override
String get favoriteGroupsDelete => 'Удалить список';
@override
String get favoriteGroupsNameLabel => 'Название списка';
@override
String get favoriteGroupsNameTooLong => 'Максимум 28 символов.';
@override
String get favoriteGroupsUnassigned => 'Без списка';
@override
String get favoriteGroupsProtectedHint =>
'Список по умолчанию: нельзя изменить или удалить.';
@override
String get favoriteGroupsCreated => 'Список создан';
@override
String get favoriteGroupsUpdated => 'Список обновлён';
@override
String get favoriteGroupsDeleted =>
'Список удалён; его станции вернулись в «Без списка».';
@override
String get favoriteGroupsAssign => 'Переместить в список';
@override
String favoriteGroupsAssignSubtitle(Object groupName) {
return 'Текущий список: $groupName';
}
@override
String favoriteGroupsAssigned(Object stationName, Object groupName) {
return '$stationName перемещена в $groupName';
}
@override
String get favoritesTitle => 'Избранное';
@override
String get favoritesEmptyTitle => 'Избранного пока нет';
@override
String get favoritesEmptySubtitle =>
'Нажмите на сердце у любой станции, чтобы сохранить её в коллекцию.';
@override
String get favoritesHeaderSubtitle =>
'Организуйте коллекцию по спискам и держите важные радио под рукой.';
@override
String get favoritesCollection => 'Коллекция';
@override
String favoritesSavedCount(int count) {
return '$count сохранено';
}
@override
String get favoritesRemoveTooltip => 'Удалить из избранного';
@override
String favoritesRemovedMessage(Object stationName) {
return '$stationName удалена из избранного';
}
@override
String get favoritesFilterAllLabel => 'Все';
@override
String favoriteGroupsChipLabel(Object groupName, int count) {
return '$groupName · $count';
}
@override
String get favoriteGroupsManage => 'Управление списками';
@override
String get customStationsAddCta => 'Добавить пользовательскую станцию';
@override
String get alarmPostponedCurrentExecution =>
'Будильник отложен для этого запуска.';
@override
String get searchScreenTitle => 'Поиск сигнала';
@override
String get searchScreenSubtitle =>
'Находите радио по названию, стране или языку с быстрыми фильтрами и высокой контрастностью.';
@override
String get searchFiltersLabel => 'Фильтры';
@override
String get searchHint => 'Радио Горизонт, джаз, новости...';
@override
String get searchCountryFilterLabel => 'Страна';
@override
String get searchLanguageFilterLabel => 'Язык';
@override
String get searchMinQualityFilterLabel => 'Минимальное качество';
@override
String get searchLoadingStationsLabel => 'ПОИСК СТАНЦИЙ…';
@override
String get searchEmptyTitle => 'Найдите станцию';
@override
String get searchNoResultsTitle => 'Нет результатов';
@override
String searchNoResultsForQueryTitle(Object query) {
return 'Нет результатов по запросу «$query»';
}
@override
String get searchEmptySubtitle =>
'Используйте верхнюю строку или чипы, чтобы находить сигналы со всего мира.';
@override
String get searchNoResultsSubtitle =>
'Попробуйте убрать фильтры или ввести другое название, чтобы найти активный сигнал.';
@override
String searchResultsCount(num count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count результатов',
few: '$count результата',
one: '$count результат',
);
return '$_temp0';
}
@override
String searchClearFiltersAction(num count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Убрать $count фильтров',
few: 'Убрать $count фильтра',
one: 'Убрать фильтр',
);
return '$_temp0';
}
@override
String get countriesScreenTitle => 'Страны';
@override
String get countriesSearchHint => 'Страна или код...';
@override
String get countriesYourLanguagesTitle => 'Ваши языки';
@override
String get countriesAllTitle => 'Все страны';
@override
String get radioCountriesError => 'Не удалось загрузить страны.';
@override
String get countrySpain => 'Испания';
@override
String get countryUsa => 'США';
@override
String get countryMexico => 'Мексика';
@override
String get countryArgentina => 'Аргентина';
@override
String get countryUk => 'Великобритания';
@override
String get countryFrance => 'Франция';
@override
String get countryGermany => 'Германия';
@override
String get countryItaly => 'Италия';
@override
String get countryBrazil => 'Бразилия';
@override
String get countryJapan => 'Япония';
@override
String get languageNameSpanish => 'испанский';
@override
String get languageNameEnglish => 'английский';
@override
String get languageNameFrench => 'французский';
@override
String get languageNameGerman => 'немецкий';
@override
String get languageNamePortuguese => 'португальский';
@override
String get languageNameItalian => 'итальянский';
@override
String get languageNameJapanese => 'японский';
@override
String get languageNameArabic => 'арабский';
@override
String get languageNameRussian => 'русский';
@override
String get homeScreenSubtitle =>
'Глобальное радио в прямом эфире с чистыми сигналами, умным избранным и визуальным стилем телевикторины.';
@override
String get exploreStations => 'Изучить станции';
@override
String stationsCount(int count) {
return '$count радиостанций';
}
@override
String get qualityHd => 'HD-качество';
@override
String get yourStationsTitle => 'Ваши станции';
@override
String get seeAllAction => 'Смотреть все';
@override
String get openFullPlayerTooltip => 'Открыть полный плеер';
@override
String get nowListeningLabel => 'Сейчас слушаете';
@override
String get nothingPlayingTitle => 'Пока ничего не воспроизводится';
@override
String get nothingPlayingSubtitle =>
'Выберите станцию из раздела «Ваши станции» или найдите её, чтобы начать.';
@override
String get nearYou => 'Рядом с вами';
@override
String nearYouInCountry(Object country) {
return 'Рядом с вами · $country';
}
@override
String get detectAction => 'Определить';
@override
String get liveRadar => 'Радар в эфире';
@override
String get genresTitle => 'Жанры';
@override
String get exploreByTitle => 'Обзор по';
@override
String get exploreTrendingTitle => 'В тренде';
@override
String get exploreTrendingSubtitle => 'Сегодня';
@override
String get exploreNewTitle => 'Новинки';
@override
String get exploreNewSubtitle => 'На этой неделе';
@override
String get popularNowTitle => 'Популярно сейчас';
@override
String get offlineBannerTitle => 'Нет подключения';
@override
String get retryAction => 'Повторить';
@override
String get noStationsAvailable => 'Нет доступных станций';
@override
String get noStationsAvailableSubtitle =>
'Попробуйте обновить или выбрать другой жанр, чтобы снова поймать сигнал.';
@override
String get genrePop => 'Поп';
@override
String get genreRock => 'Рок';
@override
String get genreJazz => 'Джаз';
@override
String get genreClassical => 'Классика';
@override
String get genreElectronic => 'Электронная';
@override
String get genreNews => 'Новости';
@override
String get genreTalk => 'Разговорные';
@override
String get genreHipHop => 'Хип-хоп';
@override
String get genreCountry => 'Кантри';
@override
String get genreMetal => 'Метал';
@override
String get genreReggae => 'Регги';
@override
String get genreLatin => 'Латинская';
@override
String get alarmScreenTitle => 'Музыкальное пробуждение';
@override
String get alarmScreenSubtitle =>
'Будильники с радио, безопасным звуком, умными отпусками и всегда видимым следующим запуском.';
@override
String get createAlarmAction => 'Создать будильник';
@override
String alarmsCount(int count) {
return '$count будильников';
}
@override
String get activeAlarmsWithoutNextTitle =>
'Активные будильники без следующего запуска';
@override
String get noActiveAlarms => 'Нет активных будильников';
@override
String get nextAlarmTitle => 'Следующий будильник';
@override
String activeAlarmsWithoutNextSubtitle(int count) {
return 'Есть $count активных будильников, но сейчас у них нет допустимой будущей даты. Проверьте дату, дни и отпуска.';
}
@override
String get createAlarmHint =>
'Создайте будильник, и PluriWave автоматически рассчитает следующий запуск.';
@override
String get alarmVacationPlay => 'Звонит в отпуске';
@override
String get alarmVacationPause => 'Пауза в отпуске';
@override
String alarmFadeInLabel(int seconds) {
return 'Плавное усиление $secondsс';
}
@override
String alarmNextExecution(Object date) {
return 'Следующий запуск: $date';
}
@override
String get alarmNoNextExecution => 'Нет активного следующего запуска.';
@override
String alarmSkippedExecution(Object date) {
return 'Один запуск был пропущен: $date.';
}
@override
String get editAction => 'Изменить';
@override
String get skipNextAction => 'Пропустить следующий';
@override
String get deleteTooltip => 'Удалить';
@override
String get alarmHeroSkipAction => 'Пропустить';
@override
String get alarmDeleteConfirmTitle => 'Удалить будильник?';
@override
String get alarmDeleteConfirmMessage => 'Это действие нельзя отменить.';
@override
String get alarmSkippedNoNextSnackbar =>
'Будильник пропущен. Следующего запуска нет.';
@override
String alarmSkippedReturnsSnackbar(Object date) {
return 'Будильник пропущен. Вернётся $date.';
}
@override
String alarmVacationPausedNoNext(Object vacationName) {
return 'Приостановлен из-за отпуска ($vacationName) и без следующего запуска.';
}
@override
String alarmVacationPausedReturns(Object vacationName, Object date) {
return 'Приостановлен из-за отпуска ($vacationName) и вернётся $date.';
}
@override
String alarmVacationReturns(Object date) {
return 'С активным отпуском снова прозвучит $date.';
}
@override
String get defaultAlarmName => 'Музыкальный будильник';
@override
String get newAlarmTitle => 'Новый будильник';
@override
String get editAlarmTitle => 'Изменить будильник';
@override
String get nameField => 'Название';
@override
String get timeField => 'Время';
@override
String get dateField => 'Дата';
@override
String get onceOption => 'Один раз';
@override
String get dailyOption => 'Ежедневно';
@override
String get weekdaysOption => 'Дни';
@override
String get soundAndVolumeSection => 'Звук и громкость';
@override
String get alarmFadeInTitle => 'Плавное усиление будильника';
@override
String get alarmFadeInOff => '0 с (без перехода)';
@override
String alarmFadeInSummary(int seconds) {
return '$seconds с (с 5% до выбранной громкости)';
}
@override
String get internalSafeSoundLabel => 'Безопасный внутренний звук';
@override
String get soundWarmSunrise => 'Тёплый рассвет';
@override
String get soundSoftBell => 'Мягкий колокольчик';
@override
String get soundDigitalPulse => 'Цифровой импульс';
@override
String get favoriteStationLabel => 'Избранная станция';
@override
String get noStationUseInternalSound =>
'Без станции: использовать внутренний звук';
@override
String get alarmFallbackStationLabel => 'Резервная станция';
@override
String get alarmStationPickerSearchHint => 'Поиск станции по названию';
@override
String get alarmSnoozeDurationTitle => 'Интервал повтора';
@override
String get snoozeAction => 'Отложить';
@override
String alarmSnoozeOptionLabel(int minutes) {
return '$minutes мин';
}
@override
String get alarmSnoozeUsualLabel => 'обычно';
@override
String get saveFavoritesAlarmHint =>
'Сохраните станции в избранное, чтобы использовать их как музыкальный будильник.';
@override
String get useCurrentStationAction => 'Использовать текущую станцию';
@override
String get playDuringVacations => 'Звонить во время отпусков';
@override
String get playDuringVacationsHint =>
'Если выключить, следующий запуск перейдёт на первый допустимый день.';
@override
String get saveAlarmAction => 'Сохранить будильник';
@override
String get chooseOneWeekdayError => 'Выберите хотя бы один день недели.';
@override
String get androidReliabilityReview => 'Проверить надёжность Android';
@override
String get statusOk => 'ОК';
@override
String get statusPending => 'ожидает';
@override
String androidReliabilityStatus(
Object exact,
Object notifications,
Object screen,
) {
return 'Надёжность: точные $exact · уведомления $notifications · экран $screen';
}
@override
String get vacationRangesTitle => 'Периоды отпусков';
@override
String get addAction => 'Добавить';
@override
String get vacationRangesHint =>
'Если у будильника включена «Пауза в отпуске», эти периоды будут автоматически пропущены.';
@override
String get noVacationRangesLoaded => 'Периоды не загружены.';
@override
String get deleteRangeTooltip => 'Удалить период';
@override
String vacationRangesCount(int count) {
return '$count периодов';
}
@override
String vacationSummaryActiveCountdown(int days) {
return 'Идёт сейчас · осталось $days дн.';
}
@override
String vacationSummaryUpcomingCountdown(int days) {
return 'Следующий период через $days дн.';
}
@override
String vacationImpactPausedLabel(Object times) {
return 'Пауза: $times';
}
@override
String vacationImpactContinuesLabel(Object times) {
return 'Продолжает звонить: $times';
}
@override
String get vacationUpcomingSectionTitle => 'ЗАПЛАНИРОВАНО';
@override
String get vacationPastSectionTitle => 'Прошедшие периоды';
@override
String get addVacationRangeCta => 'Добавить период';
@override
String get vacationExplainerBanner =>
'В эти периоды будильники с пометкой «пауза на время отпуска» не звонят. Будильники с пометкой «звонить всегда» это не затрагивает.';
@override
String get vacationNoActiveRangeHint =>
'Сейчас нет активного периода отпуска.';
@override
String get vacationsDefaultName => 'Отпуск';
@override
String get newVacationRangeTitle => 'Новый период отпуска';
@override
String get editVacationRangeTitle => 'Изменить период отпуска';
@override
String get vacationDeleteConfirmTitle => 'Удалить период отпуска?';
@override
String get vacationDeleteConfirmMessage => 'Это действие нельзя отменить.';
@override
String get startField => 'Начало';
@override
String get endField => 'Конец';
@override
String get saveRangeAction => 'Сохранить период';
@override
String get noAlarmsYetTitle => 'Будильников пока нет.';
@override
String get noAlarmsYetSubtitle =>
'Создайте один, чтобы настроить своё музыкальное пробуждение.';
@override
String get ringingInternalAudioActive =>
'Звонит с безопасным внутренним звуком.';
@override
String get ringingPreparingInternalAudio =>
'Подготовка безопасного внутреннего звука.';
@override
String get stopAlarmAction => 'Остановить будильник';
@override
String get alarmStopFailedMessage =>
'Не удалось подтвердить, что будильник остановлен. Попробуйте снова.';
@override
String get alarmForceStopAction => 'Принудительно остановить';
@override
String get alarmMissedNotificationTitle => 'Пропущенный будильник';
@override
String alarmMissedNotificationText(Object name) {
return '$name был автоматически отключён через 10 минут.';
}
@override
String get pauseAction => 'Пауза';
@override
String miniPlayerOpenLabel(Object stationName) {
return 'Открыть плеер для $stationName';
}
@override
String get playerIconLabel => 'Плеер';
@override
String get playbackStatusConnecting => 'Подключение...';
@override
String get playbackStatusLive => 'В эфире';
@override
String get playbackStatusPaused => 'Приостановлено';
@override
String get playbackStatusReconnecting => 'Переподключение...';
@override
String get playbackStatusConnectionError => 'Ошибка подключения';
@override
String get playbackStatusStopped => 'Остановлено';
@override
String stationSemanticLabel(Object stationName) {
return 'Станция $stationName';
}
@override
String get favoritesAddTooltip => 'Добавить в избранное';
@override
String favoritesAddedMessage(Object stationName) {
return '$stationName добавлена в избранное';
}
@override
String get stationIconLabel => 'Значок станции';
@override
String get liveNow => 'В эфире';
@override
String equalizerBandLabel(Object band) {
return 'Полоса $band';
}
@override
String equalizerBandValue(Object value) {
return '$value дБ';
}
@override
String get equalizerPresetFlat => 'Плоский';
@override
String get equalizerPresetRock => 'Рок';
@override
String get equalizerPresetPop => 'Поп';
@override
String get equalizerPresetBassBoost => 'Усиление басов';
@override
String get equalizerPresetJazz => 'Джаз';
@override
String get equalizerPresetVoice => 'Голос';
@override
String get equalizerPresetCustom => 'Пользовательский';
@override
String get onboardingTitle => 'Добро пожаловать в PluriWave';
@override
String get onboardingNewsTitle => 'Что нового';
@override
String get onboardingStartAction => 'Начать';
@override
String get onboardingCloseTooltip => 'Закрыть';
@override
String radioRecordingError(Object error) {
return 'Ошибка записи радио: $error';
}
@override
String get radioApiConnectionError => 'Нет подключения к API радио';
@override
String get radioSearchError => 'Ошибка поиска. Проверьте подключение.';
@override
String get radioLoadMoreStationsError =>
'Не удалось загрузить больше станций.';
@override
String get radioNearbyStationsError =>
'Не удалось обнаружить ближайшие станции. Используйте фильтры по стране.';
@override
String radioCannotPlayStation(Object stationName) {
return 'Невозможно воспроизвести \"$stationName\"';
}
@override
String get recordingSelectStationFirst =>
'Сначала выберите станцию для записи.';
@override
String recordingStartError(Object error) {
return 'Не удалось начать запись: $error';
}
@override
String get unsupportedConfigVersion => 'Неподдерживаемая версия конфигурации';
@override
String get audioErrorGeneric => 'Ошибка воспроизведения';
@override
String get audioErrorNoInternet => 'Нет подключения к интернету';
@override
String get audioErrorInvalidUrl => 'URL радио недействителен';
@override
String get audioErrorNotFound => 'Радио недоступно (ошибка 404)';
@override
String get audioErrorTimeout => 'Время ожидания подключения истекло';
@override
String get audioErrorCannotConnect => 'Не удалось подключиться к радио';
@override
String get audioErrorUnsupportedFormat => 'Неподдерживаемый формат потока';
@override
String get audioErrorDecode => 'Ошибка декодирования аудиопотока';
@override
String get audioErrorCleartext =>
'Это радио использует незашифрованный HTTP, что не разрешено';
@override
String get audioErrorSsl => 'Недействительный SSL-сертификат у радио';
@override
String get audioErrorCannotPlay => 'Это радио невозможно воспроизвести';
@override
String get audioErrorUnexpectedPlayback =>
'Неожиданная ошибка воспроизведения';
@override
String get androidExactAlarmScheduleError =>
'Android не смог запланировать точный будильник. Проверьте разрешение для точных будильников.';
@override
String get recordingPathEmptyError => 'Путь записи не может быть пустым';
@override
String get recordingMaxSizeInvalidError =>
'Максимальный размер должен быть больше нуля';
@override
String get recordingAlreadyActiveError => 'Запись уже выполняется';
@override
String get alarmRingingFallbackActive =>
'Воспроизведение с внутренним безопасным аудио.';
@override
String get alarmRingingPreparingFallback =>
'Подготавливается внутреннее безопасное аудио.';
@override
String get alarmRingingTryingStation =>
'Пытаемся воспроизвести вашу станцию в максимально доступном качестве.';
@override
String get alarmScheduleDaily => 'Каждое утро';
@override
String alarmScheduleOnce(Object date) {
return 'Один раз · $date';
}
@override
String alarmScheduleWeekdays(Object days) {
return 'Дни: $days';
}
@override
String get alarmRepeatSectionLabel => 'ПОВТОР';
@override
String get alarmVolumeLabel => 'Громкость';
@override
String get androidReliabilityTitle => 'Проверить надёжность Android';
@override
String get closeAction => 'Закрыть';
@override
String get customOption => 'Своя';
@override
String get endLabel => 'Конец';
@override
String get equalizerDisable => 'Отключить эквалайзер';
@override
String get helpTitle => 'Помощь и руководство';
@override
String get helpSubtitle => '9 экранов · смотрите снова в любое время';
@override
String get tutorialSkipAction => 'Пропустить';
@override
String get tutorialNextAction => 'Далее';
@override
String get tutorialPage1Headline => 'Сохраняйте станции и группируйте их';
@override
String get tutorialPage1Body =>
'Нажмите на сердечко, чтобы сохранить станцию. В разделе «Ваши станции» можно создавать группы, например «Каждое утро» или «Машина», и менять порядок перетаскиванием.';
@override
String get tutorialPage2Headline =>
'Общий эквалайзер и отдельный для каждой станции';
@override
String get tutorialPage2Body =>
'В настройках вы задаёте общий эквалайзер. А во время воспроизведения конкретной станции можно задать для неё собственную настройку — она будет иметь приоритет над общей.';
@override
String get tutorialPage3Headline => 'Записывайте то, что слушаете';
@override
String get tutorialPage3Body =>
'На панели инструментов плеера кнопка «Запись» сохраняет исходный поток. Ваши записи хранятся в разделе Настройки › Записи.';
@override
String get tutorialPage4Headline =>
'Будильники, которые подстраиваются под вас';
@override
String get tutorialPage4Body =>
'Просыпайтесь под любимую станцию, откладывайте на 3, 5 или 10 минут и добавляйте периоды отпуска, чтобы некоторые будильники пропускались сами.';
@override
String get tutorialPage5Headline =>
'Ваши избранные станции — и в машине тоже';
@override
String get tutorialPage5Body =>
'Подключите телефон через Android Auto, и вы найдёте Избранное, Все станции, Ваши станции и вашу локальную музыку с крупными кнопками, удобными за рулём.';
@override
String get tutorialPage6Headline => 'Переподключается сам';
@override
String get tutorialPage6Body =>
'Если сигнал пропадает, PluriWave автоматически повторяет попытку и продолжает показывать сохранённые избранные станции даже без подключения.';
@override
String get tutorialPage7Headline => 'Выбирайте, на сколько отложить';
@override
String get tutorialPage7Body =>
'Когда звонит будильник, нет единственного варианта «отложить»: выбирайте 3, 5 или 10 минут — в зависимости от того, что нужно именно сейчас.';
@override
String get tutorialPage8Headline => 'Не нашли станцию? Добавьте её сами';
@override
String get tutorialPage8Body =>
'В разделе «Ваши станции» → Добавить свою станцию вставьте URL потока станции, которой нет в поиске. Она сохранится в «Ваши станции» и будет доступна и в машине.';
@override
String get tutorialPage9Headline => 'Готово, теперь вы знаете самое важное';
@override
String get tutorialPage9BannerBody =>
'Чтобы посмотреть этот урок ещё раз: Настройки → Информация → Помощь и руководство.';
@override
String get indefiniteOption => 'Без ограничения';
@override
String get invalidNumber => 'Недопустимое число';
@override
String get nameLabel => 'Название';
@override
String get notPlaying => 'Не воспроизводится';
@override
String get oneTimeOption => 'Один раз';
@override
String get pausePlaybackTooltip => 'Пауза';
@override
String get playerQualityChangeAction => 'Изменить';
@override
String get playerToolEqLabel => 'Свой EQ';
@override
String qualityOriginal(Object quality) {
return 'Исходное качество: $quality';
}
@override
String get qualityUnknown => 'Качество не указано';
@override
String get recordAction => 'Записать';
@override
String get recordDurationTitle => 'Длительность записи';
@override
String get recordRadioSubtitle => 'Выберите длительность записи.';
@override
String get recordRadioTitle => 'Записать радио';
@override
String get recordingActiveTitle => 'Запись радио';
@override
String get recordingDirectTitle => 'Прямая запись';
@override
String get recordingsOpenFolderPlainError =>
'Не удалось открыть папку записей';
@override
String get recordingsOpenLatest => 'Открыть последнюю запись';
@override
String get recordingsOpenLatestError => 'Не удалось открыть последнюю запись';
@override
String get startLabel => 'Начало';
@override
String get startPlaybackTooltip => 'Начать воспроизведение';
@override
String get stopAction => 'Остановить';
@override
String get stopPlaybackTooltip => 'Остановить воспроизведение';
@override
String get weekdayShortMonday => 'Пн';
@override
String get weekdayShortTuesday => 'Вт';
@override
String get weekdayShortWednesday => 'Ср';
@override
String get weekdayShortThursday => 'Чт';
@override
String get weekdayShortFriday => 'Пт';
@override
String get weekdayShortSaturday => 'Сб';
@override
String get weekdayShortSunday => 'Вс';
@override
String stationCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count станций',
few: '$count станции',
one: '$count станция',
);
return '$_temp0';
}
@override
String get alarmIconLabel => 'Музыкальный будильник';
@override
String get vacationIconLabel => 'Режим отпуска';
@override
String get alarmAdvancedSectionTitle => 'Дополнительно';
@override
String get alarmInlineHourLabel => 'Час';
@override
String get alarmInlineMinuteLabel => 'Минута';
@override
String get alarmVolumeRisingStatus => 'Громкость нарастает';
@override
String get streamUrlHint => 'https://stream.example.com:8000/radio';
@override
String get advancedEqSectionTitle => 'Расширенные настройки EQ';
@override
String get advancedEqEnableToggle => 'Включить EQ для каждого устройства';
@override
String get advancedEqEnableToggleSubtitle =>
'Автоматически применять другой пресет EQ при смене аудиовыхода.';
@override
String get advancedEqKnownDevicesTitle => 'Известные аудиоустройства';
@override
String get advancedEqKnownDevicesEmpty =>
'Аудиоустройства пока не зарегистрированы. Подключите устройство, чтобы начать.';
@override
String advancedEqDevicePresetLabel(Object presetName) {
return 'Пресет: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Начнётся через $minutes мин';
}
@override
String snoozeCountdown(int minutes) {
return 'Прозвонит через $minutes мин';
}
@override
String get snoozeAgainAction => 'Отложить снова';
@override
String get alarmRingingNotificationTitle => 'Будильник PluriWave';
@override
String get alarmFireChannelName => 'Звонящие будильники';
@override
String get alarmFireChannelDescription =>
'Срочный звук и экран, когда должен сработать музыкальный будильник';
@override
String get alarmPreNoticeChannelName => 'Напоминания о будильнике';
@override
String get alarmPreNoticeChannelDescription =>
'Беззвучные уведомления перед будильником';
@override
String get openFolderChooserTitle => 'Открыть папку';
@override
String get openRecordingChooserTitle => 'Открыть запись';
@override
String get eqDeviceEditTitle => 'Изменить устройство';
@override
String get eqDeviceNameLabel => 'Название устройства';
@override
String get eqDeviceNameHint => 'Напр.: Колонка в гостиной';
@override
String get eqDeviceNameConfirm => 'Сохранить';
@override
String get eqDeviceConnected => 'Подключено';
@override
String get eqDeviceActiveOutput => 'Звук выводится через это устройство';
@override
String get eqDeviceRemove => 'Удалить устройство';
@override
String eqDeviceRemoved(Object device) {
return '$device удалено';
}
@override
String get localMusicSectionTitle => 'Локальная музыка (Android Auto)';
@override
String get localMusicSectionDescription =>
'Выберите папку на этом устройстве, чтобы просматривать и воспроизводить её аудиофайлы в автомобиле.';
@override
String get localMusicFolderNotConfigured => 'Папка не выбрана';
@override
String get localMusicFolderTitle => 'Папка локальной музыки';
@override
String get localMusicChoosePath => 'Выбрать папку';
@override
String get localMusicChangePath => 'Изменить папку';
@override
String get localMusicFolderUpdated => 'Папка локальной музыки обновлена';
@override
String localMusicFolderSaveError(Object error) {
return 'Не удалось сохранить папку: $error';
}
@override
String get localMusicFolderGenericName => 'Выбранная папка';
@override
String get welcomeHeadline => 'Ваш мир, в прямом эфире';
@override
String get welcomeBody =>
'53 412 станций из 238 стран. Сохраняйте любимые, берите их с собой в машину и просыпайтесь под них.';
@override
String get welcomeBullet1Title => 'Эквалайзер для каждой станции';
@override
String get welcomeBullet1Subtitle =>
'А также пресет для каждого устройства вывода';
@override
String get welcomeBullet2Title => 'Android Auto';
@override
String get welcomeBullet2Subtitle =>
'Ваши избранные и локальная музыка в машине';
@override
String get welcomeBullet3Title => 'Музыкальные будильники';
@override
String get welcomeBullet3Subtitle =>
'С плавным нарастанием громкости и режимом отпуска';
@override
String get welcomeCtaLabel => 'Начать слушать';
@override
String get eqCustomActionEnableLabel => 'Включить эквалайзер';
@override
String get eqCustomActionDisableLabel => 'Выключить эквалайзер';
@override
String eqCustomActionPresetLabel(String preset) {
return 'Пресет: $preset';
}
@override
String get alarmCardVacationPausedBadge => 'Приостановлено на время отпуска';
@override
String get alarmCardSchedulingFailedMessage =>
'Этот будильник не удалось зарегистрировать в системе, поэтому он может не сработать.';
@override
String get alarmCardPreNoticeFailedMessage =>
'Этот будильник запланирован, но не удалось настроить предварительное напоминание.';
@override
String get alarmDiagnosticsExactAlarmsTitle =>
'Точное планирование будильника';
@override
String get alarmDiagnosticsExactAlarmsHint =>
'Будильник звонит ровно в заданную минуту, даже если телефон находится в режиме сна.';
@override
String get alarmDiagnosticsNotificationsTitle => 'Уведомления';
@override
String get alarmDiagnosticsNotificationsHint =>
'Нужны, чтобы показать будильник и заблаговременное напоминание.';
@override
String get alarmDiagnosticsFullScreenTitle =>
'Полноэкранный показ будильника';
@override
String get alarmDiagnosticsFullScreenHint =>
'Экран будильника появляется автоматически, даже если телефон заблокирован.';
@override
String get alarmDiagnosticsBatteryTitle => 'Оптимизация батареи';
@override
String get alarmDiagnosticsBatteryHint =>
'Не позволяет системе закрывать PluriWave в фоновом режиме, чтобы будильник мог сработать.';
@override
String get alarmDiagnosticsNativeCountTitle =>
'Будильники, зарегистрированные в Android';
@override
String alarmDiagnosticsNativeCountValue(int count) {
return 'Сейчас зарегистрировано: $count';
}
@override
String get alarmDiagnosticsNativeCountAttentionHint =>
'У вас включён будильник, но пока ни один не зарегистрирован в системе. Откройте PluriWave заново или сначала устраните пункты выше.';
@override
String get alarmDiagnosticsManufacturerLabel => 'Производитель';
@override
String get alarmDiagnosticsSdkLabel => 'Версия Android (SDK)';
@override
String get alarmDiagnosticsNeedsAttentionStatus => 'Требует внимания';
@override
String get alarmDiagnosticsAutostartTitle =>
'Ещё один ручной шаг на этом телефоне';
@override
String alarmDiagnosticsAutostartBody(String manufacturer) {
return 'Телефоны $manufacturer часто закрывают приложения в фоновом режиме для экономии батареи. PluriWave не может включить это самостоятельно — вам нужно вручную включить автозапуск (иногда называется \"Autostart\" или \"Фоновая активность\") для PluriWave. Ищите в Настройках, в разделе Приложения или Батарея, либо в приложении безопасности телефона.';
}
@override
String get alarmDiagnosticsFixAction => 'Исправить';
@override
String get alarmDiagnosticsIntentUnavailable =>
'Не удалось открыть этот экран настроек на этом телефоне. Попробуйте найти его вручную в Настройках.';
@override
String get alarmDiagnosticsUnavailableHint =>
'Мы пока не смогли проверить настройки вашего будильника.';
@override
String get autoEqDisableOption => 'Отключить';
@override
String get funcionPremium => 'Премиум-функция';
@override
String get limiteAlarmasAlcanzado =>
'Вы достигли бесплатного лимита в 5 будильников.';
@override
String get desbloquearPremium => 'Разблокировать Премиум';
@override
String get restaurarCompras => 'Восстановить покупки';
}