mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-12 11:52:07 +10:00
e1a4900dc0
This adds a simple UI in repeater management settings for remotely setting a repeater's private key. A key can be pasted from an external key generator, or a random one can be generated here, optionally with a specified prefix. If a prefix is specified, searching is done in 30ms batches in order to keep the UI responsive and show the progress indicator animation smoothly. Searches can be interrupted. An estimation of search length is given as expected number of generated key pairs. (A future improvement would be to observe keys per second performance and give time estimates based on that.) When it generates a new private key on your behalf, it can tell you what the corresponding public key will be. Unfortunately, if you paste one in from another source, it can't compute the corresponding public key. This is because the standard Dart crypto library doesn't provide that capability, nor does it give access to the elliptic curve functions it implements so we could do it ourselves. Our only recourse would be to copy the source for all those things, and I didn't think it was worth it. This will not check the validity of a pasted key, but the remote repeater will. It does limit it to the correct length and hexadecimal charset. Prefixes are limited to 4 characters. There's no technical reason for this, but users are unlikely to want more, and I think it would just be a bad experience to allow more and spin for a very long time. If someone really wants a longer one, they can use an external generator like they do now. Possible TODO: rewrite background processing using isolates. Closes #142.
4736 lines
154 KiB
Dart
4736 lines
154 KiB
Dart
// 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 => 'MeshCore Open';
|
||
|
||
@override
|
||
String get nav_contacts => 'Контакты';
|
||
|
||
@override
|
||
String get nav_channels => 'Каналы';
|
||
|
||
@override
|
||
String get nav_map => 'Карта';
|
||
|
||
@override
|
||
String get common_cancel => 'Отмена';
|
||
|
||
@override
|
||
String get common_ok => 'OK';
|
||
|
||
@override
|
||
String get common_connect => 'Коннект';
|
||
|
||
@override
|
||
String get common_unknownDevice => 'Неизвестное устройство';
|
||
|
||
@override
|
||
String get common_save => 'Сохранить';
|
||
|
||
@override
|
||
String get common_delete => 'Удалить';
|
||
|
||
@override
|
||
String get common_deleteAll => 'Удалить все';
|
||
|
||
@override
|
||
String get common_close => 'Закрыть';
|
||
|
||
@override
|
||
String get common_done => 'Готово';
|
||
|
||
@override
|
||
String get common_edit => 'Изменить';
|
||
|
||
@override
|
||
String get common_add => 'Добавить';
|
||
|
||
@override
|
||
String get common_settings => 'Настройки';
|
||
|
||
@override
|
||
String get common_disconnect => 'Отключить';
|
||
|
||
@override
|
||
String get common_connected => 'Подключено';
|
||
|
||
@override
|
||
String get common_disconnected => 'Отключено';
|
||
|
||
@override
|
||
String get common_create => 'Создать';
|
||
|
||
@override
|
||
String get common_continue => 'Продолжить';
|
||
|
||
@override
|
||
String get common_share => 'Поделиться';
|
||
|
||
@override
|
||
String get common_copy => 'Копировать';
|
||
|
||
@override
|
||
String get common_retry => 'Повторить';
|
||
|
||
@override
|
||
String get common_hide => 'Скрыть';
|
||
|
||
@override
|
||
String get common_remove => 'Убрать';
|
||
|
||
@override
|
||
String get common_enable => 'Включить';
|
||
|
||
@override
|
||
String get common_disable => 'Выключить';
|
||
|
||
@override
|
||
String get common_undo => 'Отменить';
|
||
|
||
@override
|
||
String get messageStatus_sent => 'Отправлено';
|
||
|
||
@override
|
||
String get messageStatus_delivered => 'Доставлено';
|
||
|
||
@override
|
||
String get messageStatus_pending => 'Отправка';
|
||
|
||
@override
|
||
String get messageStatus_failed => 'Не удалось отправить';
|
||
|
||
@override
|
||
String get messageStatus_repeated => 'Услышал несколько раз';
|
||
|
||
@override
|
||
String get common_reboot => 'Перезагрузить';
|
||
|
||
@override
|
||
String get common_loading => 'Загрузка...';
|
||
|
||
@override
|
||
String get common_notAvailable => '—';
|
||
|
||
@override
|
||
String common_voltageValue(String volts) {
|
||
return '$volts В';
|
||
}
|
||
|
||
@override
|
||
String common_percentValue(int percent) {
|
||
return '$percent%';
|
||
}
|
||
|
||
@override
|
||
String get common_autoRefresh => 'Автообновление';
|
||
|
||
@override
|
||
String get common_interval => 'Интервал';
|
||
|
||
@override
|
||
String get scanner_title => 'MeshCore Open';
|
||
|
||
@override
|
||
String get connectionChoiceUsbLabel => 'USB';
|
||
|
||
@override
|
||
String get connectionChoiceBluetoothLabel => 'Bluetooth';
|
||
|
||
@override
|
||
String get connectionChoiceTcpLabel => 'TCP';
|
||
|
||
@override
|
||
String get tcpScreenTitle => 'Установить соединение по протоколу TCP';
|
||
|
||
@override
|
||
String get tcpHostLabel => 'IP-адрес';
|
||
|
||
@override
|
||
String get tcpHostHint => '192.168.40.10';
|
||
|
||
@override
|
||
String get tcpPortLabel => 'Порт';
|
||
|
||
@override
|
||
String get tcpPortHint => '5000';
|
||
|
||
@override
|
||
String get tcpStatus_notConnected => 'Введите адрес и подключитесь.';
|
||
|
||
@override
|
||
String tcpStatus_connectingTo(String endpoint) {
|
||
return 'Подключение к $endpoint...';
|
||
}
|
||
|
||
@override
|
||
String get tcpErrorHostRequired => 'Необходимо указать IP-адрес.';
|
||
|
||
@override
|
||
String get tcpErrorPortInvalid =>
|
||
'Порт должен находиться в диапазоне от 1 до 65535.';
|
||
|
||
@override
|
||
String get tcpErrorUnsupported =>
|
||
'Протокол TCP не поддерживается на этой платформе.';
|
||
|
||
@override
|
||
String get tcpErrorTimedOut => 'Соединение TCP не удалось установить.';
|
||
|
||
@override
|
||
String tcpConnectionFailed(String error) {
|
||
return 'Не удалось установить соединение TCP: $error';
|
||
}
|
||
|
||
@override
|
||
String get usbScreenTitle => 'Подключение через USB';
|
||
|
||
@override
|
||
String get usbScreenSubtitle =>
|
||
'Выберите обнаруженное устройство с последовательным интерфейсом и подключите его напрямую к вашему узлу MeshCore.';
|
||
|
||
@override
|
||
String get usbScreenStatus => 'Выберите USB-устройство';
|
||
|
||
@override
|
||
String get usbScreenNote =>
|
||
'USB-серийный порт активен на поддерживаемых устройствах Android и на настольных платформах.';
|
||
|
||
@override
|
||
String get usbScreenEmptyState =>
|
||
'Не обнаружено устройств USB. Подключите одно из них и обновите список.';
|
||
|
||
@override
|
||
String get usbErrorPermissionDenied =>
|
||
'Запрос на доступ через USB был отклонен.';
|
||
|
||
@override
|
||
String get usbErrorDeviceMissing =>
|
||
'Выбранное USB-устройство больше недоступно.';
|
||
|
||
@override
|
||
String get usbErrorInvalidPort => 'Выберите действительное USB-устройство.';
|
||
|
||
@override
|
||
String get usbErrorBusy =>
|
||
'Еще одно запрошенное соединение через USB уже находится в процессе.';
|
||
|
||
@override
|
||
String get usbErrorNotConnected => 'Ни одно USB-устройство не подключено.';
|
||
|
||
@override
|
||
String get usbErrorOpenFailed =>
|
||
'Не удалось открыть выбранное USB-устройство.';
|
||
|
||
@override
|
||
String get usbErrorConnectFailed =>
|
||
'Не удалось установить соединение с выбранным USB-устройством.';
|
||
|
||
@override
|
||
String get usbErrorUnsupported =>
|
||
'Поддержка последовательного USB отсутствует на данной платформе.';
|
||
|
||
@override
|
||
String get usbErrorAlreadyActive => 'USB-соединение уже установлено.';
|
||
|
||
@override
|
||
String get usbErrorNoDeviceSelected =>
|
||
'Не было выбрано ни одно устройство USB.';
|
||
|
||
@override
|
||
String get usbErrorPortClosed => 'USB-соединение не установлено.';
|
||
|
||
@override
|
||
String get usbErrorConnectTimedOut =>
|
||
'Соединение не установлено. Убедитесь, что устройство имеет установленное программное обеспечение USB Companion.';
|
||
|
||
@override
|
||
String get usbFallbackDeviceName =>
|
||
'Устройство для последовательного подключения к сети';
|
||
|
||
@override
|
||
String get usbStatus_notConnected => 'Выберите USB-устройство';
|
||
|
||
@override
|
||
String get usbStatus_connecting => 'Подключение к USB-устройству...';
|
||
|
||
@override
|
||
String get usbStatus_searching => 'Поиск USB-устройств...';
|
||
|
||
@override
|
||
String usbConnectionFailed(String error) {
|
||
return 'Не удалось установить соединение через USB: $error';
|
||
}
|
||
|
||
@override
|
||
String get scanner_scanning => 'Поиск устройств...';
|
||
|
||
@override
|
||
String get scanner_connecting => 'Подключение...';
|
||
|
||
@override
|
||
String get scanner_disconnecting => 'Отключение...';
|
||
|
||
@override
|
||
String get scanner_notConnected => 'Не подключено';
|
||
|
||
@override
|
||
String scanner_connectedTo(String deviceName) {
|
||
return 'Подключено к $deviceName';
|
||
}
|
||
|
||
@override
|
||
String get scanner_searchingDevices => 'Поиск устройств MeshCore...';
|
||
|
||
@override
|
||
String get scanner_tapToScan => 'Нажмите для поиска MeshCore устройств';
|
||
|
||
@override
|
||
String scanner_connectionFailed(String error) {
|
||
return 'Подключение не удалось: $error';
|
||
}
|
||
|
||
@override
|
||
String get scanner_stop => 'Стоп';
|
||
|
||
@override
|
||
String get scanner_scan => 'Сканирование';
|
||
|
||
@override
|
||
String get scanner_bluetoothOff => 'Bluetooth выключен';
|
||
|
||
@override
|
||
String get scanner_bluetoothOffMessage =>
|
||
'Пожалуйста, включите Bluetooth, чтобы найти устройства.';
|
||
|
||
@override
|
||
String get scanner_chromeRequired => 'Требуется браузер Chrome';
|
||
|
||
@override
|
||
String get scanner_chromeRequiredMessage =>
|
||
'Для поддержки Bluetooth в этом веб-приложении требуется Google Chrome или браузер на базе Chromium.';
|
||
|
||
@override
|
||
String get scanner_enableBluetooth => 'Включите Bluetooth';
|
||
|
||
@override
|
||
String get scanner_bluetoothWebUnsupported =>
|
||
'Bluetooth недоступен в браузере. Подключитесь через USB.';
|
||
|
||
@override
|
||
String get device_quickSwitch => 'Быстрое переключение';
|
||
|
||
@override
|
||
String get device_meshcore => 'MeshCore';
|
||
|
||
@override
|
||
String get settings_title => 'Настройки';
|
||
|
||
@override
|
||
String get settings_deviceInfo => 'Информация об устройстве';
|
||
|
||
@override
|
||
String get settings_appSettings => 'Настройки приложения';
|
||
|
||
@override
|
||
String get settings_appSettingsSubtitle =>
|
||
'Уведомления, сообщения и настройки карты';
|
||
|
||
@override
|
||
String get settings_nodeSettings => 'Настройки ноды';
|
||
|
||
@override
|
||
String get settings_nodeName => 'Имя ноды';
|
||
|
||
@override
|
||
String get settings_nodeNameNotSet => 'Не установлено';
|
||
|
||
@override
|
||
String get settings_nodeNameHint => 'Введите имя ноды';
|
||
|
||
@override
|
||
String get settings_nodeNameUpdated => 'Имя обновлено';
|
||
|
||
@override
|
||
String get settings_radioSettings => 'Настройки радио';
|
||
|
||
@override
|
||
String get settings_radioSettingsSubtitle =>
|
||
'Частота, мощность и коэффициент распространения';
|
||
|
||
@override
|
||
String get settings_radioSettingsUpdated => 'Настройки радио обновлены';
|
||
|
||
@override
|
||
String get settings_regionSettings => 'Regions';
|
||
|
||
@override
|
||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||
|
||
@override
|
||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||
|
||
@override
|
||
String get settings_regionNameHint => 'Enter region name';
|
||
|
||
@override
|
||
String get settings_regionAddRegion => 'Add region';
|
||
|
||
@override
|
||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||
|
||
@override
|
||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||
|
||
@override
|
||
String get settings_regionFetchRegionsAlreadyExists =>
|
||
'This region has already been added';
|
||
|
||
@override
|
||
String get settings_regionName => 'Region Name';
|
||
|
||
@override
|
||
String get settings_regionDeleted => 'Region deleted';
|
||
|
||
@override
|
||
String get settings_deleteRegion => 'Delete Region';
|
||
|
||
@override
|
||
String settings_deleteRegionConfirm(String region) {
|
||
return 'Remove \"$region\" from region list?';
|
||
}
|
||
|
||
@override
|
||
String get settings_location => 'Позиция';
|
||
|
||
@override
|
||
String get settings_locationSubtitle => 'Координаты GPS';
|
||
|
||
@override
|
||
String get settings_locationUpdated => 'Позиция и настройки GPS обновлены';
|
||
|
||
@override
|
||
String get settings_locationBothRequired => 'Введите широту и долготу.';
|
||
|
||
@override
|
||
String get settings_locationInvalid => 'Неверная широта или долгота.';
|
||
|
||
@override
|
||
String get settings_locationGPSEnable => 'Включить GPS';
|
||
|
||
@override
|
||
String get settings_locationGPSEnableSubtitle =>
|
||
'Включение GPS для автоматического обновления позиции.';
|
||
|
||
@override
|
||
String get settings_locationIntervalSec =>
|
||
'Интервал для позиционирования GPS (секунды)';
|
||
|
||
@override
|
||
String get settings_locationIntervalInvalid =>
|
||
'Интервал должен составлять не менее 60 секунд и не более 86400 секунд.';
|
||
|
||
@override
|
||
String get settings_latitude => 'Широта';
|
||
|
||
@override
|
||
String get settings_longitude => 'Долгота';
|
||
|
||
@override
|
||
String get settings_contactSettings => 'Настройки контактов';
|
||
|
||
@override
|
||
String get settings_contactSettingsSubtitle =>
|
||
'Настройки добавления контактов';
|
||
|
||
@override
|
||
String get settings_privacyMode => 'Режим конфиденциальности';
|
||
|
||
@override
|
||
String get settings_privacyModeSubtitle =>
|
||
'Скрыть имя/позицию в анонсировании';
|
||
|
||
@override
|
||
String get settings_privacyModeToggle =>
|
||
'Включите режим конфиденциальности, чтобы скрыть свое имя и местоположение в анонсировании.';
|
||
|
||
@override
|
||
String get settings_privacyModeEnabled => 'Режим конфиденциальности включен';
|
||
|
||
@override
|
||
String get settings_privacyModeDisabled =>
|
||
'Режим конфиденциальности выключен';
|
||
|
||
@override
|
||
String get settings_privacy => 'Настройки конфиденциальности';
|
||
|
||
@override
|
||
String get settings_privacySubtitle =>
|
||
'Контролируйте, какую информацию делиться.';
|
||
|
||
@override
|
||
String get settings_privacySettingsDescription =>
|
||
'Выберите, какую информацию ваше устройство будет делиться с другими.';
|
||
|
||
@override
|
||
String get settings_denyAll => 'Отклонить все';
|
||
|
||
@override
|
||
String get settings_allowByContact => 'Разрешить по флагам контактов';
|
||
|
||
@override
|
||
String get settings_allowAll => 'Разрешить все';
|
||
|
||
@override
|
||
String get settings_telemetryBaseMode => 'Базовый режим телеметрии';
|
||
|
||
@override
|
||
String get settings_telemetryLocationMode =>
|
||
'Режим местоположения телеметрии';
|
||
|
||
@override
|
||
String get settings_telemetryEnvironmentMode => 'Режим среды телеметрии';
|
||
|
||
@override
|
||
String get settings_advertLocation => 'Местоположение рекламы';
|
||
|
||
@override
|
||
String get settings_advertLocationSubtitle =>
|
||
'Включить местоположение в объявление';
|
||
|
||
@override
|
||
String get settings_multiAck => 'Несколько подтверждений';
|
||
|
||
@override
|
||
String get settings_telemetryModeUpdated => 'Режим телеметрии обновлен';
|
||
|
||
@override
|
||
String get settings_actions => 'Действия';
|
||
|
||
@override
|
||
String get settings_deleteAllPaths => 'Delete All Paths';
|
||
|
||
@override
|
||
String get settings_deleteAllPathsSubtitle =>
|
||
'Clear all path data from contacts.';
|
||
|
||
@override
|
||
String get settings_sendAdvertisement => 'Отправить анонсирование';
|
||
|
||
@override
|
||
String get settings_sendAdvertisementSubtitle =>
|
||
'Отправить анонсирование о присутствии сейчас';
|
||
|
||
@override
|
||
String get settings_advertisementSent => 'Анонсирование отправлено';
|
||
|
||
@override
|
||
String get settings_syncTime => 'Синхронизация времени';
|
||
|
||
@override
|
||
String get settings_syncTimeSubtitle => 'Синхронизировать время с телефоном';
|
||
|
||
@override
|
||
String get settings_timeSynchronized => 'Время синхронизировано';
|
||
|
||
@override
|
||
String get settings_refreshContacts => 'Обновить контакты';
|
||
|
||
@override
|
||
String get settings_refreshContactsSubtitle =>
|
||
'Перезагрузить список контактов с устройства';
|
||
|
||
@override
|
||
String get settings_rebootDevice => 'Перезагрузить устройство';
|
||
|
||
@override
|
||
String get settings_rebootDeviceSubtitle =>
|
||
'Перезапустить устройство MeshCore';
|
||
|
||
@override
|
||
String get settings_rebootDeviceConfirm =>
|
||
'Вы уверены, что хотите перезагрузить устройство? Вы будете отключены.';
|
||
|
||
@override
|
||
String get settings_debug => 'Отладка';
|
||
|
||
@override
|
||
String get settings_companionDebugLog =>
|
||
'Журнал отладки (для сопутствующего приложения)';
|
||
|
||
@override
|
||
String get settings_companionDebugLogSubtitle =>
|
||
'Команды, ответы и необработанные данные, используемые для протоколов BLE, TCP и USB.';
|
||
|
||
@override
|
||
String get settings_appDebugLog => 'Журнал отладки приложения';
|
||
|
||
@override
|
||
String get settings_appDebugLogSubtitle => 'Сообщения отладки приложения';
|
||
|
||
@override
|
||
String get settings_about => 'О программе';
|
||
|
||
@override
|
||
String settings_aboutVersion(String version) {
|
||
return 'MeshCore Open v$version';
|
||
}
|
||
|
||
@override
|
||
String get settings_aboutLegalese => '2026 MeshCore Open Source Project';
|
||
|
||
@override
|
||
String get settings_aboutDescription =>
|
||
'Открытое клиентское приложение на Flutter для устройств MeshCore с LoRa-сетями.';
|
||
|
||
@override
|
||
String get settings_aboutOpenMeteoAttribution =>
|
||
'Данные о высоте LOS: Open-Meteo (CC BY 4.0)';
|
||
|
||
@override
|
||
String get settings_infoName => 'Имя';
|
||
|
||
@override
|
||
String get settings_infoId => 'ID';
|
||
|
||
@override
|
||
String get settings_infoStatus => 'Статус';
|
||
|
||
@override
|
||
String get settings_infoBattery => 'Батарея';
|
||
|
||
@override
|
||
String get settings_infoPublicKey => 'Публичный ключ';
|
||
|
||
@override
|
||
String get settings_infoContactsCount => 'Количество контактов';
|
||
|
||
@override
|
||
String get settings_infoChannelCount => 'Количество каналов';
|
||
|
||
@override
|
||
String get settings_presets => 'Пресеты';
|
||
|
||
@override
|
||
String get settings_frequency => 'Частота (МГц)';
|
||
|
||
@override
|
||
String get settings_frequencyHelper => '300.0 – 2500.0';
|
||
|
||
@override
|
||
String get settings_frequencyInvalid => 'Недопустимая частота (300–2500 МГц)';
|
||
|
||
@override
|
||
String get settings_bandwidth => 'Полоса пропускания';
|
||
|
||
@override
|
||
String get settings_spreadingFactor => 'Коэффициент расширения';
|
||
|
||
@override
|
||
String get settings_codingRate => 'Коэффициент кодирования';
|
||
|
||
@override
|
||
String get settings_txPower => 'Мощность передачи (дБм)';
|
||
|
||
@override
|
||
String get settings_txPowerHelper => '0 – 22';
|
||
|
||
@override
|
||
String get settings_txPowerInvalid =>
|
||
'Недопустимая мощность передачи (0–22 дБм)';
|
||
|
||
@override
|
||
String get settings_clientRepeat => 'Повторение \"вне сети\"';
|
||
|
||
@override
|
||
String get settings_clientRepeatSubtitle =>
|
||
'Позвольте этому устройству повторять пакеты данных для других устройств.';
|
||
|
||
@override
|
||
String get settings_clientRepeatFreqWarning =>
|
||
'Для работы в режиме \"без подключения к сети\" требуется частота 433, 869 или 918 МГц.';
|
||
|
||
@override
|
||
String settings_error(String message) {
|
||
return 'Ошибка: $message';
|
||
}
|
||
|
||
@override
|
||
String get appSettings_title => 'Настройки приложения';
|
||
|
||
@override
|
||
String get appSettings_appearance => 'Внешний вид';
|
||
|
||
@override
|
||
String get appSettings_theme => 'Тема';
|
||
|
||
@override
|
||
String get appSettings_themeSystem => 'Как в системе';
|
||
|
||
@override
|
||
String get appSettings_themeLight => 'Светлая';
|
||
|
||
@override
|
||
String get appSettings_themeDark => 'Тёмная';
|
||
|
||
@override
|
||
String get appSettings_language => 'Язык';
|
||
|
||
@override
|
||
String get appSettings_languageSystem => 'Как в системе';
|
||
|
||
@override
|
||
String get appSettings_languageEn => 'Английский';
|
||
|
||
@override
|
||
String get appSettings_languageFr => 'Французский';
|
||
|
||
@override
|
||
String get appSettings_languageEs => 'Испанский';
|
||
|
||
@override
|
||
String get appSettings_languageDe => 'Немецкий';
|
||
|
||
@override
|
||
String get appSettings_languagePl => 'Польский';
|
||
|
||
@override
|
||
String get appSettings_languageSl => 'Словенский';
|
||
|
||
@override
|
||
String get appSettings_languagePt => 'Португальский';
|
||
|
||
@override
|
||
String get appSettings_languageIt => 'Итальянский';
|
||
|
||
@override
|
||
String get appSettings_languageZh => 'Китайский';
|
||
|
||
@override
|
||
String get appSettings_languageSv => 'Шведский';
|
||
|
||
@override
|
||
String get appSettings_languageNl => 'Нидерландский';
|
||
|
||
@override
|
||
String get appSettings_languageSk => 'Словацкий';
|
||
|
||
@override
|
||
String get appSettings_languageBg => 'Болгарский';
|
||
|
||
@override
|
||
String get appSettings_languageRu => 'Русский';
|
||
|
||
@override
|
||
String get appSettings_languageUk => 'Українська';
|
||
|
||
@override
|
||
String get appSettings_enableMessageTracing =>
|
||
'Включить трассировку сообщений';
|
||
|
||
@override
|
||
String get appSettings_enableMessageTracingSubtitle =>
|
||
'Показывать подробные метаданные о маршрутизации и времени для сообщений';
|
||
|
||
@override
|
||
String get appSettings_notifications => 'Уведомления';
|
||
|
||
@override
|
||
String get appSettings_enableNotifications => 'Включить уведомления';
|
||
|
||
@override
|
||
String get appSettings_enableNotificationsSubtitle =>
|
||
'Получать уведомления о сообщениях и оповещениях';
|
||
|
||
@override
|
||
String get appSettings_notificationPermissionDenied =>
|
||
'Разрешение на уведомления отклонено';
|
||
|
||
@override
|
||
String get appSettings_notificationsEnabled => 'Уведомления включены';
|
||
|
||
@override
|
||
String get appSettings_notificationsDisabled => 'Уведомления отключены';
|
||
|
||
@override
|
||
String get appSettings_messageNotifications => 'Уведомления о сообщениях';
|
||
|
||
@override
|
||
String get appSettings_messageNotificationsSubtitle =>
|
||
'Показывать уведомление при получении новых сообщений';
|
||
|
||
@override
|
||
String get appSettings_channelMessageNotifications =>
|
||
'Уведомления о сообщениях в каналах';
|
||
|
||
@override
|
||
String get appSettings_channelMessageNotificationsSubtitle =>
|
||
'Показывать уведомление при получении сообщений в каналах';
|
||
|
||
@override
|
||
String get appSettings_advertisementNotifications =>
|
||
'Уведомления об анонсированиях';
|
||
|
||
@override
|
||
String get appSettings_advertisementNotificationsSubtitle =>
|
||
'Показывать уведомление при обнаружении новых нод';
|
||
|
||
@override
|
||
String get appSettings_messaging => 'Обмен сообщениями';
|
||
|
||
@override
|
||
String get appSettings_clearPathOnMaxRetry =>
|
||
'Сбросить маршрут после максимального числа попыток';
|
||
|
||
@override
|
||
String get appSettings_clearPathOnMaxRetrySubtitle =>
|
||
'Сбросить маршрут контакта после 5 неудачных попыток отправки';
|
||
|
||
@override
|
||
String get appSettings_pathsWillBeCleared =>
|
||
'Маршруты будут сброшены после 5 неудачных попыток';
|
||
|
||
@override
|
||
String get appSettings_pathsWillNotBeCleared =>
|
||
'Маршруты не будут автоматически сбрасываться';
|
||
|
||
@override
|
||
String get appSettings_autoRouteRotation =>
|
||
'Автоматическое переключение маршрутов';
|
||
|
||
@override
|
||
String get appSettings_autoRouteRotationSubtitle =>
|
||
'Циклически переключаться между лучшими маршрутами и режимом рассылки';
|
||
|
||
@override
|
||
String get appSettings_autoRouteRotationEnabled =>
|
||
'Автоматическое переключение маршрутов включено';
|
||
|
||
@override
|
||
String get appSettings_autoRouteRotationDisabled =>
|
||
'Автоматическое переключение маршрутов отключено';
|
||
|
||
@override
|
||
String get appSettings_maxRouteWeight =>
|
||
'Максимальный допустимый вес маршрута';
|
||
|
||
@override
|
||
String get appSettings_maxRouteWeightSubtitle =>
|
||
'Максимальный вес, который может быть перевезён по определённому маршруту при успешных доставках.';
|
||
|
||
@override
|
||
String get appSettings_initialRouteWeight => 'Начальный вес маршрута';
|
||
|
||
@override
|
||
String get appSettings_initialRouteWeightSubtitle =>
|
||
'Начальный вес для новых, только что открытых маршрутов';
|
||
|
||
@override
|
||
String get appSettings_routeWeightSuccessIncrement =>
|
||
'Увеличение веса успеха';
|
||
|
||
@override
|
||
String get appSettings_routeWeightSuccessIncrementSubtitle =>
|
||
'Вес, добавленный к маршруту после успешной доставки.';
|
||
|
||
@override
|
||
String get appSettings_routeWeightFailureDecrement =>
|
||
'Уменьшение веса неудачи';
|
||
|
||
@override
|
||
String get appSettings_routeWeightFailureDecrementSubtitle =>
|
||
'Вес, который был удален с пути после неудачной доставки.';
|
||
|
||
@override
|
||
String get appSettings_maxMessageRetries =>
|
||
'Максимальное количество повторных попыток отправки сообщения';
|
||
|
||
@override
|
||
String get appSettings_maxMessageRetriesSubtitle =>
|
||
'Количество попыток повторной отправки сообщения перед тем, как пометить его как неудачное.';
|
||
|
||
@override
|
||
String get appSettings_battery => 'Батарея';
|
||
|
||
@override
|
||
String get appSettings_batteryChemistry => 'Химия батареи';
|
||
|
||
@override
|
||
String appSettings_batteryChemistryPerDevice(String deviceName) {
|
||
return 'Установить для устройства ($deviceName)';
|
||
}
|
||
|
||
@override
|
||
String get appSettings_batteryChemistryConnectFirst =>
|
||
'Подключитесь к устройству, чтобы выбрать';
|
||
|
||
@override
|
||
String get appSettings_batteryNmc => '18650 NMC (3.0–4.2 В)';
|
||
|
||
@override
|
||
String get appSettings_batteryLifepo4 => 'LiFePO4 (2.6–3.65 В)';
|
||
|
||
@override
|
||
String get appSettings_batteryLipo => 'LiPo (3.0–4.2 В)';
|
||
|
||
@override
|
||
String get appSettings_mapDisplay => 'Отображение карты';
|
||
|
||
@override
|
||
String get appSettings_showRepeaters => 'Показывать репитеры';
|
||
|
||
@override
|
||
String get appSettings_showRepeatersSubtitle =>
|
||
'Отображать репитеры на карте';
|
||
|
||
@override
|
||
String get appSettings_showChatNodes => 'Показывать чат-ноды';
|
||
|
||
@override
|
||
String get appSettings_showChatNodesSubtitle =>
|
||
'Отображать чат-ноды на карте';
|
||
|
||
@override
|
||
String get appSettings_showOtherNodes => 'Показывать другие ноды';
|
||
|
||
@override
|
||
String get appSettings_showOtherNodesSubtitle =>
|
||
'Отображать другие типы нод на карте';
|
||
|
||
@override
|
||
String get appSettings_timeFilter => 'Фильтр по времени';
|
||
|
||
@override
|
||
String get appSettings_timeFilterShowAll => 'Показывать все ноды';
|
||
|
||
@override
|
||
String appSettings_timeFilterShowLast(int hours) {
|
||
return 'Показывать ноды за последние $hours ч';
|
||
}
|
||
|
||
@override
|
||
String get appSettings_mapTimeFilter => 'Временной фильтр карты';
|
||
|
||
@override
|
||
String get appSettings_showNodesDiscoveredWithin =>
|
||
'Показывать ноды, обнаруженные за:';
|
||
|
||
@override
|
||
String get appSettings_allTime => 'Всё время';
|
||
|
||
@override
|
||
String get appSettings_lastHour => 'Последний час';
|
||
|
||
@override
|
||
String get appSettings_last6Hours => 'Последние 6 часов';
|
||
|
||
@override
|
||
String get appSettings_last24Hours => 'Последние 24 часа';
|
||
|
||
@override
|
||
String get appSettings_lastWeek => 'Последнюю неделю';
|
||
|
||
@override
|
||
String get appSettings_offlineMapCache => 'Кэш офлайн-карты';
|
||
|
||
@override
|
||
String get appSettings_unitsTitle => 'Единицы';
|
||
|
||
@override
|
||
String get appSettings_unitsMetric => 'Метрическая (м/км)';
|
||
|
||
@override
|
||
String get appSettings_unitsImperial => 'Имперская (ft / mi)';
|
||
|
||
@override
|
||
String get appSettings_noAreaSelected => 'Область не выбрана';
|
||
|
||
@override
|
||
String appSettings_areaSelectedZoom(int minZoom, int maxZoom) {
|
||
return 'Область выбрана (масштаб $minZoom–$maxZoom)';
|
||
}
|
||
|
||
@override
|
||
String get appSettings_debugCard => 'Отладка';
|
||
|
||
@override
|
||
String get appSettings_appDebugLogging => 'Журнал отладки приложения';
|
||
|
||
@override
|
||
String get appSettings_appDebugLoggingSubtitle =>
|
||
'Записывать отладочные сообщения приложения для диагностики';
|
||
|
||
@override
|
||
String get appSettings_appDebugLoggingEnabled =>
|
||
'Журнал отладки приложения включён';
|
||
|
||
@override
|
||
String get appSettings_appDebugLoggingDisabled =>
|
||
'Журнал отладки приложения отключён';
|
||
|
||
@override
|
||
String get contacts_title => 'Контакты';
|
||
|
||
@override
|
||
String get contacts_noContacts => 'Контактов пока нет';
|
||
|
||
@override
|
||
String get contacts_contactsWillAppear =>
|
||
'Контакты появятся, когда устройства начнут рассылать оповещения';
|
||
|
||
@override
|
||
String get contacts_unread => 'Непрочитанное';
|
||
|
||
@override
|
||
String get contacts_searchContactsNoNumber => 'Поиск контактов...';
|
||
|
||
@override
|
||
String contacts_searchContacts(int number, String str) {
|
||
return 'Поиск контактов...';
|
||
}
|
||
|
||
@override
|
||
String contacts_searchFavorites(int number, String str) {
|
||
return 'Поиск $number$str избранного...';
|
||
}
|
||
|
||
@override
|
||
String contacts_searchUsers(int number, String str) {
|
||
return 'Поиск $number$str пользователей...';
|
||
}
|
||
|
||
@override
|
||
String contacts_searchRepeaters(int number, String str) {
|
||
return 'Поиск $number$str ретрансляторов...';
|
||
}
|
||
|
||
@override
|
||
String contacts_searchRoomServers(int number, String str) {
|
||
return 'Поиск $number$str серверов комнат...';
|
||
}
|
||
|
||
@override
|
||
String get contacts_noUnreadContacts => 'Нет непрочитанных контактов';
|
||
|
||
@override
|
||
String get contacts_noContactsFound => 'Контакты или группы не найдены';
|
||
|
||
@override
|
||
String get contacts_deleteContact => 'Удалить контакт';
|
||
|
||
@override
|
||
String contacts_removeConfirm(String contactName) {
|
||
return 'Удалить $contactName из контактов?';
|
||
}
|
||
|
||
@override
|
||
String get contacts_manageRepeater => 'Управление репитером';
|
||
|
||
@override
|
||
String get contacts_manageRoom => 'Управление сервером комнат';
|
||
|
||
@override
|
||
String get contacts_roomLogin => 'Вход на сервер комнат';
|
||
|
||
@override
|
||
String get contacts_openChat => 'Открыть чат';
|
||
|
||
@override
|
||
String get contacts_editGroup => 'Изменить группу';
|
||
|
||
@override
|
||
String get contacts_deleteGroup => 'Удалить группу';
|
||
|
||
@override
|
||
String contacts_deleteGroupConfirm(String groupName) {
|
||
return 'Удалить \"$groupName\"?';
|
||
}
|
||
|
||
@override
|
||
String get contacts_newGroup => 'Новая группа';
|
||
|
||
@override
|
||
String get contacts_moreOptions => 'Больше вариантов';
|
||
|
||
@override
|
||
String get contacts_searchOpen => 'Найти контакты';
|
||
|
||
@override
|
||
String get contacts_searchClose => 'Закрыть поиск';
|
||
|
||
@override
|
||
String get contacts_groupName => 'Имя группы';
|
||
|
||
@override
|
||
String get contacts_groupNameRequired => 'Имя группы обязательно';
|
||
|
||
@override
|
||
String get contacts_groupNameReserved => 'Это имя группы зарезервировано';
|
||
|
||
@override
|
||
String contacts_groupAlreadyExists(String name) {
|
||
return 'Группа \"$name\" уже существует';
|
||
}
|
||
|
||
@override
|
||
String get contacts_filterContacts => 'Фильтр контактов...';
|
||
|
||
@override
|
||
String get contacts_noContactsMatchFilter =>
|
||
'Нет контактов, соответствующих фильтру';
|
||
|
||
@override
|
||
String get contacts_noMembers => 'Нет участников';
|
||
|
||
@override
|
||
String get contacts_lastSeenNow => 'Видели только что';
|
||
|
||
@override
|
||
String contacts_lastSeenMinsAgo(int minutes) {
|
||
return 'Видели $minutes мин назад';
|
||
}
|
||
|
||
@override
|
||
String get contacts_lastSeenHourAgo => 'Видели 1 час назад';
|
||
|
||
@override
|
||
String contacts_lastSeenHoursAgo(int hours) {
|
||
return 'Видели $hours ч назад';
|
||
}
|
||
|
||
@override
|
||
String get contacts_lastSeenDayAgo => 'Видели 1 день назад';
|
||
|
||
@override
|
||
String contacts_lastSeenDaysAgo(int days) {
|
||
return 'Видели $days дн. назад';
|
||
}
|
||
|
||
@override
|
||
String get contact_info => 'Контактная информация';
|
||
|
||
@override
|
||
String get contact_settings => 'Настройки контактов';
|
||
|
||
@override
|
||
String get contact_telemetry => 'Телеметрия';
|
||
|
||
@override
|
||
String get contact_lastSeen => 'Последний раз видели';
|
||
|
||
@override
|
||
String get contact_clearChat => 'Очистить чат';
|
||
|
||
@override
|
||
String get contact_teleBase => 'База телеметрии';
|
||
|
||
@override
|
||
String get contact_teleBaseSubtitle =>
|
||
'Разрешить обмен уровнем заряда батареи и базовой телеметрией';
|
||
|
||
@override
|
||
String get contact_teleLoc => 'Местоположение телеметрии';
|
||
|
||
@override
|
||
String get contact_teleLocSubtitle =>
|
||
'Разрешить обмен данными о местоположении';
|
||
|
||
@override
|
||
String get contact_teleEnv => 'Среда телеметрии';
|
||
|
||
@override
|
||
String get contact_teleEnvSubtitle =>
|
||
'Разрешить обмен данными датчиков окружающей среды';
|
||
|
||
@override
|
||
String get channels_title => 'Каналы';
|
||
|
||
@override
|
||
String get channels_noChannelsConfigured => 'Каналы не настроены';
|
||
|
||
@override
|
||
String get channels_addPublicChannel => 'Добавить публичный канал';
|
||
|
||
@override
|
||
String get channels_searchChannels => 'Поиск каналов...';
|
||
|
||
@override
|
||
String get channels_noChannelsFound => 'Каналы не найдены';
|
||
|
||
@override
|
||
String channels_channelIndex(int index) {
|
||
return 'Канал $index';
|
||
}
|
||
|
||
@override
|
||
String get channels_public => 'Публичный';
|
||
|
||
@override
|
||
String channels_via(String path) {
|
||
return 'через $path';
|
||
}
|
||
|
||
@override
|
||
String get channels_private => 'Приватный';
|
||
|
||
@override
|
||
String get channels_editChannel => 'Изменить канал';
|
||
|
||
@override
|
||
String get channels_muteChannel => 'Отключить уведомления канала';
|
||
|
||
@override
|
||
String get channels_unmuteChannel => 'Включить уведомления канала';
|
||
|
||
@override
|
||
String get channels_deleteChannel => 'Удалить канал';
|
||
|
||
@override
|
||
String channels_deleteChannelConfirm(String name) {
|
||
return 'Удалить \"$name\"? Это действие нельзя отменить.';
|
||
}
|
||
|
||
@override
|
||
String channels_channelDeleteFailed(String name) {
|
||
return 'Не удалось удалить канал $name.';
|
||
}
|
||
|
||
@override
|
||
String channels_channelDeleted(String name) {
|
||
return 'Канал \"$name\" удалён';
|
||
}
|
||
|
||
@override
|
||
String get channels_addChannel => 'Добавить канал';
|
||
|
||
@override
|
||
String get channels_channelIndexLabel => 'Индекс канала';
|
||
|
||
@override
|
||
String get channels_channelName => 'Имя канала';
|
||
|
||
@override
|
||
String get channels_usePublicChannel => 'Использовать публичный канал';
|
||
|
||
@override
|
||
String get channels_standardPublicPsk => 'Стандартный публичный PSK';
|
||
|
||
@override
|
||
String get channels_pskHex => 'PSK (Hex)';
|
||
|
||
@override
|
||
String get channels_generateRandomPsk => 'Сгенерировать случайный PSK';
|
||
|
||
@override
|
||
String get channels_enterChannelName => 'Введите имя канала';
|
||
|
||
@override
|
||
String get channels_pskMustBe32Hex =>
|
||
'PSK должен содержать 32 шестнадцатеричных символа';
|
||
|
||
@override
|
||
String channels_channelAdded(String name) {
|
||
return 'Канал \"$name\" добавлен';
|
||
}
|
||
|
||
@override
|
||
String channels_editChannelTitle(int index) {
|
||
return 'Изменить канал $index';
|
||
}
|
||
|
||
@override
|
||
String get channels_smazCompression => 'Сжатие SMAZ';
|
||
|
||
@override
|
||
String get channels_cyr2latCompression => 'Сжатие Cyr2Lat';
|
||
|
||
@override
|
||
String get channels_cyr2latCompressionDscr =>
|
||
'Заменяет некоторые кириллические символы на латиницу при отправке.';
|
||
|
||
@override
|
||
String get channels_cyr2latSettingsHeading => 'Настройка Cyr2Lat';
|
||
|
||
@override
|
||
String get channels_cyr2latSettingsSubheading => 'Список замен';
|
||
|
||
@override
|
||
String get channels_cyr2latSettingsDscr =>
|
||
'Редактировать JSON-конфигурацию замены символов';
|
||
|
||
@override
|
||
String get channels_cyr2latSettingsDialogHint => 'JSON-карта замен';
|
||
|
||
@override
|
||
String channels_cyr2latSettingsDialogWrongJSON(Object error) {
|
||
return 'Некорректный JSON: $error';
|
||
}
|
||
|
||
@override
|
||
String channels_channelUpdated(String name) {
|
||
return 'Канал \"$name\" обновлён';
|
||
}
|
||
|
||
@override
|
||
String get settings_cyr2latProfileAdd => 'Добавить профиль Cyr2Lat';
|
||
|
||
@override
|
||
String get settings_cyr2latProfileName => 'Название профиля';
|
||
|
||
@override
|
||
String get settings_cyr2latProfileNameEmpty =>
|
||
'Название профиля не может быть пустым';
|
||
|
||
@override
|
||
String get settings_cyr2latProfileAdded => 'Профиль добавлен';
|
||
|
||
@override
|
||
String get settings_cyr2latProfileUpdated => 'Профиль успешно обновлен';
|
||
|
||
@override
|
||
String get settings_cyr2latProfileEdit => 'Редактировать профиль Cyr2Lat';
|
||
|
||
@override
|
||
String get settings_cyr2latProfileDelete => 'Удалить профиль Cyr2Lat';
|
||
|
||
@override
|
||
String get settings_cyr2latProfileDeleted => 'Профиль успешно удален';
|
||
|
||
@override
|
||
String settings_cyr2latProfileDeleteDscr(String name) {
|
||
return 'Вы действительно хотите удалить профиль \"$name\"?';
|
||
}
|
||
|
||
@override
|
||
String get channels_publicChannelAdded => 'Публичный канал добавлен';
|
||
|
||
@override
|
||
String get channels_sortBy => 'Сортировка';
|
||
|
||
@override
|
||
String get channels_sortManual => 'Вручную';
|
||
|
||
@override
|
||
String get channels_sortAZ => 'По алфавиту';
|
||
|
||
@override
|
||
String get channels_sortLatestMessages => 'По последним сообщениям';
|
||
|
||
@override
|
||
String get channels_sortUnread => 'По непрочитанным';
|
||
|
||
@override
|
||
String get channels_createPrivateChannel => 'Создать приватный канал';
|
||
|
||
@override
|
||
String get channels_createPrivateChannelDesc => 'Защищён секретным ключом.';
|
||
|
||
@override
|
||
String get channels_joinPrivateChannel =>
|
||
'Присоединиться к приватному каналу';
|
||
|
||
@override
|
||
String get channels_joinPrivateChannelDesc =>
|
||
'Введите секретный ключ вручную.';
|
||
|
||
@override
|
||
String get channels_joinPublicChannel => 'Присоединиться к публичному каналу';
|
||
|
||
@override
|
||
String get channels_joinPublicChannelDesc =>
|
||
'К этому каналу может присоединиться любой.';
|
||
|
||
@override
|
||
String get channels_joinHashtagChannel => 'Присоединиться к хэштег-каналу';
|
||
|
||
@override
|
||
String get channels_joinHashtagChannelDesc =>
|
||
'К хэштег-каналам может присоединиться любой.';
|
||
|
||
@override
|
||
String get channels_scanQrCode => 'Сканировать QR-код';
|
||
|
||
@override
|
||
String get channels_scanQrCodeComingSoon => 'Скоро будет';
|
||
|
||
@override
|
||
String get channels_enterHashtag => 'Введите хэштег';
|
||
|
||
@override
|
||
String get channels_hashtagHint => 'например, #команда';
|
||
|
||
@override
|
||
String channels_regionSetTo(String region) {
|
||
return 'Region: $region';
|
||
}
|
||
|
||
@override
|
||
String get channels_regionNotSet => 'Region: none';
|
||
|
||
@override
|
||
String get channels_regionSelect_Title => 'Select a region';
|
||
|
||
@override
|
||
String get channels_clearRegion => 'Clear region';
|
||
|
||
@override
|
||
String get chat_noMessages => 'Сообщений пока нет';
|
||
|
||
@override
|
||
String get chat_sendMessage => 'Отправить сообщение';
|
||
|
||
@override
|
||
String chat_sendMessageTo(String contactName) {
|
||
return 'Отправить сообщение $contactName';
|
||
}
|
||
|
||
@override
|
||
String get chat_sendMessageToStart => 'Отправьте сообщение, чтобы начать';
|
||
|
||
@override
|
||
String get chat_originalMessageNotFound => 'Исходное сообщение не найдено';
|
||
|
||
@override
|
||
String chat_replyingTo(String name) {
|
||
return 'Ответ для $name';
|
||
}
|
||
|
||
@override
|
||
String chat_replyTo(String name) {
|
||
return 'Ответить $name';
|
||
}
|
||
|
||
@override
|
||
String get chat_location => 'Местоположение';
|
||
|
||
@override
|
||
String get chat_typeMessage => 'Напишите сообщение...';
|
||
|
||
@override
|
||
String chat_messageTooLong(int maxBytes) {
|
||
return 'Сообщение слишком длинное (макс. $maxBytes байт).';
|
||
}
|
||
|
||
@override
|
||
String get chat_messageCopied => 'Сообщение скопировано';
|
||
|
||
@override
|
||
String get chat_messageDeleted => 'Сообщение удалено';
|
||
|
||
@override
|
||
String get chat_retryingMessage => 'Повтор отправки сообщения';
|
||
|
||
@override
|
||
String chat_retryCount(int current, int max) {
|
||
return 'Попытка $current/$max';
|
||
}
|
||
|
||
@override
|
||
String get chat_sendGif => 'Отправить GIF';
|
||
|
||
@override
|
||
String get chat_reply => 'Ответить';
|
||
|
||
@override
|
||
String get chat_addReaction => 'Добавить реакцию';
|
||
|
||
@override
|
||
String get chat_me => 'Я';
|
||
|
||
@override
|
||
String get emojiCategorySmileys => 'Смайлы';
|
||
|
||
@override
|
||
String get emojiCategoryGestures => 'Жесты';
|
||
|
||
@override
|
||
String get emojiCategoryHearts => 'Сердечки';
|
||
|
||
@override
|
||
String get emojiCategoryObjects => 'Предметы';
|
||
|
||
@override
|
||
String get gifPicker_title => 'Выберите GIF';
|
||
|
||
@override
|
||
String get gifPicker_searchHint => 'Поиск GIF...';
|
||
|
||
@override
|
||
String get gifPicker_poweredBy => 'Работает на GIPHY';
|
||
|
||
@override
|
||
String get gifPicker_noGifsFound => 'GIF не найдены';
|
||
|
||
@override
|
||
String get gifPicker_failedLoad => 'Не удалось загрузить GIF';
|
||
|
||
@override
|
||
String get gifPicker_failedSearch => 'Не удалось выполнить поиск GIF';
|
||
|
||
@override
|
||
String get gifPicker_noInternet => 'Нет подключения к интернету';
|
||
|
||
@override
|
||
String get debugLog_appTitle => 'Журнал отладки приложения';
|
||
|
||
@override
|
||
String get debugLog_bleTitle => 'Журнал отладки BLE';
|
||
|
||
@override
|
||
String get debugLog_copyLog => 'Копировать журнал';
|
||
|
||
@override
|
||
String get debugLog_clearLog => 'Очистить журнал';
|
||
|
||
@override
|
||
String get debugLog_copied => 'Журнал отладки скопирован';
|
||
|
||
@override
|
||
String get debugLog_bleCopied => 'Журнал BLE скопирован';
|
||
|
||
@override
|
||
String get debugLog_noEntries => 'Журнал отладки пока пуст';
|
||
|
||
@override
|
||
String get debugLog_enableInSettings =>
|
||
'Включите запись журнала отладки в настройках';
|
||
|
||
@override
|
||
String get debugLog_frames => 'Фреймы';
|
||
|
||
@override
|
||
String get debugLog_rawLogRx => 'Сырой журнал приёма';
|
||
|
||
@override
|
||
String get debugLog_noBleActivity => 'Активность BLE пока отсутствует';
|
||
|
||
@override
|
||
String debugFrame_length(int count) {
|
||
return 'Длина фрейма: $count байт';
|
||
}
|
||
|
||
@override
|
||
String debugFrame_command(String value) {
|
||
return 'Команда: 0x$value';
|
||
}
|
||
|
||
@override
|
||
String get debugFrame_textMessageHeader => 'Фрейм текстового сообщения:';
|
||
|
||
@override
|
||
String debugFrame_destinationPubKey(String pubKey) {
|
||
return '- Публичный ключ получателя: $pubKey';
|
||
}
|
||
|
||
@override
|
||
String debugFrame_timestamp(int timestamp) {
|
||
return '- Временная метка: $timestamp';
|
||
}
|
||
|
||
@override
|
||
String debugFrame_flags(String value) {
|
||
return '- Флаги: 0x$value';
|
||
}
|
||
|
||
@override
|
||
String debugFrame_textType(int type, String label) {
|
||
return '- Тип текста: $type ($label)';
|
||
}
|
||
|
||
@override
|
||
String get debugFrame_textTypeCli => 'CLI';
|
||
|
||
@override
|
||
String get debugFrame_textTypePlain => 'Обычный';
|
||
|
||
@override
|
||
String debugFrame_text(String text) {
|
||
return '- Текст: \"$text\"';
|
||
}
|
||
|
||
@override
|
||
String get debugFrame_hexDump => 'Шестнадцатеричный дамп:';
|
||
|
||
@override
|
||
String chat_hopsCount(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: 'хопов',
|
||
many: 'хопов',
|
||
few: 'хопа',
|
||
one: 'хоп',
|
||
);
|
||
return '$count $_temp0';
|
||
}
|
||
|
||
@override
|
||
String get chat_removePath => 'Удалить маршрут';
|
||
|
||
@override
|
||
String get chat_noPathHistoryYet =>
|
||
'История маршрутов пока пуста.\nОтправьте сообщение, чтобы обнаружить маршруты.';
|
||
|
||
@override
|
||
String get chat_pathCleared =>
|
||
'Маршрут очищен. Следующее сообщение обновит маршрут.';
|
||
|
||
@override
|
||
String get chat_fullPath => 'Полный маршрут';
|
||
|
||
@override
|
||
String get routing_title => 'Маршрутизация';
|
||
|
||
@override
|
||
String get routing_modeAuto => 'Авто';
|
||
|
||
@override
|
||
String get routing_modeFlood => 'Наводнение';
|
||
|
||
@override
|
||
String get routing_modeManual => 'Инструкция';
|
||
|
||
@override
|
||
String get routing_modeAutoHint =>
|
||
'Автоматически выбирает наиболее известный путь, и если такой путь неизвестен, использует алгоритм поиска пути.';
|
||
|
||
@override
|
||
String get routing_modeFloodHint =>
|
||
'Передача сигнала через все ретрансляторы. Самый надежный способ, но требует больше времени на передачу.';
|
||
|
||
@override
|
||
String get routing_modeManualHint =>
|
||
'Всегда следует точно по указанному вами маршруту.';
|
||
|
||
@override
|
||
String get routing_currentRoute => 'Текущий маршрут';
|
||
|
||
@override
|
||
String get routing_directNoHops =>
|
||
'Прямое соединение – без использования ретрансляторов';
|
||
|
||
@override
|
||
String get routing_noPathYet =>
|
||
'Пока нет пути. Следующее сообщение будет отправлено до тех пор, пока не будет обнаружен маршрут.';
|
||
|
||
@override
|
||
String get routing_floodBroadcast => 'Транслируется через все ретрансляторы';
|
||
|
||
@override
|
||
String get routing_editPath => 'Изменить путь';
|
||
|
||
@override
|
||
String get routing_forgetPath => 'Забудьте о маршруте';
|
||
|
||
@override
|
||
String get routing_knownPaths => 'Известные маршруты';
|
||
|
||
@override
|
||
String get routing_knownPathsHint =>
|
||
'Создайте маршрут для переключения на этот пункт.';
|
||
|
||
@override
|
||
String get routing_inUse => 'В эксплуатации';
|
||
|
||
@override
|
||
String get routing_qualityStrong => 'Сильный первый скачок';
|
||
|
||
@override
|
||
String get routing_qualityGood => 'Хорошее начало';
|
||
|
||
@override
|
||
String get routing_qualityFair => 'Первый хороший урожай';
|
||
|
||
@override
|
||
String get routing_qualityWorked => 'Осуществлено';
|
||
|
||
@override
|
||
String get routing_qualityFlood =>
|
||
'Узнал из новостей, распространяющихся в интернете.';
|
||
|
||
@override
|
||
String get routing_qualityUntested => 'Непроверенный';
|
||
|
||
@override
|
||
String routing_lastWorked(String when) {
|
||
return 'worked $when';
|
||
}
|
||
|
||
@override
|
||
String get routing_neverWorked => 'никогда не было подтверждено';
|
||
|
||
@override
|
||
String routing_deliveryCounts(int successes, int failures) {
|
||
return '$successes delivered, $failures failed';
|
||
}
|
||
|
||
@override
|
||
String get routing_floodDelivery => 'Доставка при затоплении';
|
||
|
||
@override
|
||
String get pathEditor_title => 'Создать маршрут';
|
||
|
||
@override
|
||
String pathEditor_hopCounter(int count) {
|
||
return '$count из 64 хмеля';
|
||
}
|
||
|
||
@override
|
||
String get pathEditor_noHops =>
|
||
'На данный момент хмель еще не добавлен. Чтобы добавить его, нажмите на соответствующие кнопки ниже в нужном порядке, или сохраните рецепт без хмеля, чтобы отправить его напрямую.';
|
||
|
||
@override
|
||
String get pathEditor_addHops =>
|
||
'Добавляйте хмель в соответствии с указанным порядком.';
|
||
|
||
@override
|
||
String get pathEditor_searchRepeaters => 'Поиск повторителей';
|
||
|
||
@override
|
||
String get pathEditor_advancedHex =>
|
||
'Продвинутый уровень: прямой путь в шестнадцатеричном формате';
|
||
|
||
@override
|
||
String get pathEditor_hexLabel => 'Префиксы шестнадцатеричной системы';
|
||
|
||
@override
|
||
String get pathEditor_hexHelper =>
|
||
'Два шестнадцатеричных символа на каждом шаге, разделенные запятыми.';
|
||
|
||
@override
|
||
String pathEditor_invalidTokens(String tokens) {
|
||
return 'Неверно: $tokens';
|
||
}
|
||
|
||
@override
|
||
String get pathEditor_tooManyHops =>
|
||
'Максимальное количество ингредиентов – 64';
|
||
|
||
@override
|
||
String get pathEditor_usePath => 'Используйте этот путь';
|
||
|
||
@override
|
||
String get pathEditor_removeHop => 'Удалить хмель';
|
||
|
||
@override
|
||
String get pathEditor_unknownHop => 'Неизвестный ретранслятор';
|
||
|
||
@override
|
||
String get chat_pathSavedLocally =>
|
||
'Сохранено локально. Подключитесь для синхронизации.';
|
||
|
||
@override
|
||
String get chat_pathDeviceConfirmed => 'Подтверждено устройством.';
|
||
|
||
@override
|
||
String get chat_pathDeviceNotConfirmed => 'Ещё не подтверждено устройством.';
|
||
|
||
@override
|
||
String get chat_type => 'Тип';
|
||
|
||
@override
|
||
String get chat_path => 'Маршрут';
|
||
|
||
@override
|
||
String get chat_publicKey => 'Публичный ключ';
|
||
|
||
@override
|
||
String get chat_compressOutgoingMessages => 'Сжимать исходящие сообщения';
|
||
|
||
@override
|
||
String get chat_floodForced => 'Рассылка (принудительно)';
|
||
|
||
@override
|
||
String get chat_directForced => 'Прямой (принудительно)';
|
||
|
||
@override
|
||
String chat_hopsForced(int count) {
|
||
return '$count хоп(ов) (принудительно)';
|
||
}
|
||
|
||
@override
|
||
String get chat_floodAuto => 'Рассылка (авто)';
|
||
|
||
@override
|
||
String get chat_direct => 'Прямой';
|
||
|
||
@override
|
||
String get chat_poiShared => 'Точка интереса отправлена';
|
||
|
||
@override
|
||
String chat_unread(int count) {
|
||
return 'Непрочитанных: $count';
|
||
}
|
||
|
||
@override
|
||
String get chat_markAsUnread => 'Пометить как непрочитанные';
|
||
|
||
@override
|
||
String get chat_newMessages => 'Новые сообщения';
|
||
|
||
@override
|
||
String get chat_openLink => 'Открыть ссылку?';
|
||
|
||
@override
|
||
String get chat_openLinkConfirmation =>
|
||
'Хотите открыть эту ссылку в вашем браузере?';
|
||
|
||
@override
|
||
String get chat_open => 'Открыть';
|
||
|
||
@override
|
||
String chat_couldNotOpenLink(String url) {
|
||
return 'Не удалось открыть ссылку: $url';
|
||
}
|
||
|
||
@override
|
||
String get chat_invalidLink => 'Неправильный формат ссылки';
|
||
|
||
@override
|
||
String get map_title => 'Карта нод';
|
||
|
||
@override
|
||
String get map_searchHint => 'Поиск по имени или ID узла';
|
||
|
||
@override
|
||
String get map_activity => 'Активность';
|
||
|
||
@override
|
||
String get map_online => 'Онлайн';
|
||
|
||
@override
|
||
String get map_recent => 'Недавно';
|
||
|
||
@override
|
||
String get map_stale => 'Устаревший';
|
||
|
||
@override
|
||
String get map_visible => 'Видимый';
|
||
|
||
@override
|
||
String get map_hidden => 'Скрытый';
|
||
|
||
@override
|
||
String get map_centerOnNode => 'Центрировать на узле';
|
||
|
||
@override
|
||
String get map_details => 'Детали';
|
||
|
||
@override
|
||
String get map_noGps => 'Без GPS';
|
||
|
||
@override
|
||
String get map_noResults => 'Не найдено соответствующих узлов';
|
||
|
||
@override
|
||
String get map_lineOfSight => 'Линия видимости';
|
||
|
||
@override
|
||
String get map_losScreenTitle => 'Линия видимости';
|
||
|
||
@override
|
||
String get map_noNodesWithLocation => 'Нет нод с данными о местоположении';
|
||
|
||
@override
|
||
String get map_nodesNeedGps =>
|
||
'Ноды должны передавать свои GPS-координаты, чтобы отображаться на карте';
|
||
|
||
@override
|
||
String map_nodesCount(int count) {
|
||
return 'Нод: $count';
|
||
}
|
||
|
||
@override
|
||
String map_pinsCount(int count) {
|
||
return 'Меток: $count';
|
||
}
|
||
|
||
@override
|
||
String get map_chat => 'Чат';
|
||
|
||
@override
|
||
String get map_repeater => 'Репитер';
|
||
|
||
@override
|
||
String get map_room => 'Комната';
|
||
|
||
@override
|
||
String get map_sensor => 'Сенсор';
|
||
|
||
@override
|
||
String get map_pinDm => 'Метка (ЛС)';
|
||
|
||
@override
|
||
String get map_pinPrivate => 'Метка (Приватная)';
|
||
|
||
@override
|
||
String get map_pinPublic => 'Метка (Публичная)';
|
||
|
||
@override
|
||
String get map_lastSeen => 'Последнее появление';
|
||
|
||
@override
|
||
String get map_disconnectConfirm =>
|
||
'Вы уверены, что хотите отключиться от этого устройства?';
|
||
|
||
@override
|
||
String get map_from => 'От';
|
||
|
||
@override
|
||
String get map_source => 'Источник';
|
||
|
||
@override
|
||
String get map_flags => 'Флаги';
|
||
|
||
@override
|
||
String get map_type => 'Тип';
|
||
|
||
@override
|
||
String get map_path => 'Путь';
|
||
|
||
@override
|
||
String get map_location => 'Местоположение';
|
||
|
||
@override
|
||
String get map_estLocation => 'Прибл. местоположение';
|
||
|
||
@override
|
||
String get map_publicKey => 'Публичный ключ';
|
||
|
||
@override
|
||
String get map_publicKeyPrefixHint => 'напр. ab12';
|
||
|
||
@override
|
||
String get map_shareMarkerHere => 'Поделиться меткой здесь';
|
||
|
||
@override
|
||
String get map_setAsMyLocation => 'Установить мое местоположение';
|
||
|
||
@override
|
||
String get map_pinLabel => 'Метка';
|
||
|
||
@override
|
||
String get map_label => 'Подпись';
|
||
|
||
@override
|
||
String get map_pointOfInterest => 'Точка интереса';
|
||
|
||
@override
|
||
String get map_sendToContact => 'Отправить контакту';
|
||
|
||
@override
|
||
String get map_sendToChannel => 'Отправить в канал';
|
||
|
||
@override
|
||
String get map_noChannelsAvailable => 'Нет доступных каналов';
|
||
|
||
@override
|
||
String get map_publicLocationShare => 'Публичная передача местоположения';
|
||
|
||
@override
|
||
String map_publicLocationShareConfirm(String channelLabel) {
|
||
return 'Вы собираетесь поделиться местоположением в $channelLabel. Этот канал публичный, и любой, у кого есть PSK, сможет его увидеть.';
|
||
}
|
||
|
||
@override
|
||
String get map_connectToShareMarkers =>
|
||
'Подключитесь к устройству, чтобы делиться метками';
|
||
|
||
@override
|
||
String get map_filterNodes => 'Фильтр нод';
|
||
|
||
@override
|
||
String get map_nodeTypes => 'Типы нод';
|
||
|
||
@override
|
||
String get map_chatNodes => 'Чат-ноды';
|
||
|
||
@override
|
||
String get map_repeaters => 'Репитеры';
|
||
|
||
@override
|
||
String get map_otherNodes => 'Другие ноды';
|
||
|
||
@override
|
||
String get map_showOverlaps => 'Перекрытия ключа повтора';
|
||
|
||
@override
|
||
String get map_keyPrefix => 'Префикс ключа';
|
||
|
||
@override
|
||
String get map_filterByKeyPrefix => 'Фильтр по префиксу ключа';
|
||
|
||
@override
|
||
String get map_publicKeyPrefix => 'Префикс публичного ключа';
|
||
|
||
@override
|
||
String get map_markers => 'Метки';
|
||
|
||
@override
|
||
String get map_showSharedMarkers => 'Показывать общие метки';
|
||
|
||
@override
|
||
String get map_showGuessedLocations =>
|
||
'Отобразить предполагаемые места расположения узлов';
|
||
|
||
@override
|
||
String get map_showDiscoveryContacts => 'Показать контакты Discovery';
|
||
|
||
@override
|
||
String get map_guessedLocation => 'Угаданное место';
|
||
|
||
@override
|
||
String get map_lastSeenTime => 'Время последнего появления';
|
||
|
||
@override
|
||
String get map_sharedPin => 'Общая метка';
|
||
|
||
@override
|
||
String get map_sharedAt => 'Поделено';
|
||
|
||
@override
|
||
String get map_joinRoom => 'Присоединиться к комнате';
|
||
|
||
@override
|
||
String get map_manageRepeater => 'Управление репитером';
|
||
|
||
@override
|
||
String get map_tapToAdd => 'Нажимайте на узлы, чтобы добавить их в путь.';
|
||
|
||
@override
|
||
String get map_runTrace => 'Запустить трассировку пути';
|
||
|
||
@override
|
||
String get map_runTraceWithReturnPath => 'Вернуться обратно по тому же пути';
|
||
|
||
@override
|
||
String get map_removeLast => 'Удалить последний';
|
||
|
||
@override
|
||
String get map_pathTraceCancelled => 'Отмена трассировки пути';
|
||
|
||
@override
|
||
String get mapCache_title => 'Кэш офлайн-карты';
|
||
|
||
@override
|
||
String get mapCache_selectAreaFirst =>
|
||
'Сначала выберите область для кэширования';
|
||
|
||
@override
|
||
String get mapCache_noTilesToDownload =>
|
||
'Нет плиток для загрузки в этой области';
|
||
|
||
@override
|
||
String get mapCache_downloadTilesTitle => 'Загрузить плитки';
|
||
|
||
@override
|
||
String mapCache_downloadTilesPrompt(int count) {
|
||
return 'Загрузить $count плиток для офлайн-использования?';
|
||
}
|
||
|
||
@override
|
||
String get mapCache_downloadAction => 'Загрузить';
|
||
|
||
@override
|
||
String mapCache_cachedTiles(int count) {
|
||
return 'Закэшировано $count плиток';
|
||
}
|
||
|
||
@override
|
||
String mapCache_cachedTilesWithFailed(int downloaded, int failed) {
|
||
return 'Закэшировано $downloaded плиток ($failed не загружено)';
|
||
}
|
||
|
||
@override
|
||
String get mapCache_clearOfflineCacheTitle => 'Очистить офлайн-кэш';
|
||
|
||
@override
|
||
String get mapCache_clearOfflineCachePrompt =>
|
||
'Удалить все закэшированные плитки карты?';
|
||
|
||
@override
|
||
String get mapCache_offlineCacheCleared => 'Офлайн-кэш очищен';
|
||
|
||
@override
|
||
String get mapCache_noAreaSelected => 'Область не выбрана';
|
||
|
||
@override
|
||
String get mapCache_cacheArea => 'Область кэширования';
|
||
|
||
@override
|
||
String get mapCache_useCurrentView => 'Использовать текущий вид';
|
||
|
||
@override
|
||
String get mapCache_zoomRange => 'Диапазон масштаба';
|
||
|
||
@override
|
||
String mapCache_estimatedTiles(int count) {
|
||
return 'Оценочное количество плиток: $count';
|
||
}
|
||
|
||
@override
|
||
String mapCache_downloadedTiles(int completed, int total) {
|
||
return 'Загружено $completed из $total';
|
||
}
|
||
|
||
@override
|
||
String get mapCache_downloadTilesButton => 'Загрузить плитки';
|
||
|
||
@override
|
||
String get mapCache_clearCacheButton => 'Очистить кэш';
|
||
|
||
@override
|
||
String mapCache_failedDownloads(int count) {
|
||
return 'Неудачных загрузок: $count';
|
||
}
|
||
|
||
@override
|
||
String mapCache_boundsLabel(
|
||
String north,
|
||
String south,
|
||
String east,
|
||
String west,
|
||
) {
|
||
return 'С $north, Ю $south, В $east, З $west';
|
||
}
|
||
|
||
@override
|
||
String get time_justNow => 'Только что';
|
||
|
||
@override
|
||
String time_minutesAgo(int minutes) {
|
||
return '$minutes мин назад';
|
||
}
|
||
|
||
@override
|
||
String time_hoursAgo(int hours) {
|
||
return '$hours ч назад';
|
||
}
|
||
|
||
@override
|
||
String time_daysAgo(int days) {
|
||
return '$days дн. назад';
|
||
}
|
||
|
||
@override
|
||
String get time_hour => 'час';
|
||
|
||
@override
|
||
String get time_hours => 'часов';
|
||
|
||
@override
|
||
String get time_day => 'день';
|
||
|
||
@override
|
||
String get time_days => 'дней';
|
||
|
||
@override
|
||
String get time_week => 'неделя';
|
||
|
||
@override
|
||
String get time_weeks => 'недель';
|
||
|
||
@override
|
||
String get time_month => 'месяц';
|
||
|
||
@override
|
||
String get time_months => 'месяцев';
|
||
|
||
@override
|
||
String get time_minutes => 'минут';
|
||
|
||
@override
|
||
String get time_allTime => 'Всё время';
|
||
|
||
@override
|
||
String get dialog_disconnect => 'Отключиться';
|
||
|
||
@override
|
||
String get dialog_disconnectConfirm =>
|
||
'Вы уверены, что хотите отключиться от этого устройства?';
|
||
|
||
@override
|
||
String get login_repeaterLogin => 'Вход в репитер';
|
||
|
||
@override
|
||
String get login_roomLogin => 'Вход на сервер комнат';
|
||
|
||
@override
|
||
String get login_password => 'Пароль';
|
||
|
||
@override
|
||
String get login_enterPassword => 'Введите пароль';
|
||
|
||
@override
|
||
String get login_savePassword => 'Сохранить пароль';
|
||
|
||
@override
|
||
String get login_savePasswordSubtitle =>
|
||
'Пароль будет надёжно сохранён на этом устройстве';
|
||
|
||
@override
|
||
String get login_repeaterDescription =>
|
||
'Введите пароль репитера для доступа к настройкам и статусу.';
|
||
|
||
@override
|
||
String get login_roomDescription =>
|
||
'Введите пароль комнаты для доступа к настройкам и статусу.';
|
||
|
||
@override
|
||
String get login_routing => 'Маршрутизация';
|
||
|
||
@override
|
||
String get login_routingMode => 'Режим маршрутизации';
|
||
|
||
@override
|
||
String get login_autoUseSavedPath =>
|
||
'Авто (использовать сохранённый маршрут)';
|
||
|
||
@override
|
||
String get login_forceFloodMode => 'Принудительный режим рассылки';
|
||
|
||
@override
|
||
String get login_managePaths => 'Управление маршрутами';
|
||
|
||
@override
|
||
String get login_login => 'Войти';
|
||
|
||
@override
|
||
String login_attempt(int current, int max) {
|
||
return 'Попытка $current/$max';
|
||
}
|
||
|
||
@override
|
||
String login_failed(String error) {
|
||
return 'Ошибка входа: $error';
|
||
}
|
||
|
||
@override
|
||
String get login_failedMessage =>
|
||
'Не удалось войти. Либо пароль неверен, либо репитер недоступен.';
|
||
|
||
@override
|
||
String get common_reload => 'Обновить';
|
||
|
||
@override
|
||
String get common_clear => 'Очистить';
|
||
|
||
@override
|
||
String get path_currentPathLabel => 'Текущий маршрут';
|
||
|
||
@override
|
||
String get path_noRepeatersFound => 'Репитеры или серверы комнат не найдены.';
|
||
|
||
@override
|
||
String get repeater_management => 'Управление репитером';
|
||
|
||
@override
|
||
String get room_management => 'Управление сервером комнат';
|
||
|
||
@override
|
||
String get repeater_guest => 'Информация о ретрансляторе';
|
||
|
||
@override
|
||
String get room_guest => 'Информация о сервере';
|
||
|
||
@override
|
||
String get repeater_managementTools => 'Инструменты управления';
|
||
|
||
@override
|
||
String get repeater_guestTools => 'Инструменты для гостей';
|
||
|
||
@override
|
||
String get repeater_status => 'Статус';
|
||
|
||
@override
|
||
String get repeater_statusSubtitle =>
|
||
'Просмотр статуса, статистики и соседей репитера';
|
||
|
||
@override
|
||
String get repeater_telemetry => 'Телеметрия';
|
||
|
||
@override
|
||
String get repeater_telemetrySubtitle =>
|
||
'Просмотр телеметрии датчиков и системной статистики';
|
||
|
||
@override
|
||
String get repeater_cli => 'CLI';
|
||
|
||
@override
|
||
String get repeater_cliSubtitle => 'Отправка команд репитеру';
|
||
|
||
@override
|
||
String get repeater_neighbors => 'Соседи';
|
||
|
||
@override
|
||
String get repeater_neighborsSubtitle => 'Просмотр соседей на нулевом хопе.';
|
||
|
||
@override
|
||
String get repeater_settings => 'Настройки';
|
||
|
||
@override
|
||
String get repeater_settingsSubtitle => 'Настройка параметров репитера';
|
||
|
||
@override
|
||
String get repeater_clockSyncAfterLogin =>
|
||
'Синхронизация часов после входа в систему';
|
||
|
||
@override
|
||
String get repeater_clockSyncAfterLoginSubtitle =>
|
||
'Автоматически отправлять сообщение \"синхронизация времени\" после успешной авторизации.';
|
||
|
||
@override
|
||
String get repeater_statusTitle => 'Статус репитера';
|
||
|
||
@override
|
||
String get repeater_routingMode => 'Режим маршрутизации';
|
||
|
||
@override
|
||
String get repeater_refresh => 'Обновить';
|
||
|
||
@override
|
||
String get repeater_statusRequestTimeout => 'Время ожидания статуса истекло.';
|
||
|
||
@override
|
||
String repeater_errorLoadingStatus(String error) {
|
||
return 'Ошибка загрузки статуса: $error';
|
||
}
|
||
|
||
@override
|
||
String get repeater_systemInformation => 'Системная информация';
|
||
|
||
@override
|
||
String get repeater_battery => 'Батарея';
|
||
|
||
@override
|
||
String get repeater_clockAtLogin => 'Время (при входе)';
|
||
|
||
@override
|
||
String get repeater_uptime => 'Время работы';
|
||
|
||
@override
|
||
String get repeater_queueLength => 'Длина очереди';
|
||
|
||
@override
|
||
String get repeater_debugFlags => 'Флаги отладки';
|
||
|
||
@override
|
||
String get repeater_radioStatistics => 'Радиостатистика';
|
||
|
||
@override
|
||
String get repeater_lastRssi => 'Последний RSSI';
|
||
|
||
@override
|
||
String get repeater_lastSnr => 'Последний SNR';
|
||
|
||
@override
|
||
String get repeater_noiseFloor => 'Уровень шума';
|
||
|
||
@override
|
||
String get repeater_txAirtime => 'Время эфира (передача)';
|
||
|
||
@override
|
||
String get repeater_rxAirtime => 'Время эфира (приём)';
|
||
|
||
@override
|
||
String get repeater_chanUtil => 'Использование канала';
|
||
|
||
@override
|
||
String get repeater_packetStatistics => 'Статистика пакетов';
|
||
|
||
@override
|
||
String get repeater_sent => 'Отправлено';
|
||
|
||
@override
|
||
String get repeater_received => 'Получено';
|
||
|
||
@override
|
||
String get repeater_duplicates => 'Дубликаты';
|
||
|
||
@override
|
||
String repeater_daysHoursMinsSecs(
|
||
int days,
|
||
int hours,
|
||
int minutes,
|
||
int seconds,
|
||
) {
|
||
return '$days дн. $hoursч $minutesм $secondsс';
|
||
}
|
||
|
||
@override
|
||
String repeater_packetTxTotal(int total, String flood, String direct) {
|
||
return 'Всего: $total, Рассылка: $flood, Прямые: $direct';
|
||
}
|
||
|
||
@override
|
||
String repeater_packetRxTotal(int total, String flood, String direct) {
|
||
return 'Всего: $total, Рассылка: $flood, Прямые: $direct';
|
||
}
|
||
|
||
@override
|
||
String repeater_duplicatesFloodDirect(String flood, String direct) {
|
||
return 'Рассылка: $flood, Прямые: $direct';
|
||
}
|
||
|
||
@override
|
||
String repeater_duplicatesTotal(int total) {
|
||
return 'Всего: $total';
|
||
}
|
||
|
||
@override
|
||
String get repeater_settingsTitle => 'Настройки репитера';
|
||
|
||
@override
|
||
String get repeater_basicSettings => 'Основные настройки';
|
||
|
||
@override
|
||
String get repeater_repeaterName => 'Имя репитера';
|
||
|
||
@override
|
||
String get repeater_repeaterNameHelper => 'Отображаемое имя этого репитера';
|
||
|
||
@override
|
||
String get repeater_adminPassword => 'Пароль администратора';
|
||
|
||
@override
|
||
String get repeater_adminPasswordHelper => 'Пароль с полным доступом';
|
||
|
||
@override
|
||
String get repeater_guestPassword => 'Гостевой пароль';
|
||
|
||
@override
|
||
String get repeater_guestPasswordHelper =>
|
||
'Пароль для доступа только для чтения';
|
||
|
||
@override
|
||
String get repeater_radioSettings => 'Настройки радио';
|
||
|
||
@override
|
||
String get repeater_frequencyMhz => 'Частота (МГц)';
|
||
|
||
@override
|
||
String get repeater_frequencyHelper => '300–2500 МГц';
|
||
|
||
@override
|
||
String get repeater_txPower => 'Мощность передачи';
|
||
|
||
@override
|
||
String get repeater_txPowerHelper => '1–30 дБм';
|
||
|
||
@override
|
||
String get repeater_bandwidth => 'Полоса пропускания';
|
||
|
||
@override
|
||
String get repeater_spreadingFactor => 'Коэффициент расширения';
|
||
|
||
@override
|
||
String get repeater_codingRate => 'Коэффициент кодирования';
|
||
|
||
@override
|
||
String get repeater_locationSettings => 'Настройки местоположения';
|
||
|
||
@override
|
||
String get repeater_latitude => 'Широта';
|
||
|
||
@override
|
||
String get repeater_latitudeHelper =>
|
||
'В десятичных градусах (напр., 37.7749)';
|
||
|
||
@override
|
||
String get repeater_longitude => 'Долгота';
|
||
|
||
@override
|
||
String get repeater_longitudeHelper =>
|
||
'В десятичных градусах (напр., -122.4194)';
|
||
|
||
@override
|
||
String get repeater_features => 'Функции';
|
||
|
||
@override
|
||
String get repeater_packetForwarding => 'Пересылка пакетов';
|
||
|
||
@override
|
||
String get repeater_packetForwardingSubtitle =>
|
||
'Разрешить репитеру пересылать пакеты';
|
||
|
||
@override
|
||
String get repeater_guestAccess => 'Гостевой доступ';
|
||
|
||
@override
|
||
String get repeater_guestAccessSubtitle =>
|
||
'Разрешить гостевой доступ только для чтения';
|
||
|
||
@override
|
||
String get repeater_privacyMode => 'Режим конфиденциальности';
|
||
|
||
@override
|
||
String get repeater_privacyModeSubtitle =>
|
||
'Скрывать имя/местоположение в оповещениях';
|
||
|
||
@override
|
||
String get repeater_advertisementSettings => 'Настройки анонсирования';
|
||
|
||
@override
|
||
String get repeater_localAdvertInterval => 'Интервал локальных анонсирований';
|
||
|
||
@override
|
||
String repeater_localAdvertIntervalMinutes(int minutes) {
|
||
return '$minutes минут';
|
||
}
|
||
|
||
@override
|
||
String get repeater_floodAdvertInterval =>
|
||
'Интервал анонсирований рассылкой (flood)';
|
||
|
||
@override
|
||
String repeater_floodAdvertIntervalHours(int hours) {
|
||
return '$hours часов';
|
||
}
|
||
|
||
@override
|
||
String get repeater_encryptedAdvertInterval =>
|
||
'Интервал зашифрованных анонсирований';
|
||
|
||
@override
|
||
String get repeater_dangerZone => 'Опасная зона';
|
||
|
||
@override
|
||
String get repeater_rebootRepeater => 'Перезагрузить репитер';
|
||
|
||
@override
|
||
String get repeater_rebootRepeaterSubtitle =>
|
||
'Перезапустить устройство репитера';
|
||
|
||
@override
|
||
String get repeater_rebootRepeaterConfirm =>
|
||
'Вы уверены, что хотите перезагрузить этот репитер?';
|
||
|
||
@override
|
||
String get repeater_regenerateIdentityKey => 'Пересоздать ключ идентификации';
|
||
|
||
@override
|
||
String get repeater_regenerateIdentityKeySubtitle =>
|
||
'Сгенерировать новую пару публичного/приватного ключей';
|
||
|
||
@override
|
||
String get repeater_regenerateIdentityKeyConfirm =>
|
||
'Это создаст новую идентичность для репитера. Продолжить?';
|
||
|
||
@override
|
||
String get repeater_eraseFileSystem => 'Стереть файловую систему';
|
||
|
||
@override
|
||
String get repeater_eraseFileSystemSubtitle =>
|
||
'Отформатировать файловую систему репитера';
|
||
|
||
@override
|
||
String get repeater_eraseFileSystemConfirm =>
|
||
'ВНИМАНИЕ: это удалит все данные на репитере. Действие нельзя отменить!';
|
||
|
||
@override
|
||
String get repeater_eraseSerialOnly =>
|
||
'Очистка доступна только через последовательную консоль.';
|
||
|
||
@override
|
||
String repeater_commandSent(String command) {
|
||
return 'Команда отправлена: $command';
|
||
}
|
||
|
||
@override
|
||
String repeater_errorSendingCommand(String error) {
|
||
return 'Ошибка отправки команды: $error';
|
||
}
|
||
|
||
@override
|
||
String get repeater_confirm => 'Подтвердить';
|
||
|
||
@override
|
||
String get repeater_settingsSaved => 'Настройки успешно сохранены';
|
||
|
||
@override
|
||
String get repeater_rxGain => 'Увеличенная эффективность RX';
|
||
|
||
@override
|
||
String get repeater_rxGainHelper =>
|
||
'Более высокая чувствительность, больший ток потребления (только для SX1262/SX1268)';
|
||
|
||
@override
|
||
String get repeater_refreshRxGain => 'Обновите усиление RX';
|
||
|
||
@override
|
||
String get repeater_multiAcks => 'Несколько подтверждений';
|
||
|
||
@override
|
||
String get repeater_multiAcksSubtitle =>
|
||
'Обеспечьте доставку сообщений по нескольким каналам для повышения эффективности.';
|
||
|
||
@override
|
||
String get repeater_refreshMultiAcks => 'Обновление нескольких подтверждений';
|
||
|
||
@override
|
||
String get repeater_networkHealth => 'Состояние сети';
|
||
|
||
@override
|
||
String get repeater_loopDetect => 'Обнаружение циклов';
|
||
|
||
@override
|
||
String get repeater_loopDetectHelper =>
|
||
'Создайте пакеты данных, которые выглядят как циклы маршрутизации.';
|
||
|
||
@override
|
||
String get repeater_loopDetectOff => 'Отключено';
|
||
|
||
@override
|
||
String get repeater_loopDetectMinimal => 'Минимальный';
|
||
|
||
@override
|
||
String get repeater_loopDetectModerate => 'Умеренный';
|
||
|
||
@override
|
||
String get repeater_loopDetectStrict => 'Строгий';
|
||
|
||
@override
|
||
String get repeater_dutyCycle => 'Цикл работы';
|
||
|
||
@override
|
||
String get repeater_dutyCycleHelper =>
|
||
'Максимальный процент времени, выделенного на трансляцию.';
|
||
|
||
@override
|
||
String repeater_dutyCyclePercent(int percent) {
|
||
return '$percent%';
|
||
}
|
||
|
||
@override
|
||
String get repeater_ownerInfo => 'Информация о операторе';
|
||
|
||
@override
|
||
String get repeater_ownerInfoHelper =>
|
||
'Общая метаинформация для этого ретранслятора';
|
||
|
||
@override
|
||
String get repeater_refreshOwnerInfo => 'Обновить информацию о операторе';
|
||
|
||
@override
|
||
String get repeater_floodMax =>
|
||
'Максимальное количество прыжков при наводнении';
|
||
|
||
@override
|
||
String get repeater_floodMaxHelper =>
|
||
'Максимальное количество пакетов, которые могут быть отправлены в одном потоке (0-64)';
|
||
|
||
@override
|
||
String get repeater_advancedSettings => 'Продвинутый';
|
||
|
||
@override
|
||
String get repeater_advancedSettingsSubtitle =>
|
||
'Регуляторы для опытных операторов';
|
||
|
||
@override
|
||
String get repeater_pathHashMode => 'Режим хеширования пути';
|
||
|
||
@override
|
||
String get repeater_pathHashModeHelper =>
|
||
'Байты, используемые для кодирования идентификатора этого ретранслятора в тегах для обнаружения потоков/циклов. 0 = 1 байт (256 идентификаторов, до 64 переходов), 1 = 2 байта (65 000 идентификаторов, до 32 переходов), 2 = 3 байта (1 600 000 идентификаторов, до 21 перехода). Версии прошивки v1.13 и более ранние версии не поддерживают многобайтовые пути — они поднимаются только после того, как ваша сеть будет обновлена до версии v1.14 и выше.';
|
||
|
||
@override
|
||
String get repeater_keySettings => 'Change Identity Keys';
|
||
|
||
@override
|
||
String get repeater_keySettingsSubtitle =>
|
||
'Change the public/private keypair';
|
||
|
||
@override
|
||
String get repeater_prvKey => 'Private key';
|
||
|
||
@override
|
||
String get repeater_prvKeyHelper =>
|
||
'A new private key for the repeater, a 128-character hex string.';
|
||
|
||
@override
|
||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||
|
||
@override
|
||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||
|
||
@override
|
||
String get repeater_pubKey => 'Public key';
|
||
|
||
@override
|
||
String get repeater_pubKeyHelper =>
|
||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||
|
||
@override
|
||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||
|
||
@override
|
||
String repeater_pubKeyPrefixHelper(int tries) {
|
||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||
}
|
||
|
||
@override
|
||
String get repeater_txDelay => 'Задержка в работе системы Flood TX';
|
||
|
||
@override
|
||
String get repeater_txDelayHelper =>
|
||
'Передача с увеличенным интервалом для трафика во время наводнения, в качестве коэффициента, умножающего время передачи пакета (от 0 до 2, по умолчанию 0,5). Более высокое значение означает меньшее количество столкновений, но более медленную передачу.';
|
||
|
||
@override
|
||
String get repeater_directTxDelay => 'Прямая задержка сигнала TX';
|
||
|
||
@override
|
||
String get repeater_directTxDelayHelper =>
|
||
'Передача промежуточных данных для прямого (немассового) трафика, в качестве коэффициента, равного времени передачи пакета (от 0 до 2, по умолчанию 0,3).';
|
||
|
||
@override
|
||
String get repeater_intThresh => 'Пороговое значение помех';
|
||
|
||
@override
|
||
String get repeater_intThreshHelper =>
|
||
'Порог устанавливается для калибровки уровня шума радио, чтобы оно отсеивало помехи, превышающие этот уровень. Значение \"0\" означает отключение – используйте только в случае, если вы наблюдаете ошибки при приеме сигнала в шумном диапазоне.';
|
||
|
||
@override
|
||
String get repeater_agcResetInterval => 'Интервал сброса AGC';
|
||
|
||
@override
|
||
String get repeater_agcResetIntervalHelper =>
|
||
'Как часто следует сбрасывать автоматическую регулировку усиления радио, чтобы вернуться к нормальному состоянию после заклинивания? Интервал сброса составляет несколько секунд, кратный 4. Отключение периодического сброса осуществляется с помощью параметра 0.';
|
||
|
||
@override
|
||
String get repeater_actionsTitle => 'Действия';
|
||
|
||
@override
|
||
String get repeater_sendAdvert => 'Отправить объявление о наводнении';
|
||
|
||
@override
|
||
String get repeater_sendAdvertSubtitle =>
|
||
'Разместите рекламу о наводнении в эфире по всей сети.';
|
||
|
||
@override
|
||
String get repeater_sendAdvertZeroHop =>
|
||
'Опубликуйте рекламу, не требующую промежуточного распространения.';
|
||
|
||
@override
|
||
String get repeater_sendAdvertZeroHopSubtitle =>
|
||
'Разместите рекламу, распространяемую одним способом (без использования ретрансляторов).';
|
||
|
||
@override
|
||
String get repeater_clockSync => 'Синхронизировать время сейчас';
|
||
|
||
@override
|
||
String get repeater_clockSyncSubtitle =>
|
||
'Установите время на вашем телефоне, чтобы оно совпадало со временем ретранслятора.';
|
||
|
||
@override
|
||
String repeater_actionSucceeded(String action) {
|
||
return '$action succeeded';
|
||
}
|
||
|
||
@override
|
||
String repeater_actionFailed(String action, String error) {
|
||
return '$action failed: $error';
|
||
}
|
||
|
||
@override
|
||
String get repeater_settingsSavedRebootNeeded =>
|
||
'Настройки сохранены — перезагрузите ретранслятор, чтобы применить их.';
|
||
|
||
@override
|
||
String repeater_settingsPartialFailure(String failures) {
|
||
return 'Некоторые настройки не удалось применить: $failures';
|
||
}
|
||
|
||
@override
|
||
String repeater_errorSavingSettings(String error) {
|
||
return 'Ошибка сохранения настроек: $error';
|
||
}
|
||
|
||
@override
|
||
String get repeater_refreshBasicSettings => 'Обновить основные настройки';
|
||
|
||
@override
|
||
String get repeater_refreshRadioSettings => 'Обновить настройки радио';
|
||
|
||
@override
|
||
String get repeater_refreshTxPower => 'Обновить мощность передачи';
|
||
|
||
@override
|
||
String get repeater_refreshPacketForwarding => 'Обновить пересылку пакетов';
|
||
|
||
@override
|
||
String get repeater_refreshGuestAccess => 'Обновить гостевой доступ';
|
||
|
||
@override
|
||
String get repeater_refreshPrivacyMode => 'Обновить режим конфиденциальности';
|
||
|
||
@override
|
||
String repeater_refreshed(String label) {
|
||
return '$label обновлён';
|
||
}
|
||
|
||
@override
|
||
String repeater_errorRefreshing(String label) {
|
||
return 'Ошибка обновления $label';
|
||
}
|
||
|
||
@override
|
||
String get repeater_cliTitle => 'CLI репитера';
|
||
|
||
@override
|
||
String get repeater_debugNextCommand => 'Отладка следующей команды';
|
||
|
||
@override
|
||
String get repeater_commandHelp => 'Справка по командам';
|
||
|
||
@override
|
||
String get repeater_clearHistory => 'Очистить историю';
|
||
|
||
@override
|
||
String get repeater_noCommandsSent => 'Команды ещё не отправлялись';
|
||
|
||
@override
|
||
String get repeater_typeCommandOrUseQuick =>
|
||
'Введите команду ниже или используйте быстрые команды';
|
||
|
||
@override
|
||
String get repeater_enterCommandHint => 'Введите команду...';
|
||
|
||
@override
|
||
String get repeater_previousCommand => 'Предыдущая команда';
|
||
|
||
@override
|
||
String get repeater_nextCommand => 'Следующая команда';
|
||
|
||
@override
|
||
String get repeater_enterCommandFirst => 'Сначала введите команду';
|
||
|
||
@override
|
||
String get repeater_cliCommandFrameTitle => 'Фрейм CLI-команды';
|
||
|
||
@override
|
||
String repeater_cliCommandError(String error) {
|
||
return 'Ошибка: $error';
|
||
}
|
||
|
||
@override
|
||
String get repeater_cliQuickGetName => 'Получить имя';
|
||
|
||
@override
|
||
String get repeater_cliQuickGetRadio => 'Получить радио';
|
||
|
||
@override
|
||
String get repeater_cliQuickGetTx => 'Получить TX';
|
||
|
||
@override
|
||
String get repeater_cliQuickNeighbors => 'Соседи';
|
||
|
||
@override
|
||
String get repeater_cliQuickVersion => 'Версия';
|
||
|
||
@override
|
||
String get repeater_cliQuickAdvertise => 'Анонсировать';
|
||
|
||
@override
|
||
String get repeater_cliQuickClock => 'Время';
|
||
|
||
@override
|
||
String get repeater_cliQuickClockSync => 'Синхронизация часов';
|
||
|
||
@override
|
||
String get repeater_cliQuickDiscovery => 'Обнаружить Соседей';
|
||
|
||
@override
|
||
String get repeater_cliHelpAdvert => 'Отправляет пакет анонсирования';
|
||
|
||
@override
|
||
String get repeater_cliHelpReboot =>
|
||
'Перезагружает устройство. (обычно вы получите «Тайм-аут» — это нормально)';
|
||
|
||
@override
|
||
String get repeater_cliHelpClock =>
|
||
'Показывает текущее время по часам устройства.';
|
||
|
||
@override
|
||
String get repeater_cliHelpPassword =>
|
||
'Устанавливает новый пароль администратора для устройства.';
|
||
|
||
@override
|
||
String get repeater_cliHelpVersion =>
|
||
'Показывает версию устройства и дату сборки прошивки.';
|
||
|
||
@override
|
||
String get repeater_cliHelpClearStats =>
|
||
'Сбрасывает различные счётчики статистики в ноль.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetAf =>
|
||
'Устанавливает коэффициент времени в эфире.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetTx =>
|
||
'Устанавливает мощность передачи LoRa в дБм. (требуется перезагрузка)';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetRepeat =>
|
||
'Включает или отключает роль репитера для этой ноды.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetAllowReadOnly =>
|
||
'(Сервер комнат) Если «on», то вход без пароля разрешён, но публиковать в комнату нельзя (только чтение)';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetFloodMax =>
|
||
'Устанавливает максимальное число хопов для входящих пакетов в режиме рассылки (если >= макс., пакет не пересылается)';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetIntThresh =>
|
||
'Устанавливает порог интерференции (в дБ). По умолчанию 14. Установите 0, чтобы отключить обнаружение помех.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetAgcResetInterval =>
|
||
'Устанавливает интервал сброса автоматической регулировки усиления. Установите 0, чтобы отключить.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetMultiAcks =>
|
||
'Включает или отключает функцию «двойных ACK».';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetAdvertInterval =>
|
||
'Устанавливает интервал (в минутах) отправки локального (нулевой хоп) анонсирования. Установите 0, чтобы отключить.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetFloodAdvertInterval =>
|
||
'Устанавливает интервал (в часах) отправки анонсирований рассылкой. Установите 0, чтобы отключить.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetGuestPassword =>
|
||
'Устанавливает/обновляет гостевой пароль. (для репитеров гости могут отправлять запрос «Get Stats»)';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetName => 'Устанавливает имя в оповещениях.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetLat =>
|
||
'Устанавливает широту для карты в оповещениях. (десятичные градусы)';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetLon =>
|
||
'Устанавливает долготу для карты в оповещениях. (десятичные градусы)';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetRadio =>
|
||
'Устанавливает полностью новые параметры радио и сохраняет их в настройки. Требуется команда «reboot» для применения.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetRxDelay =>
|
||
'Устанавливает (экспериментально) базовую задержку (>1 для эффекта) для принятых пакетов на основе качества сигнала. Установите 0, чтобы отключить.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetTxDelay =>
|
||
'Устанавливает множитель времени в эфире для пакета в режиме рассылки и применяет случайную задержку перед пересылкой (чтобы уменьшить коллизии).';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetDirectTxDelay =>
|
||
'То же, что txdelay, но для случайной задержки пересылки пакетов в прямом режиме.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetBridgeEnabled => 'Включить/выключить мост.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetBridgeDelay =>
|
||
'Установить задержку перед ретрансляцией пакетов.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetBridgeSource =>
|
||
'Выбрать, будет ли мост ретранслировать полученные или отправленные пакеты.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetBridgeBaud =>
|
||
'Установить скорость последовательного соединения для мостов RS232.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetBridgeSecret =>
|
||
'Установить секрет моста для мостов ESP-NOW.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetAdcMultiplier =>
|
||
'Устанавливает пользовательский коэффициент коррекции напряжения батареи (поддерживается только на некоторых платах).';
|
||
|
||
@override
|
||
String get repeater_cliHelpTempRadio =>
|
||
'Устанавливает временные параметры радио на заданное число минут, затем возвращает исходные. (НЕ сохраняется в настройки).';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetPerm =>
|
||
'Изменяет ACL. Удаляет запись (по префиксу публичного ключа), если «permissions» равен нулю. Добавляет новую запись, если указан полный ключ и он отсутствует в ACL. Обновляет запись по совпадению префикса. Биты прав зависят от роли прошивки, но младшие 2 бита: 0 (Гость), 1 (Только чтение), 2 (Чтение/запись), 3 (Админ)';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBridgeType =>
|
||
'Получает тип моста: none, rs232, espnow';
|
||
|
||
@override
|
||
String get repeater_cliHelpLogStart =>
|
||
'Начинает запись пакетов в файловую систему.';
|
||
|
||
@override
|
||
String get repeater_cliHelpLogStop =>
|
||
'Останавливает запись пакетов в файловую систему.';
|
||
|
||
@override
|
||
String get repeater_cliHelpLogErase =>
|
||
'Удаляет журналы пакетов из файловой системы.';
|
||
|
||
@override
|
||
String get repeater_cliHelpNeighbors =>
|
||
'Показывает список других репитеров, услышанных через оповещения нулевого хопа. Каждая строка: префикс-id-в-hex:временная-метка:snr×4';
|
||
|
||
@override
|
||
String get repeater_cliHelpNeighborRemove =>
|
||
'Удаляет первую подходящую запись (по префиксу публичного ключа в hex) из списка соседей.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegion =>
|
||
'(только через последовательный порт) Показывает все определённые регионы и текущие права на рассылку.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionLoad =>
|
||
'ПРИМЕЧАНИЕ: это специальная многострочная команда. Каждая следующая строка — имя региона (с отступом пробелами для указания иерархии, минимум один пробел). Завершается пустой строкой.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionGet =>
|
||
'Ищет регион по префиксу имени (или «*» для глобальной области). Отвечает: «-> имя-региона (родитель) \'F\'»';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionPut =>
|
||
'Добавляет или обновляет определение региона с заданным именем.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionRemove =>
|
||
'Удаляет определение региона с заданным именем. (должно точно совпадать и не иметь дочерних регионов)';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionAllowf =>
|
||
'Разрешает рассылку («F»lood) для заданного региона. («*» для глобальной/устаревшей области)';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionDenyf =>
|
||
'Запрещает рассылку («F»lood) для заданного региона. (НЕ рекомендуется для глобальной области!)';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionHome =>
|
||
'Показывает текущий «домашний» регион. (Пока не используется, зарезервировано на будущее)';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionHomeSet =>
|
||
'Устанавливает «домашний» регион.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionSave =>
|
||
'Сохраняет список/карту регионов в память.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGps =>
|
||
'Показывает статус GPS. Если GPS выключен — отвечает только «off». Если включён — показывает статус, фиксацию, количество спутников.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGpsOnOff => 'Переключает состояние питания GPS.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGpsSync =>
|
||
'Синхронизирует время ноды с часами GPS.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGpsSetLoc =>
|
||
'Устанавливает позицию ноды по координатам GPS и сохраняет в настройки.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGpsAdvert =>
|
||
'Показывает конфигурацию передачи местоположения в анонсированиях:\n- none: не включать местоположение\n- share: передавать GPS-координаты (из SensorManager)\n- prefs: передавать координаты из настроек';
|
||
|
||
@override
|
||
String get repeater_cliHelpGpsAdvertSet =>
|
||
'Устанавливает конфигурацию передачи местоположения.';
|
||
|
||
@override
|
||
String get repeater_commandsListTitle => 'Список команд';
|
||
|
||
@override
|
||
String get repeater_commandsListNote =>
|
||
'ПРИМЕЧАНИЕ: для большинства команд «set ...» существуют соответствующие команды «get ...».';
|
||
|
||
@override
|
||
String get repeater_general => 'Общие';
|
||
|
||
@override
|
||
String get repeater_settingsCategory => 'Настройки';
|
||
|
||
@override
|
||
String get repeater_bridge => 'Мост';
|
||
|
||
@override
|
||
String get repeater_logging => 'Журналирование';
|
||
|
||
@override
|
||
String get repeater_neighborsRepeaterOnly => 'Соседи (только для репитеров)';
|
||
|
||
@override
|
||
String get repeater_regionManagementRepeaterOnly =>
|
||
'Управление регионами (только для репитеров)';
|
||
|
||
@override
|
||
String get repeater_regionNote =>
|
||
'Команды регионов введены для управления определениями регионов и правами доступа.';
|
||
|
||
@override
|
||
String get repeater_gpsManagement => 'Управление GPS';
|
||
|
||
@override
|
||
String get repeater_gpsNote =>
|
||
'Команда gps введена для управления параметрами, связанными с местоположением.';
|
||
|
||
@override
|
||
String get repeater_getCategory => 'Получить значения';
|
||
|
||
@override
|
||
String get repeater_powerMgmt => 'Управление энергопотреблением';
|
||
|
||
@override
|
||
String get repeater_sensors => 'Датчики';
|
||
|
||
@override
|
||
String get repeater_cliHelpPowerOff =>
|
||
'Отключает устройство. (ожидается отсутствие ответа).';
|
||
|
||
@override
|
||
String get repeater_cliHelpClkReboot =>
|
||
'Сбрасывает часы до известной эпохи и перезапускает устройство.';
|
||
|
||
@override
|
||
String get repeater_cliHelpAdvertZeroHop =>
|
||
'Отправляет рекламу, распространяемую только среди ближайших соседей (без промежуточных узлов).';
|
||
|
||
@override
|
||
String get repeater_cliHelpStartOta =>
|
||
'Запускает обновление прошивки по воздуху на поддерживаемых устройствах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpTime =>
|
||
'Устанавливает время устройства в соответствии с заданными секундами от начала эпохи Unix. Время не может сброситься назад.';
|
||
|
||
@override
|
||
String get repeater_cliHelpBoard =>
|
||
'Отображает информацию о производителе платы / идентификатор аппаратного обеспечения.';
|
||
|
||
@override
|
||
String get repeater_cliHelpDiscoverNeighbors =>
|
||
'Отправляет запрос на обнаружение соседних узлов. (Только для ретранслятора)';
|
||
|
||
@override
|
||
String get repeater_cliHelpPowersaving =>
|
||
'Показывает, включен ли режим экономии энергии.';
|
||
|
||
@override
|
||
String get repeater_cliHelpPowersavingOnOff =>
|
||
'Включает или выключает режим экономии энергии (если он поддерживается).';
|
||
|
||
@override
|
||
String get repeater_cliHelpErase =>
|
||
'(Только для серийного использования) Форматирует файловую систему устройства. Удаляет все настройки и контакты.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetDutyCycle =>
|
||
'Устанавливает максимальный допустимый цикл передачи данных в процентах (от 1 до 100). Внутренне корректирует коэффициент времени передачи.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetPrvKey =>
|
||
'(Только для серийного использования) Заменяет приватный ключ, идентифицирующий устройство. Требуется перезагрузка для применения. Генерирует новый публичный ключ.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetRadioRxGain =>
|
||
'(Только для SX126x) Переключает усиление RX для повышения чувствительности при больших токах потребления.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetOwnerInfo =>
|
||
'Указывает строку с контактной информацией владельца, которая должна быть включена в объявления. Используйте \'|\' для переносов строк.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetPathHashMode =>
|
||
'Устанавливает режим хеширования пути. 0 = устаревший, 1 = стандартный, 2 = строгий. Влияет на то, как определяются маршруты.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetLoopDetect =>
|
||
'Устанавливает чувствительность обнаружения циклов маршрутизации: \"выключено\", \"минимальная\", \"умеренная\" или \"строгая\".';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetFreq =>
|
||
'(Только для настройки) Быстро устанавливает только частоту. Требуется перезагрузка. Рекомендуется использовать функцию \"настройка радио\" для полного набора параметров.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSetBridgeChannel =>
|
||
'(Только для моста ESPNow) Устанавливает канал Wi-Fi (от 1 до 14), используемый мостом.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetName => 'Отображает имя настроенного узла.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetRole =>
|
||
'Отображает роль прошивки (ретранслятор, сервер для комнаты и т.д.).';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetPublicKey =>
|
||
'Отображает открытый ключ устройства.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetPrvKey =>
|
||
'(Только для серийного использования) Отображает приватный ключ устройства. Рассматривайте его как секретную информацию.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetRepeat =>
|
||
'Отображает, включена ли функция перенаправления пакетов (функция ретранслятора) или нет.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetTx =>
|
||
'Отображает текущую мощность передатчика в дБм.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetFreq =>
|
||
'Отображает настроенную частоту радиосигнала в мегагерцах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetRadio =>
|
||
'Отображает все параметры радиосигнала: частоту, полосу пропускания, коэффициент модуляции, скорость кодирования.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetRadioRxGain =>
|
||
'(Только для SX126x) Отображает состояние усиления сигнала на входе RX.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetAf =>
|
||
'Отображает текущий коэффициент времени эфира.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetDutyCycle =>
|
||
'Отображает текущий допустимый цикл работы в процентах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetIntThresh =>
|
||
'Отображает порог помех в децибелах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetAgcResetInterval =>
|
||
'Отображает интервал сброса автоматической регулировки усиления в секундах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetMultiAcks =>
|
||
'Показывает, включен ли режим двойной подтверждения (1) или выключен (0).';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetAllowReadOnly =>
|
||
'Отображает, разрешен ли доступ для чтения только для гостей.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetAdvertInterval =>
|
||
'Отображает продолжительность рекламного блока в минутах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetFloodAdvertInterval =>
|
||
'Отображает интервал времени показа рекламного ролика в часах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetGuestPassword =>
|
||
'Отображает установленный пароль для гостя.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetLat => 'Отображает заданную широту.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetLon => 'Отображает заданную долготу.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetRxDelay =>
|
||
'Отображает базовое значение задержки.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetTxDelay =>
|
||
'Отображает коэффициент задержки при работе в режиме затопления.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetDirectTxDelay =>
|
||
'Отображает коэффициент задержки в режиме прямого подключения.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetFloodMax =>
|
||
'Отображает максимальное количество переходов при затоплении.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetOwnerInfo =>
|
||
'Отображает строку с контактной информацией владельца.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetPathHashMode =>
|
||
'Отображает режим работы с хэшем пути (0/1/2).';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetLoopDetect =>
|
||
'Отображает чувствительность к обнаружению циклов.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetAcl =>
|
||
'(Только для серий) Перечисляет записи управления доступом на ретрансляторе.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBridgeEnabled =>
|
||
'Показывает, включена ли функция моста.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBridgeDelay =>
|
||
'Отображает задержку в миллисекундах.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBridgeSource =>
|
||
'Отображает, какие пакеты RX или TX передаются через мост.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBridgeBaud =>
|
||
'(Только для интерфейса RS232) Отображает скорость передачи данных на интерфейсе RS232.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBridgeChannel =>
|
||
'(Только для моста ESPNow) Отображает канал WiFi, используемый мостом.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBridgeSecret =>
|
||
'(Только для моста ESPNow) Отображает общий секрет, используемый мостом.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetBootloaderVer =>
|
||
'(Только для NRF52) Отображает версию загрузчика.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetAdcMultiplier =>
|
||
'Отображает коэффициент умножения аналого-цифрового преобразователя (масштабирование напряжения от батареи).';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetPwrMgtSupport =>
|
||
'Сообщает, есть ли у совета поддержки функций управления питанием.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetPwrMgtSource =>
|
||
'Отображает текущий источник питания: внешний или аккумулятор.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetPwrMgtBootReason =>
|
||
'Отображает последние причины сброса и выключения.';
|
||
|
||
@override
|
||
String get repeater_cliHelpGetPwrMgtBootMv =>
|
||
'Отображает напряжение батареи при запуске системы в милливольтах (мВ).';
|
||
|
||
@override
|
||
String get repeater_cliHelpSensorGet =>
|
||
'Считывает пользовательское значение для датчика по указанному ключу.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSensorSet =>
|
||
'Создает пользовательские настройки для датчика.';
|
||
|
||
@override
|
||
String get repeater_cliHelpSensorList =>
|
||
'Перечисляет все пользовательские настройки датчиков, разбитые на страницы с возможностью указания начального индекса.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionDefault =>
|
||
'Отображает текущий область действия по умолчанию.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionDefaultSet =>
|
||
'Устанавливает значение региона по умолчанию. Используйте \"<null>\", чтобы сбросить значение.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionListAllowed =>
|
||
'Перечисляет регионы, где разрешено движение транспорта во время наводнений.';
|
||
|
||
@override
|
||
String get repeater_cliHelpRegionListDenied =>
|
||
'Перечисляет регионы, где запрещено движение транспорта во время наводнений.';
|
||
|
||
@override
|
||
String get repeater_cliHelpStatsPackets =>
|
||
'(Только для серийной версии) Отображает статистику на уровне пакетов.';
|
||
|
||
@override
|
||
String get repeater_cliHelpStatsRadio =>
|
||
'(Только для серий) Отображает статистику радио.';
|
||
|
||
@override
|
||
String get repeater_cliHelpStatsCore =>
|
||
'(Только для серийного оборудования) Отображает основные статистические данные прошивки.';
|
||
|
||
@override
|
||
String get telemetry_receivedData => 'Полученные телеметрические данные';
|
||
|
||
@override
|
||
String get telemetry_requestTimeout => 'Время ожидания телеметрии истекло.';
|
||
|
||
@override
|
||
String telemetry_errorLoading(String error) {
|
||
return 'Ошибка загрузки телеметрии: $error';
|
||
}
|
||
|
||
@override
|
||
String get telemetry_noData => 'Данные телеметрии недоступны.';
|
||
|
||
@override
|
||
String telemetry_channelTitle(int channel) {
|
||
return 'Канал $channel';
|
||
}
|
||
|
||
@override
|
||
String get telemetry_batteryLabel => 'Батарея';
|
||
|
||
@override
|
||
String get telemetry_voltageLabel => 'Напряжение';
|
||
|
||
@override
|
||
String get telemetry_mcuTemperatureLabel => 'Температура МК';
|
||
|
||
@override
|
||
String get telemetry_temperatureLabel => 'Температура';
|
||
|
||
@override
|
||
String get telemetry_currentLabel => 'Ток';
|
||
|
||
@override
|
||
String telemetry_batteryValue(int percent, String volts) {
|
||
return '$percent% / $voltsВ';
|
||
}
|
||
|
||
@override
|
||
String telemetry_voltageValue(String volts) {
|
||
return '$voltsВ';
|
||
}
|
||
|
||
@override
|
||
String telemetry_currentValue(String amps) {
|
||
return '$ampsА';
|
||
}
|
||
|
||
@override
|
||
String telemetry_temperatureValue(String celsius, String fahrenheit) {
|
||
return '$celsius°C / $fahrenheit°F';
|
||
}
|
||
|
||
@override
|
||
String get telemetry_digitalInputLabel => 'Цифровой вход';
|
||
|
||
@override
|
||
String get telemetry_digitalOutputLabel => 'Цифровой выход';
|
||
|
||
@override
|
||
String get telemetry_analogInputLabel => 'Аналоговый вход';
|
||
|
||
@override
|
||
String get telemetry_analogOutputLabel => 'Аналоговый выход';
|
||
|
||
@override
|
||
String get telemetry_genericLabel => 'Общий датчик';
|
||
|
||
@override
|
||
String get telemetry_luminosityLabel => 'Освещённость';
|
||
|
||
@override
|
||
String get telemetry_presenceLabel => 'Присутствие';
|
||
|
||
@override
|
||
String get telemetry_humidityLabel => 'Влажность';
|
||
|
||
@override
|
||
String get telemetry_accelerometerLabel => 'Акселерометр';
|
||
|
||
@override
|
||
String get telemetry_pressureLabel => 'Давление';
|
||
|
||
@override
|
||
String get telemetry_altitudeLabel => 'Высота';
|
||
|
||
@override
|
||
String get telemetry_frequencyLabel => 'Частота';
|
||
|
||
@override
|
||
String get telemetry_percentageLabel => 'Процент';
|
||
|
||
@override
|
||
String get telemetry_concentrationLabel => 'Концентрация';
|
||
|
||
@override
|
||
String get telemetry_powerLabel => 'Мощность';
|
||
|
||
@override
|
||
String get telemetry_distanceLabel => 'Расстояние';
|
||
|
||
@override
|
||
String get telemetry_energyLabel => 'Энергия';
|
||
|
||
@override
|
||
String get telemetry_directionLabel => 'Направление';
|
||
|
||
@override
|
||
String get telemetry_timeLabel => 'Время';
|
||
|
||
@override
|
||
String get telemetry_gyrometerLabel => 'Гирометр';
|
||
|
||
@override
|
||
String get telemetry_colourLabel => 'Цвет';
|
||
|
||
@override
|
||
String get telemetry_gpsLabel => 'GPS';
|
||
|
||
@override
|
||
String get telemetry_switchLabel => 'Переключатель';
|
||
|
||
@override
|
||
String get telemetry_polylineLabel => 'Полилиния';
|
||
|
||
@override
|
||
String telemetry_altitudeValue(String meters) {
|
||
return '$meters м';
|
||
}
|
||
|
||
@override
|
||
String telemetry_frequencyValue(String hertz) {
|
||
return '$hertz Гц';
|
||
}
|
||
|
||
@override
|
||
String telemetry_pressureValue(String hpa) {
|
||
return '$hpa гПа';
|
||
}
|
||
|
||
@override
|
||
String telemetry_luminosityValue(String lux) {
|
||
return '$lux лк';
|
||
}
|
||
|
||
@override
|
||
String telemetry_powerValue(String watts) {
|
||
return '$watts Вт';
|
||
}
|
||
|
||
@override
|
||
String telemetry_distanceValue(String meters) {
|
||
return '$meters м';
|
||
}
|
||
|
||
@override
|
||
String telemetry_energyValue(String kilowattHours) {
|
||
return '$kilowattHours кВт⋅ч';
|
||
}
|
||
|
||
@override
|
||
String telemetry_directionValue(String degrees) {
|
||
return '$degrees°';
|
||
}
|
||
|
||
@override
|
||
String telemetry_concentrationValue(String ppm) {
|
||
return '$ppm ppm';
|
||
}
|
||
|
||
@override
|
||
String telemetry_percentageValue(String percent) {
|
||
return '$percent%';
|
||
}
|
||
|
||
@override
|
||
String telemetry_analogValue(String value) {
|
||
return '$value';
|
||
}
|
||
|
||
@override
|
||
String get telemetry_autoFetchQuantity => 'Количество запросов';
|
||
|
||
@override
|
||
String get telemetry_error => 'Не удалось получить данные';
|
||
|
||
@override
|
||
String get neighbors_receivedData => 'Полученные данные о соседях';
|
||
|
||
@override
|
||
String get neighbors_requestTimedOut =>
|
||
'Время ожидания данных о соседях истекло.';
|
||
|
||
@override
|
||
String neighbors_errorLoading(String error) {
|
||
return 'Ошибка загрузки соседей: $error';
|
||
}
|
||
|
||
@override
|
||
String get neighbors_repeatersNeighbors => 'Соседи репитеров';
|
||
|
||
@override
|
||
String get neighbors_noData => 'Данные о соседях недоступны.';
|
||
|
||
@override
|
||
String neighbors_unknownContact(String pubkey) {
|
||
return 'Неизвестный $pubkey';
|
||
}
|
||
|
||
@override
|
||
String neighbors_heardAgo(String time) {
|
||
return 'Слушал(а): $time назад';
|
||
}
|
||
|
||
@override
|
||
String get channelPath_title => 'Путь пакета';
|
||
|
||
@override
|
||
String get channelPath_viewMap => 'Посмотреть на карте';
|
||
|
||
@override
|
||
String get channelPath_otherObservedPaths => 'Другие наблюдаемые пути';
|
||
|
||
@override
|
||
String get channelPath_repeaterHops => 'Хопы через репитеры';
|
||
|
||
@override
|
||
String get channelPath_noHopDetails =>
|
||
'Детали хопов для этого пакета не предоставлены.';
|
||
|
||
@override
|
||
String get channelPath_messageDetails => 'Детали сообщения';
|
||
|
||
@override
|
||
String get channelPath_senderLabel => 'Отправитель';
|
||
|
||
@override
|
||
String get channelPath_timeLabel => 'Время';
|
||
|
||
@override
|
||
String get channelPath_repeatsLabel => 'Повторы';
|
||
|
||
@override
|
||
String channelPath_pathLabel(int index) {
|
||
return 'Путь $index';
|
||
}
|
||
|
||
@override
|
||
String get channelPath_observedLabel => 'Наблюдаемый';
|
||
|
||
@override
|
||
String channelPath_observedPathTitle(int index, String hops) {
|
||
return 'Наблюдаемый путь $index • $hops';
|
||
}
|
||
|
||
@override
|
||
String get channelPath_noLocationData => 'Нет данных о местоположении';
|
||
|
||
@override
|
||
String channelPath_timeWithDate(int day, int month, String time) {
|
||
return '$day/$month $time';
|
||
}
|
||
|
||
@override
|
||
String channelPath_timeOnly(String time) {
|
||
return '$time';
|
||
}
|
||
|
||
@override
|
||
String get channelPath_unknownPath => 'Неизвестный';
|
||
|
||
@override
|
||
String get channelPath_floodPath => 'Рассылка';
|
||
|
||
@override
|
||
String get channelPath_directPath => 'Прямой';
|
||
|
||
@override
|
||
String channelPath_observedZeroOf(int total) {
|
||
return '0 из $total хопов';
|
||
}
|
||
|
||
@override
|
||
String channelPath_observedSomeOf(int observed, int total) {
|
||
return '$observed из $total хопов';
|
||
}
|
||
|
||
@override
|
||
String get channelPath_mapTitle => 'Карта пути';
|
||
|
||
@override
|
||
String get channelPath_noRepeaterLocations =>
|
||
'Нет данных о местоположении репитеров для этого пути.';
|
||
|
||
@override
|
||
String channelPath_primaryPath(int index) {
|
||
return 'Путь $index (Основной)';
|
||
}
|
||
|
||
@override
|
||
String get channelPath_pathLabelTitle => 'Путь';
|
||
|
||
@override
|
||
String get channelPath_observedPathHeader => 'Наблюдаемый путь';
|
||
|
||
@override
|
||
String channelPath_selectedPathLabel(String label, String prefixes) {
|
||
return '$label • $prefixes';
|
||
}
|
||
|
||
@override
|
||
String get channelPath_noHopDetailsAvailable =>
|
||
'Детали хопов для этого пакета недоступны.';
|
||
|
||
@override
|
||
String get channelPath_unknownRepeater => 'Неизвестный репитер';
|
||
|
||
@override
|
||
String get community_title => 'Сообщество';
|
||
|
||
@override
|
||
String get community_create => 'Создать сообщество';
|
||
|
||
@override
|
||
String get community_createDesc =>
|
||
'Создать новое сообщество и поделиться через QR-код.';
|
||
|
||
@override
|
||
String get community_join => 'Присоединиться';
|
||
|
||
@override
|
||
String get community_joinTitle => 'Присоединиться к сообществу';
|
||
|
||
@override
|
||
String community_joinConfirmation(String name) {
|
||
return 'Вы хотите присоединиться к сообществу \"$name\"?';
|
||
}
|
||
|
||
@override
|
||
String get community_scanQr => 'Сканировать QR-код сообщества';
|
||
|
||
@override
|
||
String get community_scanInstructions =>
|
||
'Наведите камеру на QR-код сообщества';
|
||
|
||
@override
|
||
String get community_showQr => 'Показать QR-код';
|
||
|
||
@override
|
||
String get community_publicChannel => 'Публичный канал сообщества';
|
||
|
||
@override
|
||
String get community_hashtagChannel => 'Хэштег-канал сообщества';
|
||
|
||
@override
|
||
String get community_name => 'Имя сообщества';
|
||
|
||
@override
|
||
String get community_enterName => 'Введите имя сообщества';
|
||
|
||
@override
|
||
String community_created(String name) {
|
||
return 'Сообщество \"$name\" создано';
|
||
}
|
||
|
||
@override
|
||
String community_joined(String name) {
|
||
return 'Присоединились к сообществу \"$name\"';
|
||
}
|
||
|
||
@override
|
||
String get community_qrTitle => 'Поделиться сообществом';
|
||
|
||
@override
|
||
String community_qrInstructions(String name) {
|
||
return 'Отсканируйте этот QR-код, чтобы присоединиться к \"$name\"';
|
||
}
|
||
|
||
@override
|
||
String get community_hashtagPrivacyHint =>
|
||
'Хэштег-каналы сообщества доступны только его участникам';
|
||
|
||
@override
|
||
String get community_invalidQrCode => 'Недопустимый QR-код сообщества';
|
||
|
||
@override
|
||
String get community_alreadyMember => 'Уже участник';
|
||
|
||
@override
|
||
String community_alreadyMemberMessage(String name) {
|
||
return 'Вы уже участник сообщества \"$name\".';
|
||
}
|
||
|
||
@override
|
||
String get community_addPublicChannel =>
|
||
'Добавить публичный канал сообщества';
|
||
|
||
@override
|
||
String get community_addPublicChannelHint =>
|
||
'Автоматически добавить публичный канал для этого сообщества';
|
||
|
||
@override
|
||
String get community_noCommunities =>
|
||
'Вы ещё не присоединились ни к одному сообществу';
|
||
|
||
@override
|
||
String get community_scanOrCreate =>
|
||
'Отсканируйте QR-код или создайте сообщество, чтобы начать';
|
||
|
||
@override
|
||
String get community_manageCommunities => 'Управление сообществами';
|
||
|
||
@override
|
||
String get community_delete => 'Покинуть сообщество';
|
||
|
||
@override
|
||
String community_deleteConfirm(String name) {
|
||
return 'Покинуть \"$name\"?';
|
||
}
|
||
|
||
@override
|
||
String community_deleteChannelsWarning(int count) {
|
||
return 'Это также удалит $count канал(ов) и их сообщения.';
|
||
}
|
||
|
||
@override
|
||
String community_deleted(String name) {
|
||
return 'Покинули сообщество \"$name\"';
|
||
}
|
||
|
||
@override
|
||
String get community_regenerateSecret => 'Пересоздать секрет';
|
||
|
||
@override
|
||
String community_regenerateSecretConfirm(String name) {
|
||
return 'Пересоздать секретный ключ для \"$name\"? Все участники должны будут отсканировать новый QR-код для продолжения общения.';
|
||
}
|
||
|
||
@override
|
||
String get community_regenerate => 'Пересоздать';
|
||
|
||
@override
|
||
String community_secretRegenerated(String name) {
|
||
return 'Секрет пересоздан для \"$name\"';
|
||
}
|
||
|
||
@override
|
||
String get community_updateSecret => 'Обновить секрет';
|
||
|
||
@override
|
||
String community_secretUpdated(String name) {
|
||
return 'Секрет обновлён для \"$name\"';
|
||
}
|
||
|
||
@override
|
||
String community_scanToUpdateSecret(String name) {
|
||
return 'Отсканируйте новый QR-код, чтобы обновить секрет для \"$name\"';
|
||
}
|
||
|
||
@override
|
||
String get community_addHashtagChannel => 'Добавить хэштег-канал сообщества';
|
||
|
||
@override
|
||
String get community_addHashtagChannelDesc =>
|
||
'Добавить хэштег-канал для этого сообщества';
|
||
|
||
@override
|
||
String get community_selectCommunity => 'Выбрать сообщество';
|
||
|
||
@override
|
||
String get community_regularHashtag => 'Обычный хэштег';
|
||
|
||
@override
|
||
String get community_regularHashtagDesc =>
|
||
'Публичный хэштег (любой может присоединиться)';
|
||
|
||
@override
|
||
String get community_communityHashtag => 'Хэштег сообщества';
|
||
|
||
@override
|
||
String get community_communityHashtagDesc =>
|
||
'Доступен только участникам сообщества';
|
||
|
||
@override
|
||
String community_forCommunity(String name) {
|
||
return 'Для $name';
|
||
}
|
||
|
||
@override
|
||
String get listFilter_tooltip => 'Фильтр и сортировка';
|
||
|
||
@override
|
||
String get listFilter_sortBy => 'Сортировка по';
|
||
|
||
@override
|
||
String get listFilter_latestMessages => 'Последние сообщения';
|
||
|
||
@override
|
||
String get listFilter_heardRecently => 'Слышали недавно';
|
||
|
||
@override
|
||
String get listFilter_az => 'По алфавиту';
|
||
|
||
@override
|
||
String get listFilter_filters => 'Фильтры';
|
||
|
||
@override
|
||
String get listFilter_all => 'Все';
|
||
|
||
@override
|
||
String get listFilter_favorites => 'Избранное';
|
||
|
||
@override
|
||
String get listFilter_addToFavorites => 'Добавить в избранное';
|
||
|
||
@override
|
||
String get listFilter_removeFromFavorites => 'Удалить из избранного';
|
||
|
||
@override
|
||
String get listFilter_users => 'Пользователи';
|
||
|
||
@override
|
||
String get listFilter_repeaters => 'Репитеры';
|
||
|
||
@override
|
||
String get listFilter_roomServers => 'Серверы комнат';
|
||
|
||
@override
|
||
String get listFilter_unreadOnly => 'Только непрочитанные';
|
||
|
||
@override
|
||
String get listFilter_newGroup => 'Новая группа';
|
||
|
||
@override
|
||
String get pathTrace_you => 'Вы';
|
||
|
||
@override
|
||
String get pathTrace_failed => 'Путь трассировки не выполнен.';
|
||
|
||
@override
|
||
String get pathTrace_notAvailable => 'Трассировка пути недоступна.';
|
||
|
||
@override
|
||
String get pathTrace_refreshTooltip => 'Обновить Path Trace';
|
||
|
||
@override
|
||
String get pathTrace_someHopsNoLocation =>
|
||
'Одному или нескольким хмелям не указано местоположение!';
|
||
|
||
@override
|
||
String get pathTrace_clearTooltip => 'Очистить путь';
|
||
|
||
@override
|
||
String get losSelectStartEnd => 'Выберите начальный и конечный узлы для LOS.';
|
||
|
||
@override
|
||
String losRunFailed(String error) {
|
||
return 'Проверка прямой видимости не удалась: $error';
|
||
}
|
||
|
||
@override
|
||
String get losClearAllPoints => 'Очистить все точки';
|
||
|
||
@override
|
||
String get losRunToViewElevationProfile =>
|
||
'Запустите LOS, чтобы просмотреть профиль высот.';
|
||
|
||
@override
|
||
String get losMenuTitle => 'ЛОС Меню';
|
||
|
||
@override
|
||
String get losMenuSubtitle =>
|
||
'Коснитесь узлов или нажмите и удерживайте карту для выбора пользовательских точек.';
|
||
|
||
@override
|
||
String get losShowDisplayNodes => 'Показать узлы отображения';
|
||
|
||
@override
|
||
String get losCustomPoints => 'Пользовательские точки';
|
||
|
||
@override
|
||
String losCustomPointLabel(int index) {
|
||
return 'Пользовательский $index';
|
||
}
|
||
|
||
@override
|
||
String get losPointA => 'Точка А';
|
||
|
||
@override
|
||
String get losPointB => 'Точка Б';
|
||
|
||
@override
|
||
String losAntennaA(String value, String unit) {
|
||
return 'Антенна А: $value $unit';
|
||
}
|
||
|
||
@override
|
||
String losAntennaB(String value, String unit) {
|
||
return 'Антенна Б: $value $unit';
|
||
}
|
||
|
||
@override
|
||
String get losRun => 'Запустить ЛОС';
|
||
|
||
@override
|
||
String get losNoElevationData => 'Нет данных о высоте';
|
||
|
||
@override
|
||
String losProfileClear(
|
||
String distance,
|
||
String distanceUnit,
|
||
String clearance,
|
||
String heightUnit,
|
||
) {
|
||
return '$distance $distanceUnit, свободная зона видимости, минимальный зазор $clearance $heightUnit';
|
||
}
|
||
|
||
@override
|
||
String losProfileBlocked(
|
||
String distance,
|
||
String distanceUnit,
|
||
String obstruction,
|
||
String heightUnit,
|
||
) {
|
||
return '$distance $distanceUnit, заблокирован $obstruction $heightUnit';
|
||
}
|
||
|
||
@override
|
||
String get losStatusChecking => 'ЛОС: проверяю...';
|
||
|
||
@override
|
||
String get losStatusNoData => 'ЛОС: нет данных';
|
||
|
||
@override
|
||
String losStatusSummary(int clear, int total, int blocked, int unknown) {
|
||
return 'LOS: $clear/$total очищено, $blocked заблокировано, $unknown неизвестно.';
|
||
}
|
||
|
||
@override
|
||
String get losErrorElevationUnavailable =>
|
||
'Данные о высоте недоступны для одного или нескольких образцов.';
|
||
|
||
@override
|
||
String get losErrorInvalidInput =>
|
||
'Неверные данные о точках/высоте для расчета LOS.';
|
||
|
||
@override
|
||
String get losRenameCustomPoint => 'Переименовать пользовательскую точку';
|
||
|
||
@override
|
||
String get losPointName => 'Имя точки';
|
||
|
||
@override
|
||
String get losShowPanelTooltip => 'Показать панель LOS';
|
||
|
||
@override
|
||
String get losHidePanelTooltip => 'Скрыть панель LOS';
|
||
|
||
@override
|
||
String get losElevationAttribution =>
|
||
'Данные о высоте: Open-Meteo (CC BY 4.0)';
|
||
|
||
@override
|
||
String get losLegendRadioHorizon => 'Радиогоризонт';
|
||
|
||
@override
|
||
String get losLegendLosBeam => 'Линия прямой видимости';
|
||
|
||
@override
|
||
String get losLegendTerrain => 'Рельеф';
|
||
|
||
@override
|
||
String get losBlockedSpotsTitle => 'Зарезервированные места';
|
||
|
||
@override
|
||
String get losBlockedSpotsHint =>
|
||
'Щелкните по заблокированной области, чтобы выделить ее на карте.';
|
||
|
||
@override
|
||
String losBlockedSpotChip(
|
||
String distance,
|
||
String distanceUnit,
|
||
String obstruction,
|
||
String heightUnit,
|
||
) {
|
||
return '$distance $distanceUnit • $obstruction $heightUnit';
|
||
}
|
||
|
||
@override
|
||
String get losSelectedObstructionTitle =>
|
||
'Выбранный объект, препятствующий движению';
|
||
|
||
@override
|
||
String losSelectedObstructionDetails(
|
||
String obstruction,
|
||
String heightUnit,
|
||
String distanceFromA,
|
||
String distanceUnit,
|
||
String distanceFromB,
|
||
) {
|
||
return 'Blocked by $obstruction $heightUnit, $distanceFromA from A and $distanceFromB from B ($distanceUnit).';
|
||
}
|
||
|
||
@override
|
||
String get losFrequencyLabel => 'Частота';
|
||
|
||
@override
|
||
String get losFrequencyInfoTooltip => 'Просмотреть детали расчёта';
|
||
|
||
@override
|
||
String get losFrequencyDialogTitle => 'Расчёт радиогоризонта';
|
||
|
||
@override
|
||
String losFrequencyDialogDescription(
|
||
double baselineK,
|
||
double baselineFreq,
|
||
double frequencyMHz,
|
||
double kFactor,
|
||
) {
|
||
return 'Начиная с k=$baselineK на частоте $baselineFreq МГц, расчет корректирует коэффициент k для текущего диапазона $frequencyMHz МГц, который определяет изогнутую границу радиогоризонта.';
|
||
}
|
||
|
||
@override
|
||
String get contacts_pathTrace => 'Трассировка пути';
|
||
|
||
@override
|
||
String get contacts_ping => 'Пинговать';
|
||
|
||
@override
|
||
String get contacts_repeaterPathTrace => 'Отследить путь к ретранслятору';
|
||
|
||
@override
|
||
String get contacts_repeaterPing => 'Пинговать повторитель';
|
||
|
||
@override
|
||
String get contacts_roomPathTrace => 'Трассировка пути к серверу комнаты';
|
||
|
||
@override
|
||
String get contacts_roomPing => 'Пинговать сервер комнаты';
|
||
|
||
@override
|
||
String get contacts_chatTraceRoute => 'Трассировка маршрута';
|
||
|
||
@override
|
||
String contacts_pathTraceTo(String name) {
|
||
return 'Показать маршрут к $name';
|
||
}
|
||
|
||
@override
|
||
String get contacts_clipboardEmpty => 'Буфер обмена пуст.';
|
||
|
||
@override
|
||
String get contacts_invalidAdvertFormat =>
|
||
'Недействительные контактные данные';
|
||
|
||
@override
|
||
String get contacts_contactImported => 'Контакт был импортирован';
|
||
|
||
@override
|
||
String get contacts_contactImportFailed => 'Контакт не удалось импортировать';
|
||
|
||
@override
|
||
String get contacts_zeroHopAdvert => 'Реклама Zero Hop';
|
||
|
||
@override
|
||
String get contacts_floodAdvert => 'Рекламный поток';
|
||
|
||
@override
|
||
String get contacts_copyAdvertToClipboard =>
|
||
'Копировать рекламу в буфер обмена';
|
||
|
||
@override
|
||
String get contacts_addContactFromClipboard =>
|
||
'Добавить контакт из буфера обмена';
|
||
|
||
@override
|
||
String get contacts_ShareContact => 'Копировать контакт в буфер обмена';
|
||
|
||
@override
|
||
String get contacts_ShareContactZeroHop =>
|
||
'Поделиться контактом по объявлению';
|
||
|
||
@override
|
||
String get contacts_zeroHopContactAdvertSent =>
|
||
'Отправлено сообщение по объявлению.';
|
||
|
||
@override
|
||
String get contacts_zeroHopContactAdvertFailed =>
|
||
'Не удалось отправить контакт.';
|
||
|
||
@override
|
||
String get contacts_contactAdvertCopied =>
|
||
'Реклама скопирована в буфер обмена.';
|
||
|
||
@override
|
||
String get contacts_contactAdvertCopyFailed =>
|
||
'Копирование рекламы в буфер обмена не удалось.';
|
||
|
||
@override
|
||
String get notification_activityTitle => 'Активность MeshCore';
|
||
|
||
@override
|
||
String notification_messagesCount(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: 'сообщений',
|
||
many: 'сообщений',
|
||
few: 'сообщения',
|
||
one: 'сообщение',
|
||
);
|
||
return '$count $_temp0';
|
||
}
|
||
|
||
@override
|
||
String notification_channelMessagesCount(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: 'сообщений канала',
|
||
many: 'сообщений канала',
|
||
few: 'сообщения канала',
|
||
one: 'сообщение канала',
|
||
);
|
||
return '$count $_temp0';
|
||
}
|
||
|
||
@override
|
||
String notification_newNodesCount(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: 'новых узлов',
|
||
many: 'новых узлов',
|
||
few: 'новых узла',
|
||
one: 'новый узел',
|
||
);
|
||
return '$count $_temp0';
|
||
}
|
||
|
||
@override
|
||
String notification_newTypeDiscovered(String contactType) {
|
||
return 'Обнаружен новый $contactType';
|
||
}
|
||
|
||
@override
|
||
String get notification_receivedNewMessage => 'Получено новое сообщение';
|
||
|
||
@override
|
||
String get settings_gpxExportRepeaters =>
|
||
'Экспортировать рипитеры / сервер комнаты в GPX';
|
||
|
||
@override
|
||
String get settings_gpxExportRepeatersSubtitle =>
|
||
'Экспортирует ретрансляторы / сервер комнат с местоположением в файл GPX.';
|
||
|
||
@override
|
||
String get settings_gpxExportContacts => 'Экспортировать спутников в GPX';
|
||
|
||
@override
|
||
String get settings_gpxExportContactsSubtitle =>
|
||
'Экспортирует спутников с местоположением в файл GPX.';
|
||
|
||
@override
|
||
String get settings_gpxExportAll => 'Экспортировать все контакты в GPX';
|
||
|
||
@override
|
||
String get settings_gpxExportAllSubtitle =>
|
||
'Экспортирует все контакты с местоположением в файл GPX.';
|
||
|
||
@override
|
||
String get settings_gpxExportSuccess => 'Успешно экспортирован файл GPX.';
|
||
|
||
@override
|
||
String get settings_gpxExportNoContacts => 'Нет контактов для экспорта.';
|
||
|
||
@override
|
||
String get settings_gpxExportNotAvailable =>
|
||
'Не поддерживается на вашем устройстве/ОС';
|
||
|
||
@override
|
||
String get settings_gpxExportError => 'Произошла ошибка при экспорте.';
|
||
|
||
@override
|
||
String get settings_gpxExportRepeatersRoom =>
|
||
'Местоположения повторителей и серверов комнат';
|
||
|
||
@override
|
||
String get settings_gpxExportChat => 'Местоположения спутников';
|
||
|
||
@override
|
||
String get settings_gpxExportAllContacts => 'Все местоположения контактов';
|
||
|
||
@override
|
||
String get settings_gpxExportShareText =>
|
||
'Данные карты экспортированы из meshcore-open';
|
||
|
||
@override
|
||
String get settings_gpxExportShareSubject =>
|
||
'meshcore-open экспорт данных карты GPX';
|
||
|
||
@override
|
||
String get snrIndicator_nearByRepeaters => 'Ближайшие ретрансляторы';
|
||
|
||
@override
|
||
String get snrIndicator_lastSeen => 'Последний раз видели';
|
||
|
||
@override
|
||
String get contactsSettings_title => 'Настройки контактов';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddTitle => 'Автоматическое обнаружение';
|
||
|
||
@override
|
||
String get contactsSettings_otherTitle =>
|
||
'Другие настройки, связанные с контактами';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddUsersTitle =>
|
||
'Автоматически добавлять пользователей';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddUsersSubtitle =>
|
||
'Разрешить компаньону автоматически добавлять обнаруженных пользователей';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddRepeatersTitle =>
|
||
'Автоматически добавлять ретрансляторы';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddRepeatersSubtitle =>
|
||
'Разрешить спутнику автоматически добавлять обнаруженные ретрансляторы';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddRoomServersTitle =>
|
||
'Автоматически добавлять серверы комнат';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddRoomServersSubtitle =>
|
||
'Разрешить компаньону автоматически добавлять обнаруженные сервера комнат.';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddSensorsTitle =>
|
||
'Автоматически добавлять датчики';
|
||
|
||
@override
|
||
String get contactsSettings_autoAddSensorsSubtitle =>
|
||
'Разрешить компаньону автоматически добавлять обнаруженные датчики';
|
||
|
||
@override
|
||
String get contactsSettings_overwriteOldestTitle =>
|
||
'Перезаписать самое старое';
|
||
|
||
@override
|
||
String get contactsSettings_overwriteOldestSubtitle =>
|
||
'Когда список контактов заполнен, будет заменен самый старый контакт, который не находится в избранном.';
|
||
|
||
@override
|
||
String get discoveredContacts_Title => 'Обнаруженные контакты';
|
||
|
||
@override
|
||
String get discoveredContacts_noMatching => 'Нет совпадающих контактов';
|
||
|
||
@override
|
||
String get discoveredContacts_searchHint => 'Найденные контакты поиска';
|
||
|
||
@override
|
||
String get discoveredContacts_contactAdded => 'Контакт добавлен';
|
||
|
||
@override
|
||
String get discoveredContacts_addContact => 'Добавить контакт';
|
||
|
||
@override
|
||
String get discoveredContacts_copyContact =>
|
||
'Копировать контакт в буфер обмена';
|
||
|
||
@override
|
||
String get discoveredContacts_deleteContact => 'Удалить контакт';
|
||
|
||
@override
|
||
String get discoveredContacts_deleteContactAll =>
|
||
'Удалить Все Обнаруженные Контакты';
|
||
|
||
@override
|
||
String get discoveredContacts_deleteContactAllContent =>
|
||
'Вы уверены, что хотите удалить все обнаруженные контакты?';
|
||
|
||
@override
|
||
String get chat_sendCooldown =>
|
||
'Пожалуйста, подождите немного, прежде чем отправлять сообщение снова.';
|
||
|
||
@override
|
||
String get appSettings_jumpToOldestUnread =>
|
||
'Перейти к самому старому непрочитанному сообщению';
|
||
|
||
@override
|
||
String get appSettings_jumpToOldestUnreadSubtitle =>
|
||
'При открытии чата с непрочитанными сообщениями, прокрутите страницу, чтобы увидеть первое непрочитанное сообщение, а не последнее.';
|
||
|
||
@override
|
||
String get appSettings_languageHu => 'Венгерский';
|
||
|
||
@override
|
||
String get appSettings_languageJa => 'Японский';
|
||
|
||
@override
|
||
String get appSettings_languageKo => 'Корейский';
|
||
|
||
@override
|
||
String get radioStats_tooltip => 'Статистика радио и беспроводной сети';
|
||
|
||
@override
|
||
String get radioStats_screenTitle => 'Статистика радиовещания';
|
||
|
||
@override
|
||
String get radioStats_notConnected =>
|
||
'Подключитесь к устройству, чтобы просмотреть статистику радио.';
|
||
|
||
@override
|
||
String get radioStats_firmwareTooOld =>
|
||
'Для работы радиостатистики требуется установленная версия прошивки v8 или более новая.';
|
||
|
||
@override
|
||
String get radioStats_waiting => 'Ожидаем данных…';
|
||
|
||
@override
|
||
String radioStats_noiseFloor(int noiseDbm) {
|
||
return 'Уровень шума: $noiseDbm дБм';
|
||
}
|
||
|
||
@override
|
||
String radioStats_lastRssi(int rssiDbm) {
|
||
return 'Последнее значение RSSI: $rssiDbm дБм';
|
||
}
|
||
|
||
@override
|
||
String radioStats_lastSnr(String snr) {
|
||
return 'Последнее значение SNR: $snr дБ';
|
||
}
|
||
|
||
@override
|
||
String radioStats_txAir(int seconds) {
|
||
return 'Время эфира на телеканале TX (общее): $seconds секунд';
|
||
}
|
||
|
||
@override
|
||
String radioStats_rxAir(int seconds) {
|
||
return 'Общее время использования RX (в секундах): $seconds с';
|
||
}
|
||
|
||
@override
|
||
String get radioStats_chartCaption =>
|
||
'Уровень шума (дБм) на основе последних измерений.';
|
||
|
||
@override
|
||
String radioStats_stripNoise(int noiseDbm) {
|
||
return 'Уровень шума: $noiseDbm дБм';
|
||
}
|
||
|
||
@override
|
||
String get radioStats_stripWaiting => 'Получение данных о радио…';
|
||
|
||
@override
|
||
String get radioStats_settingsTile => 'Статистика радиовещания';
|
||
|
||
@override
|
||
String get radioStats_settingsSubtitle =>
|
||
'Уровень шума, RSSI, SNR и время передачи';
|
||
|
||
@override
|
||
String get translation_title => 'Перевод';
|
||
|
||
@override
|
||
String get translation_enableTitle => 'Включить перевод';
|
||
|
||
@override
|
||
String get translation_enableSubtitle =>
|
||
'Переводить входящие сообщения и позволять предварительный перевод перед отправкой.';
|
||
|
||
@override
|
||
String get translation_composerTitle => 'Переводить перед отправкой';
|
||
|
||
@override
|
||
String get translation_composerSubtitle =>
|
||
'Управляет исходным состоянием значка перевода, предоставляемого редактором.';
|
||
|
||
@override
|
||
String get translation_autoIncomingTitle =>
|
||
'Автоматически переводить сообщения';
|
||
|
||
@override
|
||
String get translation_autoIncomingSubtitle =>
|
||
'Автоматически переводит сообщения для уведомлений, а также для чатов и каналов.';
|
||
|
||
@override
|
||
String get translation_translateMessage => 'Перевести сообщение';
|
||
|
||
@override
|
||
String get translation_targetLanguage => 'Целевой язык';
|
||
|
||
@override
|
||
String get translation_useAppLanguage => 'Используйте язык приложения';
|
||
|
||
@override
|
||
String get translation_downloadedModelLabel => 'Загруженная модель';
|
||
|
||
@override
|
||
String get translation_presetModelLabel =>
|
||
'Предопределенная модель от Hugging Face';
|
||
|
||
@override
|
||
String get translation_manualUrlLabel => 'Ссылка на руководство';
|
||
|
||
@override
|
||
String get translation_downloadModel => 'Скачать модель';
|
||
|
||
@override
|
||
String get translation_downloading => 'Загрузка...';
|
||
|
||
@override
|
||
String get translation_working => 'Работа...';
|
||
|
||
@override
|
||
String get translation_stop => 'Прекратите';
|
||
|
||
@override
|
||
String get translation_mergingChunks =>
|
||
'Объединение скачанных фрагментов в один финальный файл...';
|
||
|
||
@override
|
||
String get translation_downloadedModels => 'Загруженные модели';
|
||
|
||
@override
|
||
String get translation_deleteModel => 'Удалить модель';
|
||
|
||
@override
|
||
String get translation_modelDownloaded => 'Модель перевода загружена.';
|
||
|
||
@override
|
||
String get translation_downloadStopped => 'Процесс загрузки был прерван.';
|
||
|
||
@override
|
||
String translation_downloadFailed(String error) {
|
||
return 'Не удалось скачать: $error';
|
||
}
|
||
|
||
@override
|
||
String get translation_enterUrlFirst => 'Сначала введите URL модели.';
|
||
|
||
@override
|
||
String get scanner_linuxPairingShowPin => 'Показать PIN';
|
||
|
||
@override
|
||
String get scanner_linuxPairingHidePin => 'Скрыть PIN';
|
||
|
||
@override
|
||
String get scanner_linuxPairingPinTitle => 'PIN‑код сопряжения Bluetooth';
|
||
|
||
@override
|
||
String scanner_linuxPairingPinPrompt(String deviceName) {
|
||
return 'Введите PIN‑код для $deviceName (оставьте пустым, если нет).';
|
||
}
|
||
|
||
@override
|
||
String get translation_messageTranslation => 'Перевод сообщения';
|
||
|
||
@override
|
||
String get translation_translateBeforeSending => 'Перевести перед отправкой';
|
||
|
||
@override
|
||
String get translation_composerEnabledHint =>
|
||
'Сообщения будут переведены перед отправкой.';
|
||
|
||
@override
|
||
String get translation_composerDisabledHint =>
|
||
'Отправляйте сообщения на языке, в котором они были изначально набраны.';
|
||
|
||
@override
|
||
String translation_translateTo(String language) {
|
||
return 'Перевести на $language';
|
||
}
|
||
|
||
@override
|
||
String get translation_translationOptions => 'Варианты перевода';
|
||
|
||
@override
|
||
String get translation_systemLanguage => 'Язык системы';
|
||
|
||
@override
|
||
String get background_serviceTitle => 'MeshCore работает';
|
||
|
||
@override
|
||
String get background_serviceText => 'Поддерживает BLE-соединение';
|
||
|
||
@override
|
||
String appSettings_translationModelDeleted(String name) {
|
||
return 'Удалено $name';
|
||
}
|
||
|
||
@override
|
||
String appSettings_translationModelDeleteFailed(String error) {
|
||
return 'Не удалось удалить: $error';
|
||
}
|
||
|
||
@override
|
||
String channels_channelUpdateFailed(String error) {
|
||
return 'Не удалось обновить канал: $error';
|
||
}
|
||
|
||
@override
|
||
String get contact_typeChat => 'Чат';
|
||
|
||
@override
|
||
String get contact_typeRepeater => 'Ретранслятор';
|
||
|
||
@override
|
||
String get contact_typeRoom => 'Комната';
|
||
|
||
@override
|
||
String get contact_typeSensor => 'Датчик';
|
||
|
||
@override
|
||
String get contact_typeUnknown => 'Неизвестно';
|
||
|
||
@override
|
||
String get map_zoomIn => 'Увеличить масштаб';
|
||
|
||
@override
|
||
String get map_zoomOut => 'Увеличить масштаб';
|
||
|
||
@override
|
||
String get map_centerMap => 'Карта центра';
|
||
|
||
@override
|
||
String get chrome_bluetoothRequiresChromium =>
|
||
'Для работы Web Bluetooth требуется браузер на основе Chromium.';
|
||
|
||
@override
|
||
String channels_communityShortId(String id) {
|
||
return 'Идентификатор: $id...';
|
||
}
|
||
|
||
@override
|
||
String get pathTrace_legendGpsConfirmed => 'GPS подтверждено';
|
||
|
||
@override
|
||
String get pathTrace_legendInferred => 'Выведенная позиция';
|
||
|
||
@override
|
||
String get pathMap_viewSingle => 'Одиночный';
|
||
|
||
@override
|
||
String get pathMap_viewCombined => 'Объединённые';
|
||
|
||
@override
|
||
String get pathMap_play => 'Воспроизвести';
|
||
|
||
@override
|
||
String get pathMap_pause => 'Пауза';
|
||
|
||
@override
|
||
String get pathMap_replay => 'Повтор';
|
||
|
||
@override
|
||
String get pathMap_stepBack => 'Предыдущий хоп';
|
||
|
||
@override
|
||
String get pathMap_stepForward => 'Следующий хоп';
|
||
|
||
@override
|
||
String get pathMap_animationOn => 'Показать анимацию пакета';
|
||
|
||
@override
|
||
String get pathMap_animationOff => 'Скрыть анимацию пакета';
|
||
|
||
@override
|
||
String pathMap_hopOf(int current, int total) {
|
||
return 'Хоп $current из $total';
|
||
}
|
||
|
||
@override
|
||
String pathMap_observedPaths(int count) {
|
||
return 'Наблюдаемые маршруты: $count';
|
||
}
|
||
|
||
@override
|
||
String get pathMap_primary => 'Основной';
|
||
|
||
@override
|
||
String pathMap_alternate(int index) {
|
||
return 'Альт $index';
|
||
}
|
||
|
||
@override
|
||
String pathMap_hopCount(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count хопов',
|
||
many: '$count хопов',
|
||
few: '$count хопа',
|
||
one: '$count хоп',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String pathMap_gpsCount(int confirmed, int total) {
|
||
return '$confirmed/$total GPS';
|
||
}
|
||
|
||
@override
|
||
String get pathMap_legendShared => 'Общий сегмент';
|
||
|
||
@override
|
||
String get pathMap_legendEstimated => 'Расчётный сегмент';
|
||
|
||
@override
|
||
String pathMap_sharedNodeCount(int count) {
|
||
return 'Используется в $count маршрутах';
|
||
}
|
||
|
||
@override
|
||
String pathMap_partialAnimation(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count хопов не имеют координат — показанный путь неполный',
|
||
many: '$count хопов не имеют координат — показанный путь неполный',
|
||
few: '$count хопа не имеют координат — показанный путь неполный',
|
||
one: '$count хоп не имеет координат — показанный путь неполный',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String get pathMap_showAllPaths => 'Показать всё';
|
||
|
||
@override
|
||
String get pathMap_hidePath => 'Скрыть путь';
|
||
|
||
@override
|
||
String get pathMap_showPath => 'Показать маршрут';
|
||
|
||
@override
|
||
String get pathMap_collapsePanel => 'Скрыть панель';
|
||
|
||
@override
|
||
String get pathMap_expandPanel => 'Расширить панель';
|
||
|
||
@override
|
||
String get pathMap_noLocation => 'Нет координат';
|
||
|
||
@override
|
||
String get pathMap_followPacket => 'Следить за пакетом';
|
||
|
||
@override
|
||
String get pathMap_unfollowPacket => 'Не следить за пакетом';
|
||
}
|