mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
2349 lines
69 KiB
Dart
2349 lines
69 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 SAR';
|
||
|
||
@override
|
||
String get messages => 'Сообщения';
|
||
|
||
@override
|
||
String get contacts => 'Контакты';
|
||
|
||
@override
|
||
String get map => 'Карта';
|
||
|
||
@override
|
||
String get settings => 'Настройки';
|
||
|
||
@override
|
||
String get connect => 'Подключить';
|
||
|
||
@override
|
||
String get disconnect => 'Отключить';
|
||
|
||
@override
|
||
String get scanningForDevices => 'Поиск устройств...';
|
||
|
||
@override
|
||
String get noDevicesFound => 'Устройства не найдены';
|
||
|
||
@override
|
||
String get scanAgain => 'Повторить поиск';
|
||
|
||
@override
|
||
String get tapToConnect => 'Нажмите для подключения';
|
||
|
||
@override
|
||
String get deviceNotConnected => 'Устройство не подключено';
|
||
|
||
@override
|
||
String get locationPermissionDenied => 'Доступ к геолокации запрещён';
|
||
|
||
@override
|
||
String get locationPermissionPermanentlyDenied =>
|
||
'Доступ к геолокации запрещён навсегда. Включите его в настройках.';
|
||
|
||
@override
|
||
String get locationPermissionRequired =>
|
||
'Доступ к геолокации необходим для GPS-трекинга и координации команды. Вы можете включить его позже в настройках.';
|
||
|
||
@override
|
||
String get locationServicesDisabled =>
|
||
'Службы геолокации отключены. Пожалуйста, включите их в настройках.';
|
||
|
||
@override
|
||
String get failedToGetGpsLocation => 'Не удалось получить GPS-координаты';
|
||
|
||
@override
|
||
String advertisedAtLocation(String latitude, String longitude) {
|
||
return 'Транслируется в $latitude, $longitude';
|
||
}
|
||
|
||
@override
|
||
String failedToAdvertise(String error) {
|
||
return 'Ошибка трансляции: $error';
|
||
}
|
||
|
||
@override
|
||
String reconnecting(int attempt, int max) {
|
||
return 'Переподключение... ($attempt/$max)';
|
||
}
|
||
|
||
@override
|
||
String get cancelReconnection => 'Отменить переподключение';
|
||
|
||
@override
|
||
String get mapManagement => 'Управление картой';
|
||
|
||
@override
|
||
String get general => 'Основные';
|
||
|
||
@override
|
||
String get theme => 'Тема';
|
||
|
||
@override
|
||
String get chooseTheme => 'Выбрать тему';
|
||
|
||
@override
|
||
String get light => 'Светлая';
|
||
|
||
@override
|
||
String get dark => 'Тёмная';
|
||
|
||
@override
|
||
String get blueLightTheme => 'Синяя светлая тема';
|
||
|
||
@override
|
||
String get blueDarkTheme => 'Синяя тёмная тема';
|
||
|
||
@override
|
||
String get sarRed => 'SAR Красная';
|
||
|
||
@override
|
||
String get alertEmergencyMode => 'Режим тревоги / ЧС';
|
||
|
||
@override
|
||
String get sarGreen => 'SAR Зелёная';
|
||
|
||
@override
|
||
String get safeAllClearMode => 'Режим «Всё в порядке»';
|
||
|
||
@override
|
||
String get autoSystem => 'Авто (Система)';
|
||
|
||
@override
|
||
String get followSystemTheme => 'Следовать системной теме';
|
||
|
||
@override
|
||
String get showRxTxIndicators => 'Показывать индикаторы RX/TX';
|
||
|
||
@override
|
||
String get displayPacketActivity =>
|
||
'Отображать активность пакетов в верхней панели';
|
||
|
||
@override
|
||
String get simpleMode => 'Простой режим';
|
||
|
||
@override
|
||
String get simpleModeDescription =>
|
||
'Скрыть второстепенную информацию в сообщениях и контактах';
|
||
|
||
@override
|
||
String get disableMap => 'Отключить карту';
|
||
|
||
@override
|
||
String get disableMapDescription =>
|
||
'Скрыть вкладку карты для экономии заряда батареи';
|
||
|
||
@override
|
||
String get language => 'Язык';
|
||
|
||
@override
|
||
String get chooseLanguage => 'Выбрать язык';
|
||
|
||
@override
|
||
String get english => 'Английский';
|
||
|
||
@override
|
||
String get slovenian => 'Словенский';
|
||
|
||
@override
|
||
String get croatian => 'Хорватский';
|
||
|
||
@override
|
||
String get german => 'Немецкий';
|
||
|
||
@override
|
||
String get spanish => 'Испанский';
|
||
|
||
@override
|
||
String get french => 'Французский';
|
||
|
||
@override
|
||
String get italian => 'Итальянский';
|
||
|
||
@override
|
||
String get locationBroadcasting => 'Трансляция местоположения';
|
||
|
||
@override
|
||
String get autoLocationTracking => 'Авто-отслеживание геолокации';
|
||
|
||
@override
|
||
String get automaticallyBroadcastPosition =>
|
||
'Автоматически транслировать обновления позиции';
|
||
|
||
@override
|
||
String get configureTracking => 'Настроить отслеживание';
|
||
|
||
@override
|
||
String get distanceAndTimeThresholds => 'Пороги расстояния и времени';
|
||
|
||
@override
|
||
String get locationTrackingConfiguration =>
|
||
'Настройка отслеживания геолокации';
|
||
|
||
@override
|
||
String get configureWhenLocationBroadcasts =>
|
||
'Настройте условия отправки обновлений геолокации в mesh-сеть';
|
||
|
||
@override
|
||
String get minimumDistance => 'Минимальное расстояние';
|
||
|
||
@override
|
||
String broadcastAfterMoving(String distance) {
|
||
return 'Транслировать только после перемещения на $distance м';
|
||
}
|
||
|
||
@override
|
||
String get maximumDistance => 'Максимальное расстояние';
|
||
|
||
@override
|
||
String alwaysBroadcastAfterMoving(String distance) {
|
||
return 'Всегда транслировать после перемещения на $distance м';
|
||
}
|
||
|
||
@override
|
||
String get minimumTimeInterval => 'Минимальный интервал времени';
|
||
|
||
@override
|
||
String alwaysBroadcastEvery(String duration) {
|
||
return 'Всегда транслировать каждые $duration';
|
||
}
|
||
|
||
@override
|
||
String get save => 'Сохранить';
|
||
|
||
@override
|
||
String get cancel => 'Отмена';
|
||
|
||
@override
|
||
String get close => 'Закрыть';
|
||
|
||
@override
|
||
String get about => 'О приложении';
|
||
|
||
@override
|
||
String get appVersion => 'Версия приложения';
|
||
|
||
@override
|
||
String get appName => 'Название приложения';
|
||
|
||
@override
|
||
String get aboutMeshCoreSar => 'О MeshCore SAR';
|
||
|
||
@override
|
||
String get aboutDescription =>
|
||
'Приложение для поисково-спасательных операций, разработанное для аварийно-спасательных служб. Возможности:\n\n• BLE mesh-сеть для связи между устройствами\n• Офлайн-карты с несколькими вариантами слоёв\n• Отслеживание членов команды в реальном времени\n• Тактические маркеры SAR (найденный человек, пожар, место сбора)\n• Управление контактами и обмен сообщениями\n• GPS-трекинг с показанием курса компаса\n• Кэширование тайлов карт для работы офлайн';
|
||
|
||
@override
|
||
String get technologiesUsed => 'Используемые технологии:';
|
||
|
||
@override
|
||
String get technologiesList =>
|
||
'• Flutter для кросс-платформенной разработки\n• BLE (Bluetooth Low Energy) для mesh-сети\n• OpenStreetMap для карт\n• Provider для управления состоянием\n• SharedPreferences для локального хранилища';
|
||
|
||
@override
|
||
String get moreInfo => 'Подробнее';
|
||
|
||
@override
|
||
String get learnMoreAbout => 'Узнать больше о MeshCore SAR';
|
||
|
||
@override
|
||
String get developer => 'Разработчик';
|
||
|
||
@override
|
||
String get packageName => 'Имя пакета';
|
||
|
||
@override
|
||
String get sampleData => 'Тестовые данные';
|
||
|
||
@override
|
||
String get sampleDataDescription =>
|
||
'Загрузить или очистить тестовые контакты, сообщения каналов и маркеры SAR';
|
||
|
||
@override
|
||
String get loadSampleData => 'Загрузить тестовые данные';
|
||
|
||
@override
|
||
String get clearAllData => 'Очистить все данные';
|
||
|
||
@override
|
||
String get clearAllDataConfirmTitle => 'Очистить все данные';
|
||
|
||
@override
|
||
String get clearAllDataConfirmMessage =>
|
||
'Это удалит все контакты и маркеры SAR. Вы уверены?';
|
||
|
||
@override
|
||
String get clear => 'Очистить';
|
||
|
||
@override
|
||
String loadedSampleData(
|
||
int teamCount,
|
||
int channelCount,
|
||
int sarCount,
|
||
int messageCount,
|
||
) {
|
||
return 'Загружено: $teamCount членов команды, $channelCount каналов, $sarCount маркеров SAR, $messageCount сообщений';
|
||
}
|
||
|
||
@override
|
||
String failedToLoadSampleData(String error) {
|
||
return 'Не удалось загрузить тестовые данные: $error';
|
||
}
|
||
|
||
@override
|
||
String get allDataCleared => 'Все данные очищены';
|
||
|
||
@override
|
||
String get failedToStartBackgroundTracking =>
|
||
'Не удалось запустить фоновое отслеживание. Проверьте разрешения и BLE-соединение.';
|
||
|
||
@override
|
||
String locationBroadcast(String latitude, String longitude) {
|
||
return 'Трансляция геолокации: $latitude, $longitude';
|
||
}
|
||
|
||
@override
|
||
String get defaultPinInfo =>
|
||
'PIN-код по умолчанию для устройств без экрана — 123456. Проблемы с сопряжением? Удалите устройство из Bluetooth в системных настройках.';
|
||
|
||
@override
|
||
String get noMessagesYet => 'Сообщений пока нет';
|
||
|
||
@override
|
||
String get pullDownToSync => 'Потяните вниз для синхронизации сообщений';
|
||
|
||
@override
|
||
String get deleteContact => 'Удалить контакт';
|
||
|
||
@override
|
||
String get delete => 'Удалить';
|
||
|
||
@override
|
||
String get viewOnMap => 'Показать на карте';
|
||
|
||
@override
|
||
String get refresh => 'Обновить';
|
||
|
||
@override
|
||
String get sendDirectMessage => 'Отправить';
|
||
|
||
@override
|
||
String get resetPath => 'Сбросить маршрут (перепроложить)';
|
||
|
||
@override
|
||
String get publicKeyCopied => 'Публичный ключ скопирован в буфер обмена';
|
||
|
||
@override
|
||
String copiedToClipboard(String label) {
|
||
return '$label скопировано в буфер обмена';
|
||
}
|
||
|
||
@override
|
||
String get pleaseEnterPassword => 'Пожалуйста, введите пароль';
|
||
|
||
@override
|
||
String failedToSyncContacts(String error) {
|
||
return 'Не удалось синхронизировать контакты: $error';
|
||
}
|
||
|
||
@override
|
||
String get loggedInSuccessfully =>
|
||
'Вход выполнен! Ожидание сообщений комнаты...';
|
||
|
||
@override
|
||
String get loginFailed => 'Ошибка входа — неверный пароль';
|
||
|
||
@override
|
||
String loggingIn(String roomName) {
|
||
return 'Вход в $roomName...';
|
||
}
|
||
|
||
@override
|
||
String failedToSendLogin(String error) {
|
||
return 'Не удалось отправить данные входа: $error';
|
||
}
|
||
|
||
@override
|
||
String get lowLocationAccuracy => 'Низкая точность геолокации';
|
||
|
||
@override
|
||
String get continue_ => 'Продолжить';
|
||
|
||
@override
|
||
String get sendSarMarker => 'Отправить маркер SAR';
|
||
|
||
@override
|
||
String get deleteDrawing => 'Удалить рисунок';
|
||
|
||
@override
|
||
String get drawingTools => 'Инструменты рисования';
|
||
|
||
@override
|
||
String get drawLine => 'Нарисовать линию';
|
||
|
||
@override
|
||
String get drawLineDesc => 'Нарисуйте произвольную линию на карте';
|
||
|
||
@override
|
||
String get drawRectangle => 'Нарисовать прямоугольник';
|
||
|
||
@override
|
||
String get drawRectangleDesc => 'Нарисуйте прямоугольную область на карте';
|
||
|
||
@override
|
||
String get measureDistance => 'Измерить расстояние';
|
||
|
||
@override
|
||
String get measureDistanceDesc => 'Долгое нажатие на две точки для измерения';
|
||
|
||
@override
|
||
String get clearMeasurement => 'Сбросить измерение';
|
||
|
||
@override
|
||
String distanceLabel(String distance) {
|
||
return 'Расстояние: $distance';
|
||
}
|
||
|
||
@override
|
||
String get longPressForSecondPoint => 'Долгое нажатие для второй точки';
|
||
|
||
@override
|
||
String get longPressToStartMeasurement =>
|
||
'Долгое нажатие для установки первой точки';
|
||
|
||
@override
|
||
String get longPressToStartNewMeasurement =>
|
||
'Долгое нажатие для начала нового измерения';
|
||
|
||
@override
|
||
String get shareDrawings => 'Поделиться рисунками';
|
||
|
||
@override
|
||
String get clearAllDrawings => 'Удалить все рисунки';
|
||
|
||
@override
|
||
String get completeLine => 'Завершить линию';
|
||
|
||
@override
|
||
String broadcastDrawingsToTeam(int count, String plural) {
|
||
return 'Транслировать $count рисун$plural команде';
|
||
}
|
||
|
||
@override
|
||
String removeAllDrawings(int count, String plural) {
|
||
return 'Удалить все $count рисун$plural';
|
||
}
|
||
|
||
@override
|
||
String deleteAllDrawingsConfirm(int count, String plural) {
|
||
return 'Удалить все $count рисун$plural с карты?';
|
||
}
|
||
|
||
@override
|
||
String get drawing => 'Рисунок';
|
||
|
||
@override
|
||
String shareDrawingsCount(int count, String plural) {
|
||
return 'Поделиться $count рисун$plural';
|
||
}
|
||
|
||
@override
|
||
String sentDrawingsToRoom(int count, String plural, String roomName) {
|
||
return 'Отправлено $count рисун$plural в $roomName';
|
||
}
|
||
|
||
@override
|
||
String sharedDrawingsToRoom(
|
||
int success,
|
||
int total,
|
||
String plural,
|
||
String roomName,
|
||
) {
|
||
return 'Передано $success/$total рисун$plural в $roomName';
|
||
}
|
||
|
||
@override
|
||
String get showReceivedDrawings => 'Показать полученные рисунки';
|
||
|
||
@override
|
||
String get showingAllDrawings => 'Показаны все рисунки';
|
||
|
||
@override
|
||
String get showingOnlyYourDrawings => 'Показаны только ваши рисунки';
|
||
|
||
@override
|
||
String get showSarMarkers => 'Показать маркеры SAR';
|
||
|
||
@override
|
||
String get showingSarMarkers => 'Маркеры SAR отображаются';
|
||
|
||
@override
|
||
String get hidingSarMarkers => 'Маркеры SAR скрыты';
|
||
|
||
@override
|
||
String get clearAll => 'Очистить всё';
|
||
|
||
@override
|
||
String get noLocalDrawings => 'Нет локальных рисунков для отправки';
|
||
|
||
@override
|
||
String get publicChannel => 'Публичный канал';
|
||
|
||
@override
|
||
String get broadcastToAll => 'Трансляция всем ближайшим узлам (временно)';
|
||
|
||
@override
|
||
String get storedPermanently => 'Сохранено постоянно в комнате';
|
||
|
||
@override
|
||
String drawingsSentToPublicChannel(int count, String plural) {
|
||
return 'Отправлено $count рисун$plural в публичный канал';
|
||
}
|
||
|
||
@override
|
||
String drawingsSharedToPublicChannel(int success, int total) {
|
||
return 'Передано $success/$total рисунков в публичный канал';
|
||
}
|
||
|
||
@override
|
||
String get notConnectedToDevice => 'Устройство не подключено';
|
||
|
||
@override
|
||
String get directMessage => 'Личное сообщение';
|
||
|
||
@override
|
||
String directMessageSentTo(String contactName) {
|
||
return 'Личное сообщение отправлено $contactName';
|
||
}
|
||
|
||
@override
|
||
String failedToSend(String error) {
|
||
return 'Не удалось отправить: $error';
|
||
}
|
||
|
||
@override
|
||
String directMessageInfo(String contactName) {
|
||
return 'Это сообщение будет отправлено напрямую $contactName. Оно также появится в общей ленте сообщений.';
|
||
}
|
||
|
||
@override
|
||
String get typeYourMessage => 'Введите сообщение...';
|
||
|
||
@override
|
||
String get quickLocationMarker => 'Быстрый маркер местоположения';
|
||
|
||
@override
|
||
String get markerType => 'Тип маркера';
|
||
|
||
@override
|
||
String get sendTo => 'Отправить в';
|
||
|
||
@override
|
||
String get noDestinationsAvailable => 'Нет доступных получателей.';
|
||
|
||
@override
|
||
String get selectDestination => 'Выберите получателя...';
|
||
|
||
@override
|
||
String get ephemeralBroadcastInfo =>
|
||
'Временно: передаётся по эфиру. Не сохраняется — узлы должны быть онлайн.';
|
||
|
||
@override
|
||
String get persistentRoomInfo =>
|
||
'Постоянно: хранится неизменно в комнате. Синхронизируется автоматически и доступно офлайн.';
|
||
|
||
@override
|
||
String get location => 'Местоположение';
|
||
|
||
@override
|
||
String get myLocation => 'Моё местоположение';
|
||
|
||
@override
|
||
String get fromMap => 'С карты';
|
||
|
||
@override
|
||
String get gettingLocation => 'Получение местоположения...';
|
||
|
||
@override
|
||
String get locationError => 'Ошибка геолокации';
|
||
|
||
@override
|
||
String get retry => 'Повторить';
|
||
|
||
@override
|
||
String get refreshLocation => 'Обновить местоположение';
|
||
|
||
@override
|
||
String accuracyMeters(int accuracy) {
|
||
return 'Точность: ±$accuracyм';
|
||
}
|
||
|
||
@override
|
||
String get notesOptional => 'Заметки (необязательно)';
|
||
|
||
@override
|
||
String get addAdditionalInformation =>
|
||
'Добавьте дополнительную информацию...';
|
||
|
||
@override
|
||
String lowAccuracyWarning(int accuracy) {
|
||
return 'Точность геолокации: ±$accuracyм. Этого может быть недостаточно для операций SAR.\n\nПродолжить всё равно?';
|
||
}
|
||
|
||
@override
|
||
String get loginToRoom => 'Войти в комнату';
|
||
|
||
@override
|
||
String get enterPasswordInfo =>
|
||
'Введите пароль для доступа к этой комнате. Пароль будет сохранён для дальнейшего использования.';
|
||
|
||
@override
|
||
String get password => 'Пароль';
|
||
|
||
@override
|
||
String get enterRoomPassword => 'Введите пароль комнаты';
|
||
|
||
@override
|
||
String get loggingInDots => 'Вход...';
|
||
|
||
@override
|
||
String get login => 'Войти';
|
||
|
||
@override
|
||
String failedToAddRoom(String error) {
|
||
return 'Не удалось добавить комнату на устройство: $error\n\nВозможно, комната ещё не объявила себя.\nПопробуйте подождать, пока комната не выйдет на связь.';
|
||
}
|
||
|
||
@override
|
||
String get direct => 'Напрямую';
|
||
|
||
@override
|
||
String get flood => 'Широковещательно';
|
||
|
||
@override
|
||
String get admin => 'Администратор';
|
||
|
||
@override
|
||
String get loggedIn => 'Вход выполнен';
|
||
|
||
@override
|
||
String get noGpsData => 'Нет данных GPS';
|
||
|
||
@override
|
||
String get distance => 'Расстояние';
|
||
|
||
@override
|
||
String pingingDirect(String name) {
|
||
return 'Пинг $name (напрямую по маршруту)...';
|
||
}
|
||
|
||
@override
|
||
String pingingFlood(String name) {
|
||
return 'Пинг $name (широковещательно — нет маршрута)...';
|
||
}
|
||
|
||
@override
|
||
String directPingTimeout(String name) {
|
||
return 'Таймаут прямого пинга — повтор $name широковещательно...';
|
||
}
|
||
|
||
@override
|
||
String pingSuccessful(String name, String fallback) {
|
||
return 'Пинг успешен: $name$fallback';
|
||
}
|
||
|
||
@override
|
||
String get viaFloodingFallback => ' (через широковещательный резерв)';
|
||
|
||
@override
|
||
String pingFailed(String name) {
|
||
return 'Пинг не удался: $name — ответ не получен';
|
||
}
|
||
|
||
@override
|
||
String deleteContactConfirmation(String name) {
|
||
return 'Вы уверены, что хотите удалить \"$name\"?\n\nЭто удалит контакт как из приложения, так и с сопряжённого радиоустройства.';
|
||
}
|
||
|
||
@override
|
||
String removingContact(String name) {
|
||
return 'Удаление $name...';
|
||
}
|
||
|
||
@override
|
||
String contactRemoved(String name) {
|
||
return 'Контакт \"$name\" удалён';
|
||
}
|
||
|
||
@override
|
||
String failedToRemoveContact(String error) {
|
||
return 'Не удалось удалить контакт: $error';
|
||
}
|
||
|
||
@override
|
||
String get type => 'Тип';
|
||
|
||
@override
|
||
String get publicKey => 'Публичный ключ';
|
||
|
||
@override
|
||
String get lastSeen => 'Последнее появление';
|
||
|
||
@override
|
||
String get roomStatus => 'Статус комнаты';
|
||
|
||
@override
|
||
String get loginStatus => 'Статус входа';
|
||
|
||
@override
|
||
String get notLoggedIn => 'Не выполнен вход';
|
||
|
||
@override
|
||
String get adminAccess => 'Доступ администратора';
|
||
|
||
@override
|
||
String get yes => 'Да';
|
||
|
||
@override
|
||
String get no => 'Нет';
|
||
|
||
@override
|
||
String get permissions => 'Разрешения';
|
||
|
||
@override
|
||
String get passwordSaved => 'Пароль сохранён';
|
||
|
||
@override
|
||
String get locationColon => 'Местоположение:';
|
||
|
||
@override
|
||
String get telemetry => 'Телеметрия';
|
||
|
||
@override
|
||
String requestingTelemetry(String name) {
|
||
return 'Запрос телеметрии от $name...';
|
||
}
|
||
|
||
@override
|
||
String get voltage => 'Напряжение';
|
||
|
||
@override
|
||
String get battery => 'Батарея';
|
||
|
||
@override
|
||
String get temperature => 'Температура';
|
||
|
||
@override
|
||
String get humidity => 'Влажность';
|
||
|
||
@override
|
||
String get pressure => 'Давление';
|
||
|
||
@override
|
||
String get gpsTelemetry => 'GPS (телеметрия)';
|
||
|
||
@override
|
||
String get updated => 'Обновлено';
|
||
|
||
@override
|
||
String pathResetInfo(String name) {
|
||
return 'Маршрут сброшен для $name. Следующее сообщение найдёт новый путь.';
|
||
}
|
||
|
||
@override
|
||
String get reLoginToRoom => 'Войти в комнату повторно';
|
||
|
||
@override
|
||
String get heading => 'Курс';
|
||
|
||
@override
|
||
String get elevation => 'Высота';
|
||
|
||
@override
|
||
String get accuracy => 'Точность';
|
||
|
||
@override
|
||
String get bearing => 'Азимут';
|
||
|
||
@override
|
||
String get direction => 'Направление';
|
||
|
||
@override
|
||
String get filterMarkers => 'Фильтр маркеров';
|
||
|
||
@override
|
||
String get filterMarkersTooltip => 'Фильтровать маркеры';
|
||
|
||
@override
|
||
String get contactsFilter => 'Контакты';
|
||
|
||
@override
|
||
String get repeatersFilter => 'Ретрансляторы';
|
||
|
||
@override
|
||
String get sarMarkers => 'Маркеры SAR';
|
||
|
||
@override
|
||
String get foundPerson => 'Найденный человек';
|
||
|
||
@override
|
||
String get fire => 'Пожар';
|
||
|
||
@override
|
||
String get stagingArea => 'Место сбора';
|
||
|
||
@override
|
||
String get showAll => 'Показать все';
|
||
|
||
@override
|
||
String get nearbyContacts => 'Ближайшие контакты';
|
||
|
||
@override
|
||
String get locationUnavailable => 'Местоположение недоступно';
|
||
|
||
@override
|
||
String get ahead => 'впереди';
|
||
|
||
@override
|
||
String degreesRight(int degrees) {
|
||
return '$degrees° вправо';
|
||
}
|
||
|
||
@override
|
||
String degreesLeft(int degrees) {
|
||
return '$degrees° влево';
|
||
}
|
||
|
||
@override
|
||
String latLonFormat(String latitude, String longitude) {
|
||
return 'Ш: $latitude Д: $longitude';
|
||
}
|
||
|
||
@override
|
||
String get noContactsYet => 'Контактов пока нет';
|
||
|
||
@override
|
||
String get connectToDeviceToLoadContacts =>
|
||
'Подключите устройство для загрузки контактов';
|
||
|
||
@override
|
||
String get teamMembers => 'Члены команды';
|
||
|
||
@override
|
||
String get repeaters => 'Ретрансляторы';
|
||
|
||
@override
|
||
String get rooms => 'Комнаты';
|
||
|
||
@override
|
||
String get channels => 'Каналы';
|
||
|
||
@override
|
||
String get cacheStatistics => 'Статистика кэша';
|
||
|
||
@override
|
||
String get totalTiles => 'Всего тайлов';
|
||
|
||
@override
|
||
String get cacheSize => 'Размер кэша';
|
||
|
||
@override
|
||
String get storeName => 'Имя хранилища';
|
||
|
||
@override
|
||
String get noCacheStatistics => 'Статистика кэша недоступна';
|
||
|
||
@override
|
||
String get downloadRegion => 'Скачать регион';
|
||
|
||
@override
|
||
String get mapLayer => 'Слой карты';
|
||
|
||
@override
|
||
String get regionBounds => 'Границы региона';
|
||
|
||
@override
|
||
String get north => 'Север';
|
||
|
||
@override
|
||
String get south => 'Юг';
|
||
|
||
@override
|
||
String get east => 'Восток';
|
||
|
||
@override
|
||
String get west => 'Запад';
|
||
|
||
@override
|
||
String get zoomLevels => 'Уровни масштаба';
|
||
|
||
@override
|
||
String minZoom(int zoom) {
|
||
return 'Мин: $zoom';
|
||
}
|
||
|
||
@override
|
||
String maxZoom(int zoom) {
|
||
return 'Макс: $zoom';
|
||
}
|
||
|
||
@override
|
||
String get downloadingDots => 'Загрузка...';
|
||
|
||
@override
|
||
String get cancelDownload => 'Отменить загрузку';
|
||
|
||
@override
|
||
String get downloadRegionButton => 'Скачать регион';
|
||
|
||
@override
|
||
String get downloadNote =>
|
||
'Внимание: большие регионы или высокие уровни масштаба могут потребовать значительного времени и места.';
|
||
|
||
@override
|
||
String get cacheManagement => 'Управление кэшем';
|
||
|
||
@override
|
||
String get clearAllMaps => 'Очистить все карты';
|
||
|
||
@override
|
||
String get clearMapsConfirmTitle => 'Очистить все карты';
|
||
|
||
@override
|
||
String get clearMapsConfirmMessage =>
|
||
'Вы уверены, что хотите удалить все загруженные карты? Это действие нельзя отменить.';
|
||
|
||
@override
|
||
String get mapDownloadCompleted => 'Загрузка карты завершена!';
|
||
|
||
@override
|
||
String get cacheClearedSuccessfully => 'Кэш успешно очищен!';
|
||
|
||
@override
|
||
String get downloadCancelled => 'Загрузка отменена';
|
||
|
||
@override
|
||
String get startingDownload => 'Начало загрузки...';
|
||
|
||
@override
|
||
String get downloadingMapTiles => 'Загрузка тайлов карты...';
|
||
|
||
@override
|
||
String get downloadCompletedSuccessfully => 'Загрузка успешно завершена!';
|
||
|
||
@override
|
||
String get cancellingDownload => 'Отмена загрузки...';
|
||
|
||
@override
|
||
String errorLoadingStats(String error) {
|
||
return 'Ошибка загрузки статистики: $error';
|
||
}
|
||
|
||
@override
|
||
String downloadFailed(String error) {
|
||
return 'Ошибка загрузки: $error';
|
||
}
|
||
|
||
@override
|
||
String cancelFailed(String error) {
|
||
return 'Ошибка отмены: $error';
|
||
}
|
||
|
||
@override
|
||
String clearCacheFailed(String error) {
|
||
return 'Ошибка очистки кэша: $error';
|
||
}
|
||
|
||
@override
|
||
String minZoomError(String error) {
|
||
return 'Мин. масштаб: $error';
|
||
}
|
||
|
||
@override
|
||
String maxZoomError(String error) {
|
||
return 'Макс. масштаб: $error';
|
||
}
|
||
|
||
@override
|
||
String get minZoomGreaterThanMax =>
|
||
'Минимальный масштаб должен быть меньше или равен максимальному';
|
||
|
||
@override
|
||
String get selectMapLayer => 'Выбрать слой карты';
|
||
|
||
@override
|
||
String get mapOptions => 'Параметры карты';
|
||
|
||
@override
|
||
String get showLegend => 'Показать легенду';
|
||
|
||
@override
|
||
String get displayMarkerTypeCounts => 'Отображать счётчики типов маркеров';
|
||
|
||
@override
|
||
String get rotateMapWithHeading => 'Поворачивать карту по курсу';
|
||
|
||
@override
|
||
String get mapFollowsDirection => 'Карта следует вашему направлению движения';
|
||
|
||
@override
|
||
String get resetMapRotation => 'Сбросить поворот';
|
||
|
||
@override
|
||
String get resetMapRotationTooltip => 'Вернуть карту на север';
|
||
|
||
@override
|
||
String get showMapDebugInfo => 'Показать отладочную информацию карты';
|
||
|
||
@override
|
||
String get displayZoomLevelBounds => 'Отображать уровень масштаба и границы';
|
||
|
||
@override
|
||
String get fullscreenMode => 'Полноэкранный режим';
|
||
|
||
@override
|
||
String get hideUiFullMapView =>
|
||
'Скрыть все элементы интерфейса для полного вида карты';
|
||
|
||
@override
|
||
String get openStreetMap => 'OpenStreetMap';
|
||
|
||
@override
|
||
String get openTopoMap => 'OpenTopoMap';
|
||
|
||
@override
|
||
String get esriSatellite => 'ESRI Спутник';
|
||
|
||
@override
|
||
String get googleHybrid => 'Google Гибрид';
|
||
|
||
@override
|
||
String get googleRoadmap => 'Google Дороги';
|
||
|
||
@override
|
||
String get googleTerrain => 'Google Рельеф';
|
||
|
||
@override
|
||
String get downloadVisibleArea => 'Скачать видимую область';
|
||
|
||
@override
|
||
String get initializingMap => 'Инициализация карты...';
|
||
|
||
@override
|
||
String get dragToPosition => 'Перетащите для позиционирования';
|
||
|
||
@override
|
||
String get createSarMarker => 'Создать маркер SAR';
|
||
|
||
@override
|
||
String get compass => 'Компас';
|
||
|
||
@override
|
||
String get navigationAndContacts => 'Навигация и контакты';
|
||
|
||
@override
|
||
String get sarAlert => 'ТРЕВОГА SAR';
|
||
|
||
@override
|
||
String get messageSentToPublicChannel =>
|
||
'Сообщение отправлено в публичный канал';
|
||
|
||
@override
|
||
String get pleaseSelectRoomToSendSar =>
|
||
'Пожалуйста, выберите комнату для отправки маркера SAR';
|
||
|
||
@override
|
||
String failedToSendSarMarker(String error) {
|
||
return 'Не удалось отправить маркер SAR: $error';
|
||
}
|
||
|
||
@override
|
||
String sarMarkerSentTo(String roomName) {
|
||
return 'Маркер SAR отправлен в $roomName';
|
||
}
|
||
|
||
@override
|
||
String get notConnectedCannotSync =>
|
||
'Нет подключения — синхронизация невозможна';
|
||
|
||
@override
|
||
String syncedMessageCount(int count) {
|
||
return 'Синхронизировано $count сообщение(й)';
|
||
}
|
||
|
||
@override
|
||
String get noNewMessages => 'Новых сообщений нет';
|
||
|
||
@override
|
||
String syncFailed(String error) {
|
||
return 'Синхронизация не удалась: $error';
|
||
}
|
||
|
||
@override
|
||
String get failedToResendMessage => 'Не удалось повторно отправить сообщение';
|
||
|
||
@override
|
||
String get retryingMessage => 'Повторная отправка сообщения...';
|
||
|
||
@override
|
||
String retryFailed(String error) {
|
||
return 'Повтор не удался: $error';
|
||
}
|
||
|
||
@override
|
||
String get textCopiedToClipboard => 'Текст скопирован в буфер обмена';
|
||
|
||
@override
|
||
String get cannotReplySenderMissing =>
|
||
'Не удаётся ответить: нет информации об отправителе';
|
||
|
||
@override
|
||
String get cannotReplyContactNotFound =>
|
||
'Не удаётся ответить: контакт не найден';
|
||
|
||
@override
|
||
String get messageDeleted => 'Сообщение удалено';
|
||
|
||
@override
|
||
String get copyText => 'Копировать текст';
|
||
|
||
@override
|
||
String get saveAsTemplate => 'Сохранить как шаблон';
|
||
|
||
@override
|
||
String get templateSaved => 'Шаблон успешно сохранён';
|
||
|
||
@override
|
||
String get templateAlreadyExists => 'Шаблон с таким эмодзи уже существует';
|
||
|
||
@override
|
||
String get deleteMessage => 'Удалить сообщение';
|
||
|
||
@override
|
||
String get deleteMessageConfirmation =>
|
||
'Вы уверены, что хотите удалить это сообщение?';
|
||
|
||
@override
|
||
String get shareLocation => 'Поделиться местоположением';
|
||
|
||
@override
|
||
String shareLocationText(
|
||
String markerInfo,
|
||
String lat,
|
||
String lon,
|
||
String url,
|
||
) {
|
||
return '$markerInfo\n\nКоординаты: $lat, $lon\n\nGoogle Maps: $url';
|
||
}
|
||
|
||
@override
|
||
String get sarLocationShare => 'Местоположение SAR';
|
||
|
||
@override
|
||
String get locationShared => 'Местоположение передано';
|
||
|
||
@override
|
||
String get refreshedContacts => 'Контакты обновлены';
|
||
|
||
@override
|
||
String get justNow => 'Только что';
|
||
|
||
@override
|
||
String minutesAgo(int minutes) {
|
||
return '$minutesм назад';
|
||
}
|
||
|
||
@override
|
||
String hoursAgo(int hours) {
|
||
return '$hoursч назад';
|
||
}
|
||
|
||
@override
|
||
String daysAgo(int days) {
|
||
return '$daysд назад';
|
||
}
|
||
|
||
@override
|
||
String secondsAgo(int seconds) {
|
||
return '$secondsс назад';
|
||
}
|
||
|
||
@override
|
||
String get sending => 'Отправка...';
|
||
|
||
@override
|
||
String get sent => 'Отправлено';
|
||
|
||
@override
|
||
String get delivered => 'Доставлено';
|
||
|
||
@override
|
||
String deliveredWithTime(int time) {
|
||
return 'Доставлено ($timeмс)';
|
||
}
|
||
|
||
@override
|
||
String get failed => 'Ошибка';
|
||
|
||
@override
|
||
String get broadcast => 'Трансляция';
|
||
|
||
@override
|
||
String deliveredToContacts(int delivered, int total) {
|
||
return 'Доставлено $delivered/$total контактам';
|
||
}
|
||
|
||
@override
|
||
String get allDelivered => 'Все доставлено';
|
||
|
||
@override
|
||
String get recipientDetails => 'Детали получателей';
|
||
|
||
@override
|
||
String get pending => 'Ожидание';
|
||
|
||
@override
|
||
String get sarMarkerFoundPerson => 'Найденный человек';
|
||
|
||
@override
|
||
String get sarMarkerFire => 'Место пожара';
|
||
|
||
@override
|
||
String get sarMarkerStagingArea => 'Место сбора';
|
||
|
||
@override
|
||
String get sarMarkerObject => 'Найденный объект';
|
||
|
||
@override
|
||
String get from => 'От';
|
||
|
||
@override
|
||
String get coordinates => 'Координаты';
|
||
|
||
@override
|
||
String get tapToViewOnMap => 'Нажмите, чтобы открыть на карте';
|
||
|
||
@override
|
||
String get radioSettings => 'Настройки радио';
|
||
|
||
@override
|
||
String get frequencyMHz => 'Частота (МГц)';
|
||
|
||
@override
|
||
String get frequencyExample => 'например, 869.618';
|
||
|
||
@override
|
||
String get bandwidth => 'Полоса пропускания';
|
||
|
||
@override
|
||
String get spreadingFactor => 'Коэффициент расширения';
|
||
|
||
@override
|
||
String get codingRate => 'Скорость кодирования';
|
||
|
||
@override
|
||
String get txPowerDbm => 'Мощность TX (дБм)';
|
||
|
||
@override
|
||
String maxPowerDbm(int power) {
|
||
return 'Макс: $power дБм';
|
||
}
|
||
|
||
@override
|
||
String get you => 'Вы';
|
||
|
||
@override
|
||
String get offlineVectorMaps => 'Офлайн-векторные карты';
|
||
|
||
@override
|
||
String get offlineVectorMapsDescription =>
|
||
'Импортируйте офлайн-векторные тайлы карт (формат MBTiles) для использования без интернета';
|
||
|
||
@override
|
||
String get importMbtiles => 'Импортировать файл MBTiles';
|
||
|
||
@override
|
||
String get importMbtilesNote =>
|
||
'Поддерживаются файлы MBTiles с векторными тайлами (формат PBF/MVT). Отлично подходят выгрузки Geofabrik!';
|
||
|
||
@override
|
||
String get noMbtilesFiles => 'Офлайн-векторные карты не найдены';
|
||
|
||
@override
|
||
String get mbtilesImportedSuccessfully => 'Файл MBTiles успешно импортирован';
|
||
|
||
@override
|
||
String get failedToImportMbtiles => 'Не удалось импортировать файл MBTiles';
|
||
|
||
@override
|
||
String get deleteMbtilesConfirmTitle => 'Удалить офлайн-карту';
|
||
|
||
@override
|
||
String deleteMbtilesConfirmMessage(String name) {
|
||
return 'Вы уверены, что хотите удалить \"$name\"? Офлайн-карта будет удалена безвозвратно.';
|
||
}
|
||
|
||
@override
|
||
String get mbtilesDeletedSuccessfully => 'Офлайн-карта успешно удалена';
|
||
|
||
@override
|
||
String get failedToDeleteMbtiles => 'Не удалось удалить офлайн-карту';
|
||
|
||
@override
|
||
String get importExportCachedTiles => 'Импорт/Экспорт кэшированных тайлов';
|
||
|
||
@override
|
||
String get importExportDescription =>
|
||
'Резервное копирование, обмен и восстановление загруженных тайлов карт между устройствами';
|
||
|
||
@override
|
||
String get exportTilesToFile => 'Экспортировать тайлы в файл';
|
||
|
||
@override
|
||
String get importTilesFromFile => 'Импортировать тайлы из файла';
|
||
|
||
@override
|
||
String get selectExportLocation => 'Выберите место для экспорта';
|
||
|
||
@override
|
||
String get selectImportFile => 'Выберите архив тайлов';
|
||
|
||
@override
|
||
String get exportingTiles => 'Экспорт тайлов...';
|
||
|
||
@override
|
||
String get importingTiles => 'Импорт тайлов...';
|
||
|
||
@override
|
||
String exportSuccess(int count) {
|
||
return 'Экспортировано $count тайлов';
|
||
}
|
||
|
||
@override
|
||
String importSuccess(int count) {
|
||
return 'Импортировано $count хранилищ';
|
||
}
|
||
|
||
@override
|
||
String exportFailed(String error) {
|
||
return 'Ошибка экспорта: $error';
|
||
}
|
||
|
||
@override
|
||
String importFailed(String error) {
|
||
return 'Ошибка импорта: $error';
|
||
}
|
||
|
||
@override
|
||
String get exportNote =>
|
||
'Создаёт сжатый архив (.fmtc), которым можно поделиться и импортировать на других устройствах.';
|
||
|
||
@override
|
||
String get importNote =>
|
||
'Импортирует тайлы карт из ранее экспортированного архива. Тайлы будут объединены с существующим кэшем.';
|
||
|
||
@override
|
||
String get noTilesToExport => 'Нет доступных тайлов для экспорта';
|
||
|
||
@override
|
||
String archiveContainsStores(int count) {
|
||
return 'Архив содержит $count хранилищ';
|
||
}
|
||
|
||
@override
|
||
String get vectorTiles => 'Векторные тайлы';
|
||
|
||
@override
|
||
String get schema => 'Схема';
|
||
|
||
@override
|
||
String get unknown => 'Неизвестно';
|
||
|
||
@override
|
||
String get bounds => 'Границы';
|
||
|
||
@override
|
||
String get onlineLayers => 'Онлайн-слои';
|
||
|
||
@override
|
||
String get offlineLayers => 'Офлайн-слои';
|
||
|
||
@override
|
||
String get locationTrail => 'Трек местоположения';
|
||
|
||
@override
|
||
String get showTrailOnMap => 'Показать трек на карте';
|
||
|
||
@override
|
||
String get trailVisible => 'Трек отображается на карте';
|
||
|
||
@override
|
||
String get trailHiddenRecording => 'Трек скрыт (запись продолжается)';
|
||
|
||
@override
|
||
String get duration => 'Продолжительность';
|
||
|
||
@override
|
||
String get points => 'Точки';
|
||
|
||
@override
|
||
String get clearTrail => 'Очистить трек';
|
||
|
||
@override
|
||
String get clearTrailQuestion => 'Очистить трек?';
|
||
|
||
@override
|
||
String get clearTrailConfirmation =>
|
||
'Вы уверены, что хотите очистить текущий трек? Это действие нельзя отменить.';
|
||
|
||
@override
|
||
String get noTrailRecorded => 'Трек ещё не записан';
|
||
|
||
@override
|
||
String get startTrackingToRecord =>
|
||
'Запустите отслеживание геолокации для записи трека';
|
||
|
||
@override
|
||
String get trailControls => 'Управление треком';
|
||
|
||
@override
|
||
String get exportTrailToGpx => 'Экспортировать трек в GPX';
|
||
|
||
@override
|
||
String get importTrailFromGpx => 'Импортировать трек из GPX';
|
||
|
||
@override
|
||
String get trailExportedSuccessfully => 'Трек успешно экспортирован!';
|
||
|
||
@override
|
||
String get failedToExportTrail => 'Не удалось экспортировать трек';
|
||
|
||
@override
|
||
String failedToImportTrail(String error) {
|
||
return 'Не удалось импортировать трек: $error';
|
||
}
|
||
|
||
@override
|
||
String get importTrail => 'Импортировать трек';
|
||
|
||
@override
|
||
String importTrailQuestion(int pointCount) {
|
||
return 'Импортировать трек из $pointCount точек?\n\nВы можете заменить текущий трек или просмотреть его рядом.';
|
||
}
|
||
|
||
@override
|
||
String get viewAlongside => 'Просмотреть рядом';
|
||
|
||
@override
|
||
String get replaceCurrent => 'Заменить текущий';
|
||
|
||
@override
|
||
String trailImported(int pointCount) {
|
||
return 'Трек импортирован! ($pointCount точек)';
|
||
}
|
||
|
||
@override
|
||
String trailReplaced(int pointCount) {
|
||
return 'Трек заменён! ($pointCount точек)';
|
||
}
|
||
|
||
@override
|
||
String get contactTrails => 'Треки контактов';
|
||
|
||
@override
|
||
String get showAllContactTrails => 'Показать все треки контактов';
|
||
|
||
@override
|
||
String get noContactsWithLocationHistory =>
|
||
'Нет контактов с историей местоположения';
|
||
|
||
@override
|
||
String showingTrailsForContacts(int count) {
|
||
return 'Показаны треки для $count контактов';
|
||
}
|
||
|
||
@override
|
||
String get individualContactTrails => 'Индивидуальные треки контактов';
|
||
|
||
@override
|
||
String get deviceInformation => 'Информация об устройстве';
|
||
|
||
@override
|
||
String get bleName => 'Имя BLE';
|
||
|
||
@override
|
||
String get meshName => 'Имя в сети Mesh';
|
||
|
||
@override
|
||
String get notSet => 'Не задано';
|
||
|
||
@override
|
||
String get model => 'Модель';
|
||
|
||
@override
|
||
String get version => 'Версия';
|
||
|
||
@override
|
||
String get buildDate => 'Дата сборки';
|
||
|
||
@override
|
||
String get firmware => 'Прошивка';
|
||
|
||
@override
|
||
String get maxContacts => 'Макс. контактов';
|
||
|
||
@override
|
||
String get maxChannels => 'Макс. каналов';
|
||
|
||
@override
|
||
String get publicInfo => 'Публичная информация';
|
||
|
||
@override
|
||
String get meshNetworkName => 'Название сети Mesh';
|
||
|
||
@override
|
||
String get nameBroadcastInMesh => 'Имя, транслируемое в mesh-объявлениях';
|
||
|
||
@override
|
||
String get telemetryAndLocationSharing =>
|
||
'Телеметрия и передача местоположения';
|
||
|
||
@override
|
||
String get lat => 'Ш';
|
||
|
||
@override
|
||
String get lon => 'Д';
|
||
|
||
@override
|
||
String get useCurrentLocation => 'Использовать текущее местоположение';
|
||
|
||
@override
|
||
String get noneUnknown => 'Нет/Неизвестно';
|
||
|
||
@override
|
||
String get chatNode => 'Узел чата';
|
||
|
||
@override
|
||
String get repeater => 'Ретранслятор';
|
||
|
||
@override
|
||
String get roomChannel => 'Комната/Канал';
|
||
|
||
@override
|
||
String typeNumber(int number) {
|
||
return 'Тип $number';
|
||
}
|
||
|
||
@override
|
||
String copiedToClipboardShort(String label) {
|
||
return '$label скопировано в буфер обмена';
|
||
}
|
||
|
||
@override
|
||
String failedToSave(String error) {
|
||
return 'Не удалось сохранить: $error';
|
||
}
|
||
|
||
@override
|
||
String failedToGetLocation(String error) {
|
||
return 'Не удалось получить местоположение: $error';
|
||
}
|
||
|
||
@override
|
||
String get sarTemplates => 'Шаблоны SAR';
|
||
|
||
@override
|
||
String get manageSarTemplates => 'Управление шаблонами целеуказания';
|
||
|
||
@override
|
||
String get addTemplate => 'Добавить шаблон';
|
||
|
||
@override
|
||
String get editTemplate => 'Изменить шаблон';
|
||
|
||
@override
|
||
String get deleteTemplate => 'Удалить шаблон';
|
||
|
||
@override
|
||
String get templateName => 'Название шаблона';
|
||
|
||
@override
|
||
String get templateNameHint => 'например, Найденный человек';
|
||
|
||
@override
|
||
String get templateEmoji => 'Эмодзи';
|
||
|
||
@override
|
||
String get emojiRequired => 'Требуется эмодзи';
|
||
|
||
@override
|
||
String get nameRequired => 'Требуется название';
|
||
|
||
@override
|
||
String get templateDescription => 'Описание (необязательно)';
|
||
|
||
@override
|
||
String get templateDescriptionHint => 'Добавьте дополнительный контекст...';
|
||
|
||
@override
|
||
String get templateColor => 'Цвет';
|
||
|
||
@override
|
||
String get previewFormat => 'Предпросмотр (формат сообщения SAR)';
|
||
|
||
@override
|
||
String get importFromClipboard => 'Импорт';
|
||
|
||
@override
|
||
String get exportToClipboard => 'Экспорт';
|
||
|
||
@override
|
||
String deleteTemplateConfirmation(String name) {
|
||
return 'Удалить шаблон \'$name\'?';
|
||
}
|
||
|
||
@override
|
||
String get templateAdded => 'Шаблон добавлен';
|
||
|
||
@override
|
||
String get templateUpdated => 'Шаблон обновлён';
|
||
|
||
@override
|
||
String get templateDeleted => 'Шаблон удалён';
|
||
|
||
@override
|
||
String templatesImported(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: 'Импортировано $count шаблонов',
|
||
one: 'Импортирован 1 шаблон',
|
||
zero: 'Шаблоны не импортированы',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String templatesExported(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count шаблонов экспортировано в буфер обмена',
|
||
one: '1 шаблон экспортирован в буфер обмена',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String get resetToDefaults => 'Сбросить до умолчаний';
|
||
|
||
@override
|
||
String get resetToDefaultsConfirmation =>
|
||
'Все пользовательские шаблоны будут удалены и восстановлены 4 шаблона по умолчанию. Продолжить?';
|
||
|
||
@override
|
||
String get reset => 'Сбросить';
|
||
|
||
@override
|
||
String get resetComplete => 'Шаблоны сброшены до умолчаний';
|
||
|
||
@override
|
||
String get noTemplates => 'Шаблоны недоступны';
|
||
|
||
@override
|
||
String get tapAddToCreate => 'Нажмите +, чтобы создать первый шаблон';
|
||
|
||
@override
|
||
String get ok => 'ОК';
|
||
|
||
@override
|
||
String get permissionsSection => 'Разрешения';
|
||
|
||
@override
|
||
String get locationPermission => 'Разрешение геолокации';
|
||
|
||
@override
|
||
String get checking => 'Проверка...';
|
||
|
||
@override
|
||
String get locationPermissionGrantedAlways => 'Разрешено (всегда)';
|
||
|
||
@override
|
||
String get locationPermissionGrantedWhileInUse =>
|
||
'Разрешено (при использовании)';
|
||
|
||
@override
|
||
String get locationPermissionDeniedTapToRequest =>
|
||
'Запрещено — нажмите для запроса';
|
||
|
||
@override
|
||
String get locationPermissionPermanentlyDeniedOpenSettings =>
|
||
'Запрещено навсегда — откройте настройки';
|
||
|
||
@override
|
||
String get locationPermissionDialogContent =>
|
||
'Доступ к геолокации запрещён навсегда. Включите его в настройках устройства для GPS-трекинга и обмена местоположением.';
|
||
|
||
@override
|
||
String get openSettings => 'Открыть настройки';
|
||
|
||
@override
|
||
String get locationPermissionGranted => 'Разрешение геолокации получено!';
|
||
|
||
@override
|
||
String get locationPermissionRequiredForGps =>
|
||
'Разрешение геолокации необходимо для GPS-трекинга и обмена местоположением.';
|
||
|
||
@override
|
||
String get locationPermissionAlreadyGranted =>
|
||
'Разрешение геолокации уже предоставлено.';
|
||
|
||
@override
|
||
String get sarNavyBlue => 'SAR Тёмно-синяя';
|
||
|
||
@override
|
||
String get sarNavyBlueDescription => 'Профессиональный / оперативный режим';
|
||
|
||
@override
|
||
String get selectRecipient => 'Выбрать получателя';
|
||
|
||
@override
|
||
String get broadcastToAllNearby => 'Трансляция всем ближайшим';
|
||
|
||
@override
|
||
String get searchRecipients => 'Поиск получателей...';
|
||
|
||
@override
|
||
String get noContactsFound => 'Контакты не найдены';
|
||
|
||
@override
|
||
String get noRoomsFound => 'Комнаты не найдены';
|
||
|
||
@override
|
||
String get noContactsOrRoomsAvailable => 'Нет доступных контактов или комнат';
|
||
|
||
@override
|
||
String get noRecipientsAvailable => 'Нет доступных получателей';
|
||
|
||
@override
|
||
String get noChannelsFound => 'Каналы не найдены';
|
||
|
||
@override
|
||
String get messagesWillBeSentToPublicChannel =>
|
||
'Сообщения будут отправлены в публичный канал';
|
||
|
||
@override
|
||
String get newMessage => 'Новое сообщение';
|
||
|
||
@override
|
||
String get channel => 'Канал';
|
||
|
||
@override
|
||
String get samplePoliceLead => 'Руководитель группы полиции';
|
||
|
||
@override
|
||
String get sampleDroneOperator => 'Оператор дрона';
|
||
|
||
@override
|
||
String get sampleFirefighterAlpha => 'Пожарный';
|
||
|
||
@override
|
||
String get sampleMedicCharlie => 'Медик';
|
||
|
||
@override
|
||
String get sampleCommandDelta => 'Командование';
|
||
|
||
@override
|
||
String get sampleFireEngine => 'Пожарная машина';
|
||
|
||
@override
|
||
String get sampleAirSupport => 'Авиационная поддержка';
|
||
|
||
@override
|
||
String get sampleBaseCoordinator => 'Базовый координатор';
|
||
|
||
@override
|
||
String get channelEmergency => 'Аварийный';
|
||
|
||
@override
|
||
String get channelCoordination => 'Координация';
|
||
|
||
@override
|
||
String get channelUpdates => 'Обновления';
|
||
|
||
@override
|
||
String get sampleTeamMember => 'Тестовый член команды';
|
||
|
||
@override
|
||
String get sampleScout => 'Тестовый разведчик';
|
||
|
||
@override
|
||
String get sampleBase => 'Тестовая база';
|
||
|
||
@override
|
||
String get sampleSearcher => 'Тестовый поисковик';
|
||
|
||
@override
|
||
String get sampleObjectBackpack => ' Найден рюкзак синего цвета';
|
||
|
||
@override
|
||
String get sampleObjectVehicle =>
|
||
' Брошенный автомобиль — установить владельца';
|
||
|
||
@override
|
||
String get sampleObjectCamping => ' Обнаружено туристическое снаряжение';
|
||
|
||
@override
|
||
String get sampleObjectTrailMarker => ' Указатель тропы найден вне маршрута';
|
||
|
||
@override
|
||
String get sampleMsgAllTeamsCheckIn => 'Всем группам: сообщить о готовности';
|
||
|
||
@override
|
||
String get sampleMsgWeatherUpdate => 'Погода: ясно, температура 18°C';
|
||
|
||
@override
|
||
String get sampleMsgBaseCamp => 'Базовый лагерь развёрнут у места сбора';
|
||
|
||
@override
|
||
String get sampleMsgTeamAlpha => 'Группа выдвигается в сектор 2';
|
||
|
||
@override
|
||
String get sampleMsgRadioCheck => 'Проверка связи — всем станциям ответить';
|
||
|
||
@override
|
||
String get sampleMsgWaterSupply => 'Вода доступна на контрольной точке 3';
|
||
|
||
@override
|
||
String get sampleMsgTeamBravo => 'Группа докладывает: сектор 1 чист';
|
||
|
||
@override
|
||
String get sampleMsgEtaRallyPoint => 'Прибытие на место сбора: 15 минут';
|
||
|
||
@override
|
||
String get sampleMsgSupplyDrop => 'Сброс снаряжения подтверждён на 14:00';
|
||
|
||
@override
|
||
String get sampleMsgDroneSurvey =>
|
||
'Разведка дроном завершена — ничего не обнаружено';
|
||
|
||
@override
|
||
String get sampleMsgTeamCharlie => 'Группа запрашивает подкрепление';
|
||
|
||
@override
|
||
String get sampleMsgRadioDiscipline =>
|
||
'Всем подразделениям: соблюдать радиодисциплину';
|
||
|
||
@override
|
||
String get sampleMsgUrgentMedical =>
|
||
'СРОЧНО: нужна медицинская помощь в секторе 4';
|
||
|
||
@override
|
||
String get sampleMsgAdultMale => ' Взрослый мужчина, в сознании';
|
||
|
||
@override
|
||
String get sampleMsgFireSpotted => 'Обнаружен пожар — координаты следуют';
|
||
|
||
@override
|
||
String get sampleMsgSpreadingRapidly => ' Распространяется быстро!';
|
||
|
||
@override
|
||
String get sampleMsgPriorityHelicopter =>
|
||
'ПРИОРИТЕТ: нужна поддержка вертолёта';
|
||
|
||
@override
|
||
String get sampleMsgMedicalTeamEnRoute =>
|
||
'Медицинская группа движется к вашему местоположению';
|
||
|
||
@override
|
||
String get sampleMsgEvacHelicopter =>
|
||
'Вертолёт эвакуации: прибытие через 10 минут';
|
||
|
||
@override
|
||
String get sampleMsgEmergencyResolved =>
|
||
'Чрезвычайная ситуация ликвидирована — опасности нет';
|
||
|
||
@override
|
||
String get sampleMsgEmergencyStagingArea => ' Аварийное место сбора';
|
||
|
||
@override
|
||
String get sampleMsgEmergencyServices =>
|
||
'Аварийные службы уведомлены и реагируют';
|
||
|
||
@override
|
||
String get sampleAlphaTeamLead => 'Руководитель группы';
|
||
|
||
@override
|
||
String get sampleBravoScout => 'Разведчик';
|
||
|
||
@override
|
||
String get sampleCharlieMedic => 'Медик';
|
||
|
||
@override
|
||
String get sampleDeltaNavigator => 'Навигатор';
|
||
|
||
@override
|
||
String get sampleEchoSupport => 'Поддержка';
|
||
|
||
@override
|
||
String get sampleBaseCommand => 'Базовое командование';
|
||
|
||
@override
|
||
String get sampleFieldCoordinator => 'Полевой координатор';
|
||
|
||
@override
|
||
String get sampleMedicalTeam => 'Медицинская группа';
|
||
|
||
@override
|
||
String get mapDrawing => 'Рисунок на карте';
|
||
|
||
@override
|
||
String get navigateToDrawing => 'Перейти к рисунку';
|
||
|
||
@override
|
||
String get copyCoordinates => 'Копировать координаты';
|
||
|
||
@override
|
||
String get hideFromMap => 'Скрыть с карты';
|
||
|
||
@override
|
||
String get lineDrawing => 'Линия';
|
||
|
||
@override
|
||
String get rectangleDrawing => 'Прямоугольник';
|
||
|
||
@override
|
||
String get coordinatesCopiedToClipboard =>
|
||
'Координаты скопированы в буфер обмена';
|
||
|
||
@override
|
||
String get manualCoordinates => 'Ввод координат вручную';
|
||
|
||
@override
|
||
String get enterCoordinatesManually => 'Ввести координаты вручную';
|
||
|
||
@override
|
||
String get latitudeLabel => 'Широта';
|
||
|
||
@override
|
||
String get longitudeLabel => 'Долгота';
|
||
|
||
@override
|
||
String get invalidLatitude => 'Неверная широта (от -90 до 90)';
|
||
|
||
@override
|
||
String get invalidLongitude => 'Неверная долгота (от -180 до 180)';
|
||
|
||
@override
|
||
String get exampleCoordinates => 'Пример: 55.7558, 37.6173';
|
||
|
||
@override
|
||
String get drawingShared => 'Рисунок на карте';
|
||
|
||
@override
|
||
String get drawingHidden => 'Рисунок скрыт с карты';
|
||
|
||
@override
|
||
String alreadyShared(int count) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
count,
|
||
locale: localeName,
|
||
other: '$count уже передано',
|
||
one: '1 уже передан',
|
||
);
|
||
return '$_temp0';
|
||
}
|
||
|
||
@override
|
||
String newDrawingsShared(int count, String plural) {
|
||
return 'Передано $count новых рисунк$plural';
|
||
}
|
||
|
||
@override
|
||
String get shareDrawing => 'Поделиться рисунком';
|
||
|
||
@override
|
||
String get shareWithAllNearbyDevices =>
|
||
'Поделиться со всеми ближайшими устройствами';
|
||
|
||
@override
|
||
String get shareToRoom => 'Отправить в комнату';
|
||
|
||
@override
|
||
String get sendToPersistentStorage =>
|
||
'Отправить в постоянное хранилище комнаты';
|
||
|
||
@override
|
||
String get deleteDrawingConfirm =>
|
||
'Вы уверены, что хотите удалить этот рисунок?';
|
||
|
||
@override
|
||
String get drawingDeleted => 'Рисунок удалён';
|
||
|
||
@override
|
||
String yourDrawingsCount(int count) {
|
||
return 'Ваши рисунки ($count)';
|
||
}
|
||
|
||
@override
|
||
String get shared => 'Передано';
|
||
|
||
@override
|
||
String get line => 'Линия';
|
||
|
||
@override
|
||
String get rectangle => 'Прямоугольник';
|
||
|
||
@override
|
||
String get updateAvailable => 'Доступно обновление';
|
||
|
||
@override
|
||
String get currentVersion => 'Текущая';
|
||
|
||
@override
|
||
String get latestVersion => 'Последняя';
|
||
|
||
@override
|
||
String get downloadUpdate => 'Скачать';
|
||
|
||
@override
|
||
String get updateLater => 'Позже';
|
||
|
||
@override
|
||
String get cadastralParcels => 'Кадастровые участки';
|
||
|
||
@override
|
||
String get forestRoads => 'Лесные дороги';
|
||
|
||
@override
|
||
String get showCadastralParcels => 'Показать кадастровые участки';
|
||
|
||
@override
|
||
String get showForestRoads => 'Показать лесные дороги';
|
||
|
||
@override
|
||
String get wmsOverlays => 'WMS-наложения';
|
||
|
||
@override
|
||
String get hikingTrails => 'Туристические маршруты';
|
||
|
||
@override
|
||
String get mainRoads => 'Главные дороги';
|
||
|
||
@override
|
||
String get houseNumbers => 'Номера домов';
|
||
|
||
@override
|
||
String get fireHazardZones => 'Пожароопасные зоны';
|
||
|
||
@override
|
||
String get historicalFires => 'Исторические пожары';
|
||
|
||
@override
|
||
String get firebreaks => 'Противопожарные просеки';
|
||
|
||
@override
|
||
String get krasFireZones => 'Пожарные зоны Краса';
|
||
|
||
@override
|
||
String get placeNames => 'Названия мест';
|
||
|
||
@override
|
||
String get municipalityBorders => 'Границы муниципалитетов';
|
||
|
||
@override
|
||
String get topographicMap => 'Топографическая карта 1:25000';
|
||
|
||
@override
|
||
String get recentMessages => 'Последние сообщения';
|
||
|
||
@override
|
||
String get addChannel => 'Добавить канал';
|
||
|
||
@override
|
||
String get channelName => 'Название канала';
|
||
|
||
@override
|
||
String get channelNameHint => 'например, Группа спасения Альфа';
|
||
|
||
@override
|
||
String get channelSecret => 'Секрет канала';
|
||
|
||
@override
|
||
String get channelSecretHint => 'Общий пароль для этого канала';
|
||
|
||
@override
|
||
String get channelSecretHelp =>
|
||
'Этот секрет необходимо передать всем членам команды, которым нужен доступ к каналу';
|
||
|
||
@override
|
||
String get channelTypesInfo =>
|
||
'Hash-каналы (#команда): секрет генерируется из названия автоматически. Одно название = один канал на всех устройствах.\n\nЗакрытые каналы: используется явный секрет. Войти могут только те, у кого есть секрет.';
|
||
|
||
@override
|
||
String get hashChannelInfo =>
|
||
'Hash-канал: секрет будет автоматически создан из названия. Все, кто использует одно и то же имя, окажутся в одном канале.';
|
||
|
||
@override
|
||
String get channelNameRequired => 'Требуется название канала';
|
||
|
||
@override
|
||
String get channelNameTooLong =>
|
||
'Название канала не должно превышать 31 символ';
|
||
|
||
@override
|
||
String get channelSecretRequired => 'Требуется секрет канала';
|
||
|
||
@override
|
||
String get channelSecretTooLong =>
|
||
'Секрет канала не должен превышать 32 символа';
|
||
|
||
@override
|
||
String get invalidAsciiCharacters => 'Разрешены только символы ASCII';
|
||
|
||
@override
|
||
String get channelCreatedSuccessfully => 'Канал успешно создан';
|
||
|
||
@override
|
||
String channelCreationFailed(String error) {
|
||
return 'Не удалось создать канал: $error';
|
||
}
|
||
|
||
@override
|
||
String get deleteChannel => 'Удалить канал';
|
||
|
||
@override
|
||
String deleteChannelConfirmation(String channelName) {
|
||
return 'Вы уверены, что хотите удалить канал \"$channelName\"? Это действие нельзя отменить.';
|
||
}
|
||
|
||
@override
|
||
String get channelDeletedSuccessfully => 'Канал успешно удалён';
|
||
|
||
@override
|
||
String channelDeletionFailed(String error) {
|
||
return 'Не удалось удалить канал: $error';
|
||
}
|
||
|
||
@override
|
||
String get allChannelSlotsInUse =>
|
||
'Все слоты каналов заняты (максимум 39 пользовательских каналов)';
|
||
|
||
@override
|
||
String get createChannel => 'Создать канал';
|
||
|
||
@override
|
||
String get wizardBack => 'Назад';
|
||
|
||
@override
|
||
String get wizardSkip => 'Пропустить';
|
||
|
||
@override
|
||
String get wizardNext => 'Далее';
|
||
|
||
@override
|
||
String get wizardGetStarted => 'Начать';
|
||
|
||
@override
|
||
String get wizardWelcomeTitle => 'Добро пожаловать в MeshCore SAR';
|
||
|
||
@override
|
||
String get wizardWelcomeDescription =>
|
||
'Мощный инструмент связи вне сети для поисково-спасательных операций. Поддерживайте связь с командой через mesh-радио, когда традиционные сети недоступны.';
|
||
|
||
@override
|
||
String get wizardConnectingTitle => 'Подключение к радиоустройству';
|
||
|
||
@override
|
||
String get wizardConnectingDescription =>
|
||
'Подключите смартфон к радиоустройству MeshCore по Bluetooth для связи вне сети.';
|
||
|
||
@override
|
||
String get wizardConnectingFeature1 => 'Поиск ближайших устройств MeshCore';
|
||
|
||
@override
|
||
String get wizardConnectingFeature2 =>
|
||
'Сопряжение с радиоустройством по Bluetooth';
|
||
|
||
@override
|
||
String get wizardConnectingFeature3 =>
|
||
'Работает полностью офлайн — интернет не нужен';
|
||
|
||
@override
|
||
String get wizardSimpleModeTitle => 'Простой режим';
|
||
|
||
@override
|
||
String get wizardSimpleModeDescription =>
|
||
'Впервые работаете с mesh-сетью? Включите простой режим для упрощённого интерфейса с основными функциями.';
|
||
|
||
@override
|
||
String get wizardSimpleModeFeature1 =>
|
||
'Удобный для новичков интерфейс с основными функциями';
|
||
|
||
@override
|
||
String get wizardSimpleModeFeature2 =>
|
||
'Переключиться в расширенный режим можно в любое время в настройках';
|
||
|
||
@override
|
||
String get wizardChannelTitle => 'Каналы';
|
||
|
||
@override
|
||
String get wizardChannelDescription =>
|
||
'Транслируйте сообщения всем участникам канала — идеально для общих объявлений и координации команды.';
|
||
|
||
@override
|
||
String get wizardChannelFeature1 => 'Публичный канал для общей связи команды';
|
||
|
||
@override
|
||
String get wizardChannelFeature2 =>
|
||
'Создавайте пользовательские каналы для отдельных групп';
|
||
|
||
@override
|
||
String get wizardChannelFeature3 =>
|
||
'Сообщения автоматически ретранслируются через mesh';
|
||
|
||
@override
|
||
String get wizardContactsTitle => 'Контакты';
|
||
|
||
@override
|
||
String get wizardContactsDescription =>
|
||
'Члены вашей команды появляются автоматически по мере подключения к mesh-сети. Отправляйте им личные сообщения или просматривайте их местоположение.';
|
||
|
||
@override
|
||
String get wizardContactsFeature1 => 'Контакты обнаруживаются автоматически';
|
||
|
||
@override
|
||
String get wizardContactsFeature2 => 'Отправка личных сообщений';
|
||
|
||
@override
|
||
String get wizardContactsFeature3 =>
|
||
'Просмотр уровня заряда и времени последнего появления';
|
||
|
||
@override
|
||
String get wizardMapTitle => 'Карта и местоположение';
|
||
|
||
@override
|
||
String get wizardMapDescription =>
|
||
'Отслеживайте команду в реальном времени и отмечайте важные места для поисково-спасательных операций.';
|
||
|
||
@override
|
||
String get wizardMapFeature1 =>
|
||
'Маркеры SAR для найденных людей, пожаров и мест сбора';
|
||
|
||
@override
|
||
String get wizardMapFeature2 =>
|
||
'GPS-отслеживание членов команды в реальном времени';
|
||
|
||
@override
|
||
String get wizardMapFeature3 => 'Загрузка офлайн-карт для отдалённых районов';
|
||
|
||
@override
|
||
String get wizardMapFeature4 =>
|
||
'Рисование фигур и обмен тактической информацией';
|
||
|
||
@override
|
||
String get viewWelcomeTutorial => 'Просмотреть обучение';
|
||
|
||
@override
|
||
String get allTeamContacts => 'Все контакты команды';
|
||
|
||
@override
|
||
String directMessagesInfo(int count) {
|
||
return 'Личные сообщения с подтверждением. Отправлено $count членам команды.';
|
||
}
|
||
|
||
@override
|
||
String sarMarkerSentToContacts(int count) {
|
||
return 'Маркер SAR отправлен $count контактам';
|
||
}
|
||
|
||
@override
|
||
String get noContactsAvailable => 'Нет доступных контактов команды';
|
||
|
||
@override
|
||
String get reply => 'Ответить';
|
||
|
||
@override
|
||
String get technicalDetails => 'Технические детали';
|
||
|
||
@override
|
||
String get messageTechnicalDetails => 'Технические детали сообщения';
|
||
|
||
@override
|
||
String get linkQuality => 'Качество связи';
|
||
|
||
@override
|
||
String get delivery => 'Доставка';
|
||
|
||
@override
|
||
String get status => 'Статус';
|
||
|
||
@override
|
||
String get expectedAckTag => 'Ожидаемый тег ACK';
|
||
|
||
@override
|
||
String get roundTrip => 'Время отклика';
|
||
|
||
@override
|
||
String get retryAttempt => 'Попытка повтора';
|
||
|
||
@override
|
||
String get floodFallback => 'Широковещательный резерв';
|
||
|
||
@override
|
||
String get identity => 'Идентификатор';
|
||
|
||
@override
|
||
String get messageId => 'ID сообщения';
|
||
|
||
@override
|
||
String get sender => 'Отправитель';
|
||
|
||
@override
|
||
String get senderKey => 'Ключ отправителя';
|
||
|
||
@override
|
||
String get recipient => 'Получатель';
|
||
|
||
@override
|
||
String get recipientKey => 'Ключ получателя';
|
||
|
||
@override
|
||
String get voice => 'Голос';
|
||
|
||
@override
|
||
String get voiceId => 'ID голоса';
|
||
|
||
@override
|
||
String get envelope => 'Конверт';
|
||
|
||
@override
|
||
String get sessionProgress => 'Прогресс сессии';
|
||
|
||
@override
|
||
String get complete => 'Завершено';
|
||
|
||
@override
|
||
String get rawDump => 'Необработанные данные';
|
||
|
||
@override
|
||
String get cannotRetryMissingRecipient =>
|
||
'Повтор невозможен: нет информации о получателе';
|
||
|
||
@override
|
||
String get voiceUnavailable => 'Голос сейчас недоступен';
|
||
|
||
@override
|
||
String get requestingVoice => 'Запрос голоса';
|
||
}
|