From 69e9fffa213f9742393093887f8a1d771ad2308b Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 5 Mar 2026 01:08:50 +0300 Subject: [PATCH 01/11] initial russian translation --- .gitignore | 1 + docs/GLOSSARY_RU.md | 263 + lib/l10n/app_ru.arb | 16636 +++++++++++++++++++++--------------------- 3 files changed, 8582 insertions(+), 8318 deletions(-) create mode 100644 docs/GLOSSARY_RU.md diff --git a/.gitignore b/.gitignore index 5f622306..3948a161 100644 --- a/.gitignore +++ b/.gitignore @@ -131,6 +131,7 @@ assets/widget_templates/*.json !/docs/ARCHITECTURE.md !/docs/BACKEND.md !/docs/RELEASING.md +!/docs/GLOSSARY*.md # Scripts dependencies /scripts/node_modules/ diff --git a/docs/GLOSSARY_RU.md b/docs/GLOSSARY_RU.md new file mode 100644 index 00000000..33cb6bff --- /dev/null +++ b/docs/GLOSSARY_RU.md @@ -0,0 +1,263 @@ +# Глоссарий терминов — Socialmesh (EN → RU) + +Справочник терминов, используемых в переводе приложения на русский язык. +Обновлён: 2026-03-05 | Покрытие: 8404/8675 ключей (96%) + +--- + +## Основные концепции Mesh-сети + +| English | Русский | Примечание | +|---------|---------|------------| +| Mesh (brand) | Mesh | Не переводить — название продукта | +| Mesh (network) | сеть / сеть Mesh | В общем смысле — «сеть» | +| Node | Узел | Устройство в сети | +| Nodes | Узлы | | +| Signal | Сигнал | Эфемерная трансляция в сети | +| Signals | Сигналы | | +| Channel | Канал | Логический канал связи | +| Channels | Каналы | | +| Hop | хоп | 1 хоп, 2 хопа, 5 хопов (склонение ICU) | +| Hops | хопы / хопов | | +| Gateway | Шлюз | | +| Gateways | Шлюзы | | +| Router (role) | Маршрутизатор | Роль узла | +| Repeater | Ретранслятор | | +| Relay | Ретранслятор | | +| Relay Mode | Режим ретрансляции | | +| Client (role) | Клиент | Роль узла по умолчанию | +| Tracker (role) | Трекер | Роль узла | +| Sensor (role) | Сенсор | Роль узла | +| Neighbor | Сосед | Соседний узел | +| Neighbors | Соседи | | +| Topology | Топология сети | | +| Network Topology | Топология сети | | +| Traceroute | Трассировка | | +| Store & Forward | Сохранение и пересылка | | +| NodeDex | NodeDex | Не переводить — название фичи | +| Aether | Aether | Не переводить — название фичи | +| Sigil | Sigil | Не переводить — название фичи | +| Explorer Title | Explorer Title | Не переводить — название фичи | +| Meshtastic | Meshtastic | Не переводить — бренд | +| MeshCore | MeshCore | Не переводить — бренд | + +--- + +## Радио и технические параметры + +| English | Русский | Примечание | +|---------|---------|------------| +| Frequency | Частота | | +| Region | Регион | Регион радиочастот | +| Channel Utilization | Загрузка канала | | +| Air Util | Эфирное время | | +| Signal Strength | Уровень сигнала | | +| SNR | SNR | Не переводить — Signal-to-Noise Ratio | +| RSSI | RSSI | Не переводить — уровень сигнала | +| dBm | дБм | | +| MHz | MHz | Не переводить | +| Spread Factor | Коэффициент расширения | | +| Bandwidth | Полоса пропускания | | +| Coding Rate | Скорость кодирования | | +| TX Power | Мощность передачи (TX) | | +| Link Budget / RF Link Budget | Бюджет радиолинии | | +| Path Loss | Потери на трассе | | +| Link Margin | Запас линии | | +| BLE | BLE | Не переводить — Bluetooth Low Energy | +| LoRa | LoRa | Не переводить — технология | +| MQTT | MQTT | Не переводить — протокол | +| PKI | PKI | Не переводить — инфраструктура ключей | + +--- + +## Навигация и интерфейс + +| English | Русский | Примечание | +|---------|---------|------------| +| Dashboard | Панель | | +| Feed | Лента | | +| Map | Карта | | +| Settings | Настройки | | +| Profile | Профиль | | +| Search | Поиск / Найти | В зависимости от контекста | +| Sign In | Вход | Экран входа | +| Sign In (button) | Войти | Кнопка | +| Sign Out | Выйти | | +| Sign Up | Регистрация | Экран регистрации | +| Sign Up (button) | Зарегистрироваться | Кнопка | +| About | О приложении | | +| Theme / Theme Settings | Настройки темы | | +| Dark Mode | Тёмный режим | | +| Light Mode | Светлый режим | | +| Appearance | Внешний вид | | +| Automations | Автоматизации | Раздел автоматизаций | + +--- + +## Сообщения и чат + +| English | Русский | Примечание | +|---------|---------|------------| +| Message | Сообщение | | +| Messages | Сообщения | | +| Chat | Чат | | +| Direct Message | Личное сообщение | | +| Broadcast | Трансляция | | +| Thread | Цепочка / ветка | | +| Reply | Ответить | | +| Reaction | Реакция | | +| Canned Messages / Quick Responses | Быстрые ответы | | +| Muted | Без звука | Значок отключённого звука | + +--- + +## Управление устройством + +| English | Русский | Примечание | +|---------|---------|------------| +| Device | Устройство | | +| Battery | Аккумулятор | | +| Firmware | Прошивка | | +| Reboot | Перезагрузить | | +| Shutdown | Выключить | | +| Range Test | Тест дальности | | +| Telemetry | Телеметрия | | +| Position | Местоположение | | +| Location | Местоположение | | +| GPS | GPS | Не переводить | +| OLED | OLED | Не переводить | + +--- + +## Шифрование и безопасность + +| English | Русский | Примечание | +|---------|---------|------------| +| Encryption | Шифрование | | +| Public Key | Публичный ключ | | +| Private Key | Закрытый ключ | | +| Admin Keys | Ключи администратора | | +| Channel Key | Ключ канала | | +| PSK | PSK | Не переводить — Pre-Shared Key | +| Open (channel privacy) | Открытый | | +| Shared (channel privacy) | Общий | | +| Private (channel privacy) | Приватный | | +| Maximum (channel privacy) | Максимальный | | + +--- + +## Социальные функции + +| English | Русский | Примечание | +|---------|---------|------------| +| Account | Аккаунт | | +| Premium | Премиум | | +| Subscription | Подписка | | +| Followers | Подписчики | | +| Following | Подписки | | +| Block | Заблокировать | | +| Report | Сообщить | | +| Mute | Без звука | Отключить уведомления | +| Encounter | Встреча | Встреча с узлом | +| Encounters | Встречи | | +| Social | Социальные | | + +--- + +## Карта и геоданные + +| English | Русский | Примечание | +|---------|---------|------------| +| Coverage | Покрытие | | +| Heatmap | Тепловая карта | | +| Waypoint | Точка маршрута | | +| Waypoints | Точки маршрута | | +| Track | Трек | | +| History | История | | +| Line of Sight | Прямая видимость | | +| Fresnel Zone | Зона Френеля | | +| Geofence | Геозона | | +| Geofence Center | Центр геозоны | | + +--- + +## Автоматизация + +| English | Русский | Примечание | +|---------|---------|------------| +| Automation | Автоматизация | | +| Trigger | Триггер | | +| Action | Действие | | +| Condition | Условие | | +| IFTTT | IFTTT | Не переводить — бренд | + +--- + +## Администрирование + +| English | Русский | Примечание | +|---------|---------|------------| +| Remote Admin | Удалённое администрирование | | +| Moderation | Модерация | | +| Deep Link | Глубокая ссылка | | +| Broadcast (admin) | Трансляция | | +| Widget | Виджет | | +| Widgets | Виджеты | | + +--- + +## Общие UI-термины + +| English | Русский | Примечание | +|---------|---------|------------| +| Notification | Уведомление | | +| Alert | Оповещение | | +| Permission | Разрешение | | +| Import | Импортировать | | +| Export | Экспорт | | +| Share | Поделиться | | +| Backup | Создать копию | | +| Sync | Синхронизировать | | +| Offline | Офлайн | | +| Online | Онлайн | | +| Connected | Подключено | | +| Disconnected | Отключено | | +| Error | Ошибка | | +| Warning | Предупреждение | | +| Cancel | Отмена | | +| Confirm | Подтвердить | | +| Delete | Удалить | | +| Save | Сохранить | | +| Edit | Редактировать | | +| Add | Добавить | | +| Remove | Удалить | | +| Create | Создать | | +| Close | Закрыть | | +| Done | Готово | | +| Next | Далее | | +| Back | Назад | | +| Skip | Пропустить | | +| Retry | Повторить | | +| Refresh | Обновить | | +| Loading | Загрузка... | | +| Загрузка | Loading... | | + +--- + +## Обращение к пользователю + +- Форма обращения: **«вы»** (с маленькой буквы, формально) +- Примеры: «Ваш профиль», «Вы уверены?», «Вам отправлено сообщение» + +## Множественные формы (ICU) + +``` +{count, plural, =1{1 узел} few{{count} узла} many{{count} узлов} other{{count} узла}} +``` + +| Форма | Когда применяется | +|-------|-------------------| +| `=1` | Ровно 1 | +| `few` | 2–4, 22–24, 32–34, … | +| `many` | 5–20, 25–30, … | +| `other` | Дроби; обязателен всегда | diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index d0b149fb..f4a1ac21 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -1,1329 +1,1329 @@ { "@@locale": "ru", - "adminProductsActivate": "Activate", - "adminProductsActive": "Active", - "adminProductsActiveSubtitle": "Product is visible in the shop", - "adminProductsAddImage": "Add Image", - "adminProductsAddTitle": "Add Product", - "adminProductsAddTooltip": "Add Product", - "adminProductsAllCategories": "All Categories", - "adminProductsBasicInfoSection": "Basic Information", - "adminProductsBatteryHint": "e.g., 4000mAh", - "adminProductsBatteryLabel": "Battery Capacity", + "adminProductsActivate": "Активировать", + "adminProductsActive": "Активный", + "adminProductsActiveSubtitle": "Товар виден в магазине", + "adminProductsAddImage": "Добавить изображение", + "adminProductsAddTitle": "Добавить товар", + "adminProductsAddTooltip": "Добавить товар", + "adminProductsAllCategories": "Все категории", + "adminProductsBasicInfoSection": "Основная информация", + "adminProductsBatteryHint": "напр., 4000mAh", + "adminProductsBatteryLabel": "Ёмкость аккумулятора", "adminProductsBluetooth": "Bluetooth", - "adminProductsCategoryLabel": "Category *", - "adminProductsCategorySellerSection": "Category & Seller", - "adminProductsChipsetHint": "e.g., ESP32-S3", - "adminProductsChipsetLabel": "Chipset", - "adminProductsComparePriceHint": "Original price for sale", - "adminProductsComparePriceLabel": "Compare at Price", - "adminProductsCreate": "Create Product", - "adminProductsCreated": "Product created", - "adminProductsDeactivate": "Deactivate", - "adminProductsDelete": "Delete", - "adminProductsDeleteConfirmMessage": "Are you sure you want to permanently delete this product?", - "adminProductsDeleteConfirmTitle": "Delete Product", - "adminProductsDeleteMenu": "Delete", - "adminProductsDeleteMessage": "Are you sure you want to permanently delete \"{name}\"?\n\nThis action cannot be undone.", - "adminProductsDeleteTitle": "Delete Product", - "adminProductsDeleteTooltip": "Delete", - "adminProductsDeleted": "Product deleted", - "adminProductsDeletedSuccess": "Product deleted", - "adminProductsDimensionsHint": "e.g., 100x50x25mm", - "adminProductsDimensionsLabel": "Dimensions", - "adminProductsDisplay": "Display", - "adminProductsEdit": "Edit", - "adminProductsEditTitle": "Edit Product", - "adminProductsErrorLoadingSellers": "Error loading sellers: {error}", - "adminProductsFeatured": "Featured", - "adminProductsFeaturedBadge": "FEATURED", - "adminProductsFeaturedOrderHelper": "Controls display order in featured section", - "adminProductsFeaturedOrderHint": "Lower numbers appear first (0 = top)", - "adminProductsFeaturedOrderLabel": "Featured Order", - "adminProductsFeaturedSubtitle": "Show in featured products section", - "adminProductsFilterTooltip": "Filter by category", - "adminProductsFrequencyBandsSection": "Frequency Bands", - "adminProductsFullDescHint": "Detailed product description", - "adminProductsFullDescLabel": "Full Description *", + "adminProductsCategoryLabel": "Категория *", + "adminProductsCategorySellerSection": "Категория и продавец", + "adminProductsChipsetHint": "напр., ESP32-S3", + "adminProductsChipsetLabel": "Чипсет", + "adminProductsComparePriceHint": "Исходная цена для распродажи", + "adminProductsComparePriceLabel": "Цена для сравнения", + "adminProductsCreate": "Создать товар", + "adminProductsCreated": "Товар создан", + "adminProductsDeactivate": "Деактивировать", + "adminProductsDelete": "Удалить", + "adminProductsDeleteConfirmMessage": "Вы уверены, что хотите безвозвратно удалить этот товар?", + "adminProductsDeleteConfirmTitle": "Удалить товар", + "adminProductsDeleteMenu": "Удалить", + "adminProductsDeleteMessage": "Вы уверены, что хотите безвозвратно удалить \"{name}\"?\n\nЭто действие нельзя отменить.", + "adminProductsDeleteTitle": "Удалить товар", + "adminProductsDeleteTooltip": "Удалить", + "adminProductsDeleted": "Товар удалён", + "adminProductsDeletedSuccess": "Товар удалён", + "adminProductsDimensionsHint": "напр., 100x50x25mm", + "adminProductsDimensionsLabel": "Размеры", + "adminProductsDisplay": "Дисплей", + "adminProductsEdit": "Редактировать", + "adminProductsEditTitle": "Редактировать товар", + "adminProductsErrorLoadingSellers": "Ошибка загрузки продавцов: {error}", + "adminProductsFeatured": "Рекомендуемый", + "adminProductsFeaturedBadge": "РЕКОМЕНДУЕМЫЙ", + "adminProductsFeaturedOrderHelper": "Управляет порядком отображения в разделе рекомендуемых", + "adminProductsFeaturedOrderHint": "Меньшие числа отображаются первыми (0 = верхняя позиция)", + "adminProductsFeaturedOrderLabel": "Порядок в рекомендуемых", + "adminProductsFeaturedSubtitle": "Показывать в разделе рекомендуемых товаров", + "adminProductsFilterTooltip": "Фильтровать по категории", + "adminProductsFrequencyBandsSection": "Диапазоны частот", + "adminProductsFullDescHint": "Подробное описание товара", + "adminProductsFullDescLabel": "Полное описание *", "adminProductsGps": "GPS", - "adminProductsHideInactive": "Hide inactive", - "adminProductsImageRequired": "At least one image is required", - "adminProductsImageWarning": "Please add at least one image", - "adminProductsImagesSection": "Product Images", - "adminProductsInStock": "In Stock", - "adminProductsInactiveBadge": "INACTIVE", - "adminProductsInvalid": "Invalid", - "adminProductsLoraChipHint": "e.g., SX1262", - "adminProductsLoraChipLabel": "LoRa Chip", - "adminProductsMainImage": "Main", - "adminProductsNameHint": "e.g., T-Beam Supreme", - "adminProductsNameLabel": "Product Name *", - "adminProductsNotFound": "No products found", - "adminProductsPhysicalSpecsSection": "Physical Specifications", - "adminProductsPriceLabel": "Price (USD) *", - "adminProductsPricingSection": "Pricing", - "adminProductsPurchaseLinkSection": "Purchase Link", - "adminProductsPurchaseUrlLabel": "Purchase URL", - "adminProductsRequired": "Required", - "adminProductsSaveChanges": "Save Changes", - "adminProductsSearchHint": "Search products...", - "adminProductsSelectSeller": "Select seller", - "adminProductsSelectSellerWarning": "Please select a seller", - "adminProductsSellerLabel": "Seller *", - "adminProductsShortDescHint": "Brief summary (max 150 chars)", - "adminProductsShortDescLabel": "Short Description", - "adminProductsShowInactive": "Show inactive", - "adminProductsStockHint": "Leave empty for unlimited", - "adminProductsStockLabel": "Stock Quantity", - "adminProductsStockSection": "Stock & Status", - "adminProductsTagsHint": "meshtastic, lora, gps (comma separated)", - "adminProductsTagsLabel": "Tags", - "adminProductsTagsSection": "Tags", - "adminProductsTechSpecsSection": "Technical Specifications", - "adminProductsTitle": "Manage Products", - "adminProductsUpdated": "Product updated", - "adminProductsUploading": "Uploading...", - "adminProductsVendorUnverifiedSubtitle": "Mark when vendor confirms all specs are accurate", - "adminProductsVendorVerificationSection": "Vendor Verification", - "adminProductsVendorVerifiedSubtitle": "Specifications have been verified by the vendor", - "adminProductsVendorVerifiedTitle": "Vendor Verified Specs", - "adminProductsWeightHint": "e.g., 50g", - "adminProductsWeightLabel": "Weight", + "adminProductsHideInactive": "Скрыть неактивные", + "adminProductsImageRequired": "Требуется хотя бы одно изображение", + "adminProductsImageWarning": "Пожалуйста, добавьте хотя бы одно изображение", + "adminProductsImagesSection": "Изображения товара", + "adminProductsInStock": "В наличии", + "adminProductsInactiveBadge": "НЕАКТИВНЫЙ", + "adminProductsInvalid": "Недействительный", + "adminProductsLoraChipHint": "напр., SX1262", + "adminProductsLoraChipLabel": "Чип LoRa", + "adminProductsMainImage": "Главное", + "adminProductsNameHint": "напр., T-Beam Supreme", + "adminProductsNameLabel": "Название товара *", + "adminProductsNotFound": "Товары не найдены", + "adminProductsPhysicalSpecsSection": "Физические характеристики", + "adminProductsPriceLabel": "Цена (USD) *", + "adminProductsPricingSection": "Ценообразование", + "adminProductsPurchaseLinkSection": "Ссылка для покупки", + "adminProductsPurchaseUrlLabel": "URL для покупки", + "adminProductsRequired": "Обязательно", + "adminProductsSaveChanges": "Сохранить изменения", + "adminProductsSearchHint": "Поиск товаров...", + "adminProductsSelectSeller": "Выберите продавца", + "adminProductsSelectSellerWarning": "Пожалуйста, выберите продавца", + "adminProductsSellerLabel": "Продавец *", + "adminProductsShortDescHint": "Краткое описание (макс. 150 символов)", + "adminProductsShortDescLabel": "Краткое описание", + "adminProductsShowInactive": "Показать неактивные", + "adminProductsStockHint": "Оставьте пустым для неограниченного количества", + "adminProductsStockLabel": "Количество на складе", + "adminProductsStockSection": "Запасы и статус", + "adminProductsTagsHint": "meshtastic, lora, gps (через запятую)", + "adminProductsTagsLabel": "Теги", + "adminProductsTagsSection": "Теги", + "adminProductsTechSpecsSection": "Технические характеристики", + "adminProductsTitle": "Управление товарами", + "adminProductsUpdated": "Товар обновлён", + "adminProductsUploading": "Загрузка...", + "adminProductsVendorUnverifiedSubtitle": "Отметьте, когда поставщик подтвердит точность всех характеристик", + "adminProductsVendorVerificationSection": "Верификация поставщика", + "adminProductsVendorVerifiedSubtitle": "Характеристики проверены поставщиком", + "adminProductsVendorVerifiedTitle": "Характеристики подтверждены поставщиком", + "adminProductsWeightHint": "напр., 50g", + "adminProductsWeightLabel": "Вес", "adminProductsWifi": "WiFi", - "adminSellersActivate": "Activate", - "adminSellersActive": "Active", - "adminSellersActiveSubtitle": "Seller is visible in the shop", - "adminSellersAddTitle": "Add Seller", - "adminSellersAddTooltip": "Add Seller", - "adminSellersBasicInfoSection": "Basic Information", - "adminSellersCancel": "Cancel", - "adminSellersClearDiscount": "Clear Discount Code", - "adminSellersContactInfoSection": "Contact Information", - "adminSellersCountriesHint": "US, CA, UK, DE (comma separated)", - "adminSellersCountriesLabel": "Countries", - "adminSellersCreate": "Create Seller", - "adminSellersCreated": "Seller created", - "adminSellersDangerZone": "Danger Zone", - "adminSellersDeactivate": "Deactivate", - "adminSellersDeleteConfirm": "Delete", - "adminSellersDeleteDescription": "Permanently delete this seller and deactivate all their products. This action cannot be undone.", - "adminSellersDeleteDialogMessage": "Are you sure you want to permanently delete \"{name}\"?", - "adminSellersDeleteDialogTitle": "Delete Seller", - "adminSellersDeletePermanently": "Delete Seller Permanently", - "adminSellersDeleteProductWarning": "This seller has {productCount} products. Deleting the seller will also delete all their products.", - "adminSellersDeleteTitle": "Delete Seller", - "adminSellersDeleteTooltip": "Delete Seller", - "adminSellersDeleteUndoWarning": "This action cannot be undone.", - "adminSellersDeleted": "Seller deleted", - "adminSellersDescriptionHint": "Brief description of the seller", - "adminSellersDescriptionLabel": "Description", - "adminSellersDiscountCodeHint": "e.g., MESH10", - "adminSellersDiscountCodeLabel": "Discount Code", - "adminSellersDiscountDisplayHint": "e.g., 10% off for Socialmesh users", - "adminSellersDiscountDisplayLabel": "Display Label", - "adminSellersDiscountExpired": "Discount code has expired", - "adminSellersDiscountExpiryLabel": "Expiry Date (optional)", - "adminSellersDiscountNoExpiry": "No expiry", - "adminSellersDiscountSection": "Partner Discount Code", - "adminSellersDiscountTermsHint": "e.g., Cannot be combined with other offers", - "adminSellersDiscountTermsLabel": "Terms & Conditions", - "adminSellersEdit": "Edit", - "adminSellersEditTitle": "Edit Seller", + "adminSellersActivate": "Активировать", + "adminSellersActive": "Активный", + "adminSellersActiveSubtitle": "Продавец виден в магазине", + "adminSellersAddTitle": "Добавить продавца", + "adminSellersAddTooltip": "Добавить продавца", + "adminSellersBasicInfoSection": "Основная информация", + "adminSellersCancel": "Отмена", + "adminSellersClearDiscount": "Очистить код скидки", + "adminSellersContactInfoSection": "Контактная информация", + "adminSellersCountriesHint": "US, CA, UK, DE (через запятую)", + "adminSellersCountriesLabel": "Страны", + "adminSellersCreate": "Создать продавца", + "adminSellersCreated": "Продавец создан", + "adminSellersDangerZone": "Опасная зона", + "adminSellersDeactivate": "Деактивировать", + "adminSellersDeleteConfirm": "Удалить", + "adminSellersDeleteDescription": "Безвозвратно удалить этого продавца и деактивировать все его товары. Это действие нельзя отменить.", + "adminSellersDeleteDialogMessage": "Вы уверены, что хотите безвозвратно удалить \"{name}\"?", + "adminSellersDeleteDialogTitle": "Удалить продавца", + "adminSellersDeletePermanently": "Удалить продавца навсегда", + "adminSellersDeleteProductWarning": "У этого продавца {productCount} товаров. Удаление продавца также удалит все его товары.", + "adminSellersDeleteTitle": "Удалить продавца", + "adminSellersDeleteTooltip": "Удалить продавца", + "adminSellersDeleteUndoWarning": "Это действие нельзя отменить.", + "adminSellersDeleted": "Продавец удалён", + "adminSellersDescriptionHint": "Краткое описание продавца", + "adminSellersDescriptionLabel": "Описание", + "adminSellersDiscountCodeHint": "напр., MESH10", + "adminSellersDiscountCodeLabel": "Код скидки", + "adminSellersDiscountDisplayHint": "напр., Скидка 10% для пользователей Socialmesh", + "adminSellersDiscountDisplayLabel": "Отображаемое название", + "adminSellersDiscountExpired": "Срок действия кода скидки истёк", + "adminSellersDiscountExpiryLabel": "Дата истечения (необязательно)", + "adminSellersDiscountNoExpiry": "Без срока действия", + "adminSellersDiscountSection": "Партнёрский код скидки", + "adminSellersDiscountTermsHint": "напр., Нельзя совмещать с другими акциями", + "adminSellersDiscountTermsLabel": "Условия и положения", + "adminSellersEdit": "Редактировать", + "adminSellersEditTitle": "Редактировать продавца", "adminSellersEmailHint": "support@example.com", - "adminSellersEmailLabel": "Contact Email", - "adminSellersHideInactive": "Hide inactive", - "adminSellersInactiveBadge": "INACTIVE", - "adminSellersLogoSection": "Seller Logo", - "adminSellersNameHint": "e.g., LilyGO, RAK Wireless", - "adminSellersNameLabel": "Seller Name *", - "adminSellersNotFound": "No sellers found", - "adminSellersOfficialPartner": "Official Partner", - "adminSellersOfficialPartnerSubtitle": "Display as official Meshtastic partner", - "adminSellersPartnerBadge": "PARTNER", - "adminSellersRemoveLogo": "Remove", - "adminSellersSaveChanges": "Save Changes", - "adminSellersSearchHint": "Search sellers...", - "adminSellersShippingSection": "Shipping Countries", - "adminSellersShowInactive": "Show inactive", - "adminSellersStatusSection": "Status & Verification", - "adminSellersTitle": "Manage Sellers", - "adminSellersUpdated": "Seller updated", - "adminSellersUploadLogo": "Upload Logo", - "adminSellersUploading": "Uploading...", - "adminSellersVerifiedBadge": "VERIFIED", - "adminSellersVerifiedSubtitle": "Seller identity has been verified", - "adminSellersVerifiedToggle": "Verified", - "adminSellersWebsiteLabel": "Website URL *", - "aetherDetailAltitude": "Altitude", - "aetherDetailArrival": "Arrival", - "aetherDetailCoverageRadius": "Coverage Radius", - "aetherDetailDeparture": "Departure", - "aetherDetailDistanceAway": "{distance} km away", - "aetherDetailFlightDetails": "Flight Details", - "aetherDetailGroundSpeed": "Ground Speed", - "aetherDetailHeading": "Heading", - "aetherDetailLivePosition": "Live Position", - "aetherDetailNode": "Node", - "aetherDetailNotes": "Notes", - "aetherDetailOperator": "Operator", - "aetherDetailPositionUnavailable": "Position data unavailable", - "aetherDetailReceptions": "Receptions", - "aetherDetailReceptionsValue": "{count} reported", - "aetherDetailRefreshTooltip": "Refresh position", - "aetherDetailReportButton": "I Received This Flight!", - "aetherDetailReportsError": "Error loading reports", - "aetherDetailReportsTitle": "Reception Reports", - "aetherDetailShareCopied": "Flight link copied to clipboard", - "aetherDetailShareError": "Could not share flight: {error}", - "aetherDetailShareTooltip": "Share flight", - "aetherDetailUnknownNode": "Unknown node", - "aetherDetailUpdated": "Updated {time}", - "aetherDuplicateReport": "You have already reported this flight", - "aetherEmptyActionSchedule": "Schedule Flight", - "aetherEmptyActiveSubtitle": "No Meshtastic nodes currently in the air.\nBe the first to schedule one!", - "aetherEmptyActiveTitle": "No Active Flights", - "aetherEmptyAllSubtitle": "No flights scheduled yet.\nBe the first to share your journey!", - "aetherEmptyAllTitle": "No Flights Found", - "aetherErrorWithDetails": "Error: {error}", - "aetherEmptyMyFlightsSubtitle": "You haven't scheduled any flights yet.\nTap the button above to add one!", - "aetherEmptyMyFlightsTitle": "No Flights Scheduled", - "aetherEmptySearchSubtitle": "No results match \"{query}\".\nTry a different search term.", - "aetherEmptyTagline1": "No flights scheduled yet.\nBe the first to share your airborne journey!", - "aetherEmptyTagline2": "Track Meshtastic nodes at altitude.\nSee how far your signal reaches from the sky.", - "aetherEmptyTagline3": "Compete on the leaderboard.\nLongest range contacts earn top spots.", - "aetherEmptyTagline4": "Schedule your next flight.\nShare your departure and arrival airports.", - "aetherEmptyTitleKeyword": "flights", - "aetherEmptyTitlePrefix": "No ", - "aetherEmptyTitleSuffix": " in the air", - "aetherEmptyUpcomingSubtitle": "No flights scheduled yet.\nPlan your next airborne test!", - "aetherEmptyUpcomingTitle": "No Upcoming Flights", - "aetherFilterActive": "Active", - "aetherFilterAll": "All", - "aetherFilterMyFlights": "My Flights", - "aetherFilterUpcoming": "Upcoming", - "aetherFormEnterFlightNumber": "Enter flight number", - "aetherFormInvalidFlightFormat": "Invalid format (e.g., UA123, EXS49MY)", - "aetherFormRequired": "Required", - "aetherFormUnknownAirport": "Unknown airport", - "aetherFormUseLetterCode": "Use 3-4 letter code", - "aetherInfoGroundStations": "Ground stations watch for your signal", - "aetherInfoLoraRange": "At 35,000ft, LoRa can reach 400+ km!", - "aetherInfoReceptions": "Report receptions & set range records!", - "aetherInfoSchedule": "Schedule your flight with your node", - "aetherInfoTagline": "Track Meshtastic nodes at altitude!", + "adminSellersEmailLabel": "Контактный email", + "adminSellersHideInactive": "Скрыть неактивных", + "adminSellersInactiveBadge": "НЕАКТИВНЫЙ", + "adminSellersLogoSection": "Логотип продавца", + "adminSellersNameHint": "напр., LilyGO, RAK Wireless", + "adminSellersNameLabel": "Название продавца *", + "adminSellersNotFound": "Продавцы не найдены", + "adminSellersOfficialPartner": "Официальный партнёр", + "adminSellersOfficialPartnerSubtitle": "Отображать как официального партнёра Meshtastic", + "adminSellersPartnerBadge": "ПАРТНЁР", + "adminSellersRemoveLogo": "Удалить", + "adminSellersSaveChanges": "Сохранить изменения", + "adminSellersSearchHint": "Поиск продавцов...", + "adminSellersShippingSection": "Страны доставки", + "adminSellersShowInactive": "Показать неактивных", + "adminSellersStatusSection": "Статус и верификация", + "adminSellersTitle": "Управление продавцами", + "adminSellersUpdated": "Продавец обновлён", + "adminSellersUploadLogo": "Загрузить логотип", + "adminSellersUploading": "Загрузка...", + "adminSellersVerifiedBadge": "ПРОВЕРЕННЫЙ", + "adminSellersVerifiedSubtitle": "Личность продавца подтверждена", + "adminSellersVerifiedToggle": "Проверенный", + "adminSellersWebsiteLabel": "URL сайта *", + "aetherDetailAltitude": "Высота", + "aetherDetailArrival": "Прибытие", + "aetherDetailCoverageRadius": "Радиус покрытия", + "aetherDetailDeparture": "Отправление", + "aetherDetailDistanceAway": "{distance} км", + "aetherDetailFlightDetails": "Детали рейса", + "aetherDetailGroundSpeed": "Путевая скорость", + "aetherDetailHeading": "Курс", + "aetherDetailLivePosition": "Позиция в реальном времени", + "aetherDetailNode": "Узел", + "aetherDetailNotes": "Заметки", + "aetherDetailOperator": "Оператор", + "aetherDetailPositionUnavailable": "Данные о позиции недоступны", + "aetherDetailReceptions": "Приёмы сигнала", + "aetherDetailReceptionsValue": "Зафиксировано: {count}", + "aetherDetailRefreshTooltip": "Обновить позицию", + "aetherDetailReportButton": "Я принял этот рейс!", + "aetherDetailReportsError": "Ошибка загрузки отчётов", + "aetherDetailReportsTitle": "Отчёты о приёме сигнала", + "aetherDetailShareCopied": "Ссылка на рейс скопирована в буфер обмена", + "aetherDetailShareError": "Не удалось поделиться рейсом: {error}", + "aetherDetailShareTooltip": "Поделиться рейсом", + "aetherDetailUnknownNode": "Неизвестный узел", + "aetherDetailUpdated": "Обновлено {time}", + "aetherDuplicateReport": "Вы уже сообщали об этом рейсе", + "aetherEmptyActionSchedule": "Запланировать рейс", + "aetherEmptyActiveSubtitle": "Нет узлов Meshtastic в воздухе.\nБудьте первым, кто запланирует полёт!", + "aetherEmptyActiveTitle": "Нет активных рейсов", + "aetherEmptyAllSubtitle": "Рейсов пока нет.\nБудьте первым, кто поделится своим путешествием!", + "aetherEmptyAllTitle": "Рейсы не найдены", + "aetherErrorWithDetails": "Ошибка: {error}", + "aetherEmptyMyFlightsSubtitle": "Вы ещё не запланировали рейсов.\nНажмите кнопку выше, чтобы добавить!", + "aetherEmptyMyFlightsTitle": "Нет запланированных рейсов", + "aetherEmptySearchSubtitle": "Нет результатов для \"{query}\".\nПопробуйте другой запрос.", + "aetherEmptyTagline1": "Рейсов пока нет.\nБудьте первым, кто поделится воздушным путешествием!", + "aetherEmptyTagline2": "Отслеживайте узлы Meshtastic на высоте.\nПосмотрите, как далеко достигает ваш сигнал с неба.", + "aetherEmptyTagline3": "Соревнуйтесь в таблице лидеров.\nКонтакты на наибольшей дальности занимают верхние строчки.", + "aetherEmptyTagline4": "Запланируйте следующий рейс.\nУкажите аэропорты вылета и прилёта.", + "aetherEmptyTitleKeyword": "рейсов", + "aetherEmptyTitlePrefix": "Нет ", + "aetherEmptyTitleSuffix": " в воздухе", + "aetherEmptyUpcomingSubtitle": "Рейсов пока нет.\nСпланируйте следующий воздушный тест!", + "aetherEmptyUpcomingTitle": "Нет предстоящих рейсов", + "aetherFilterActive": "Активные", + "aetherFilterAll": "Все", + "aetherFilterMyFlights": "Мои рейсы", + "aetherFilterUpcoming": "Предстоящие", + "aetherFormEnterFlightNumber": "Введите номер рейса", + "aetherFormInvalidFlightFormat": "Неверный формат (например, UA123, EXS49MY)", + "aetherFormRequired": "Обязательное поле", + "aetherFormUnknownAirport": "Неизвестный аэропорт", + "aetherFormUseLetterCode": "Используйте код из 3–4 букв", + "aetherInfoGroundStations": "Наземные станции следят за вашим сигналом", + "aetherInfoLoraRange": "На высоте 35 000 футов LoRa может достигать 400+ км!", + "aetherInfoReceptions": "Сообщайте о приёмах и устанавливайте рекорды дальности!", + "aetherInfoSchedule": "Запланируйте рейс со своим узлом", + "aetherInfoTagline": "Отслеживайте узлы Meshtastic на высоте!", "aetherInfoTitle": "Aether", - "aetherLeaderboardEmpty": "Leaderboard Empty", - "aetherLeaderboardEmptySubtitle": "Be the first to report a reception from a sky node and claim the top spot!", - "aetherLeaderboardError": "Error Loading Leaderboard", - "aetherLeaderboardErrorSubtitle": "Pull to refresh and try again.", - "aetherLeaderboardSubtitle": "Global rankings by reception distance", - "aetherLeaderboardTitle": "Distance Leaderboard", - "aetherLeaderboardTooltip": "Leaderboard", - "aetherMatchInFlight": "IN FLIGHT", - "aetherMatchReportCta": "Tap to report your reception", - "aetherMenuAbout": "About Aether", - "aetherMenuHelp": "Help", - "aetherMenuSettings": "Settings", - "aetherNodeAlreadyHasFlight": "{nodeName} already has a flight ({flightNumber} — {status})", - "aetherOverlayDetected": "DETECTED", - "aetherOverlayReport": "Report", - "aetherPickerAirportCount": "{count} airports", - "aetherPickerArrivalTitle": "Arrival Airport", - "aetherPickerDepartureTitle": "Departure Airport", - "aetherPickerManualEntry": "You can still type the code manually", - "aetherPickerNoResults": "No airports found", - "aetherPickerResultCount": "{count, plural, =1{1 result} other{{count} results}}", - "aetherPickerSearchHint": "Search by code, city, or name", - "aetherReportAddNotes": "Add Notes", - "aetherReportEstimatedDistance": "Estimated distance ", - "aetherReportFlightEnded": "This flight has ended", - "aetherReportLocationDetected": "Location auto-detected", - "aetherReportLocationUnavailable": "Location unavailable", - "aetherReportNodeNotDetected": "Flight node not detected in your mesh network", - "aetherReportNotOnMesh": "This flight's node is not in your mesh network. You can only report a reception when the node is visible to your device.", - "aetherReportNotesHint": "Equipment, antenna, location details...", - "aetherReportNotesLabel": "Notes", - "aetherReportRemoveNotes": "Remove", + "aetherLeaderboardEmpty": "Таблица лидеров пуста", + "aetherLeaderboardEmptySubtitle": "Будьте первым, кто сообщит о приёме сигнала с воздушного узла, и займите первое место!", + "aetherLeaderboardError": "Ошибка загрузки таблицы лидеров", + "aetherLeaderboardErrorSubtitle": "Потяните вниз для обновления и повторите попытку.", + "aetherLeaderboardSubtitle": "Глобальный рейтинг по дальности приёма", + "aetherLeaderboardTitle": "Таблица лидеров по дальности", + "aetherLeaderboardTooltip": "Таблица лидеров", + "aetherMatchInFlight": "В ВОЗДУХЕ", + "aetherMatchReportCta": "Нажмите, чтобы сообщить о приёме", + "aetherMenuAbout": "О программе Aether", + "aetherMenuHelp": "Справка", + "aetherMenuSettings": "Настройки", + "aetherNodeAlreadyHasFlight": "{nodeName} уже имеет рейс ({flightNumber} — {status})", + "aetherOverlayDetected": "ОБНАРУЖЕН", + "aetherOverlayReport": "Сообщить", + "aetherPickerAirportCount": "{count} аэропортов", + "aetherPickerArrivalTitle": "Аэропорт прибытия", + "aetherPickerDepartureTitle": "Аэропорт отправления", + "aetherPickerManualEntry": "Вы можете ввести код вручную", + "aetherPickerNoResults": "Аэропорты не найдены", + "aetherPickerResultCount": "{count, plural, =1{1 результат} few{{count} результата} many{{count} результатов} other{{count} результата}}", + "aetherPickerSearchHint": "Поиск по коду, городу или названию", + "aetherReportAddNotes": "Добавить заметки", + "aetherReportEstimatedDistance": "Расчётное расстояние ", + "aetherReportFlightEnded": "Этот рейс завершён", + "aetherReportLocationDetected": "Местоположение определено автоматически", + "aetherReportLocationUnavailable": "Местоположение недоступно", + "aetherReportNodeNotDetected": "Узел рейса не обнаружен в вашей mesh-сети", + "aetherReportNotOnMesh": "Узел этого рейса не находится в вашей mesh-сети. Сообщить о приёме можно только тогда, когда узел виден вашему устройству.", + "aetherReportNotesHint": "Оборудование, антенна, описание места...", + "aetherReportNotesLabel": "Заметки", + "aetherReportRemoveNotes": "Удалить", "aetherReportRssiLabel": "RSSI ", "aetherReportSnrLabel": "SNR ", - "aetherReportSubmit": "Submit Report", - "aetherReportSubtitle": "I received flight {flightNumber} on my node!", - "aetherReportSuccess": "Reception reported!", - "aetherReportTitle": "Report Reception", - "aetherScheduleAlreadyValidatedTooltip": "Already validated", - "aetherScheduleArrivalBeforeDeparture": "Arrival must be after departure", - "aetherScheduleArrivalDateTitle": "Arrival Date", - "aetherScheduleArrivalTimeTitle": "Arrival Time", - "aetherScheduleBrowseTooltip": "Browse airports", - "aetherScheduleButton": "Schedule Flight", - "aetherScheduleConnectDevice": "Connect your Meshtastic device first", - "aetherScheduleConnectToSchedule": "Connect to schedule a flight", - "aetherScheduleDateLabel": "Date", - "aetherScheduleDepartureDateTitle": "Departure Date", - "aetherScheduleDepartureInPast": "Departure time is in the past", - "aetherScheduleDepartureTimeTitle": "Departure Time", - "aetherScheduleDepartureTooFar": "Departure cannot be more than a year from now", - "aetherScheduleDurationTooLong": "Flight duration exceeds 24 hours ({hours}h {minutes}m)", - "aetherScheduleDurationTooShort": "Flight duration must be at least 5 minutes", - "aetherScheduleError": "Error: {error}", + "aetherReportSubmit": "Отправить отчёт", + "aetherReportSubtitle": "Я принял рейс {flightNumber} на своём узле!", + "aetherReportSuccess": "Приём сигнала зафиксирован!", + "aetherReportTitle": "Сообщить о приёме", + "aetherScheduleAlreadyValidatedTooltip": "Уже подтверждён", + "aetherScheduleArrivalBeforeDeparture": "Время прибытия должно быть позже времени отправления", + "aetherScheduleArrivalDateTitle": "Дата прибытия", + "aetherScheduleArrivalTimeTitle": "Время прибытия", + "aetherScheduleBrowseTooltip": "Просмотр аэропортов", + "aetherScheduleButton": "Запланировать рейс", + "aetherScheduleConnectDevice": "Сначала подключите устройство Meshtastic", + "aetherScheduleConnectToSchedule": "Подключитесь, чтобы запланировать рейс", + "aetherScheduleDateLabel": "Дата", + "aetherScheduleDepartureDateTitle": "Дата отправления", + "aetherScheduleDepartureInPast": "Время отправления в прошлом", + "aetherScheduleDepartureTimeTitle": "Время отправления", + "aetherScheduleDepartureTooFar": "Отправление не может быть позже чем через год", + "aetherScheduleDurationTooLong": "Продолжительность рейса превышает 24 часа ({hours}ч {minutes}м)", + "aetherScheduleDurationTooShort": "Продолжительность рейса должна быть не менее 5 минут", + "aetherScheduleError": "Ошибка: {error}", "aetherScheduleFlightNumberHint": "UA123", - "aetherScheduleFlightNumberLabel": "Flight Number", - "aetherScheduleFlightOnGround": "Flight is currently on the ground", - "aetherScheduleFlightSelectedAlt": "Flight selected! {altitude} ft", - "aetherScheduleFlightTooltip": "Schedule Flight", + "aetherScheduleFlightNumberLabel": "Номер рейса", + "aetherScheduleFlightOnGround": "Рейс в настоящее время на земле", + "aetherScheduleFlightSelectedAlt": "Рейс выбран! {altitude} фут.", + "aetherScheduleFlightTooltip": "Запланировать рейс", "aetherScheduleFromHint": "LAX", - "aetherScheduleFromLabel": "From", - "aetherScheduleIncompleteMessage": "Could not auto-fill {fields} from OpenSky Network. Please enter these details manually below.", - "aetherScheduleIncompleteTitle": "Incomplete Flight Data", - "aetherScheduleIntroBanner": "Schedule your flight and share it on aether.socialmesh.app so the community can try to receive your signal!", - "aetherScheduleLoadingFlights": "Loading flights, please try again", - "aetherScheduleNoDeviceConnected": "No Device Connected", - "aetherScheduleNodeHasActiveFlight": "{nodeName} already has an active flight ({flightNumber})", - "aetherScheduleNotesHint": "Window seat, left side. Running at 20dBm.", - "aetherScheduleNotesLabel": "Notes", - "aetherScheduleResponsibilityTooltip": "Your Responsibility", - "aetherScheduleRouteExceedsRange": "{distance} — exceeds maximum aircraft range", - "aetherScheduleRouteFound": "Route found: {route}", - "aetherScheduleRouteSameAirport": "Same airport", - "aetherScheduleRouteTooClose": "{departure} and {arrival} are {distance} km apart — too close for a commercial flight", - "aetherScheduleSameAirport": "Departure and arrival cannot be the same airport", - "aetherScheduleSearchButton": "Search", - "aetherScheduleSearchTooltip": "Search flights", - "aetherScheduleSectionArrival": "Arrival Time (Optional)", - "aetherScheduleSectionDeparture": "Departure Time", - "aetherScheduleSectionFlight": "Flight Information", - "aetherScheduleSectionNotes": "Additional Notes (Optional)", - "aetherScheduleSelect": "Select", - "aetherScheduleSelectDepartureTime": "Please select departure date and time", - "aetherScheduleSignInRequired": "Sign in to schedule a flight", - "aetherScheduleSuccessInFlight": "Flight in flight!", - "aetherScheduleSuccessScheduled": "Flight scheduled!", - "aetherScheduleSwapTooltip": "Swap airports", - "aetherScheduleTimeLabel": "Time", - "aetherScheduleTip1": "Get a window seat if possible", - "aetherScheduleTip2": "Keep node near the window during flight", - "aetherScheduleTip3": "Higher TX power = longer range", - "aetherScheduleTip4": "Let others know your frequency/region", - "aetherScheduleTipsTitle": "Tips for best reception", - "aetherScheduleTitle": "Schedule Flight", + "aetherScheduleFromLabel": "Откуда", + "aetherScheduleIncompleteMessage": "Не удалось автоматически заполнить поля {fields} из OpenSky Network. Введите эти данные вручную ниже.", + "aetherScheduleIncompleteTitle": "Неполные данные рейса", + "aetherScheduleIntroBanner": "Запланируйте рейс и поделитесь им на aether.socialmesh.app, чтобы сообщество могло попытаться принять ваш сигнал!", + "aetherScheduleLoadingFlights": "Загрузка рейсов, попробуйте ещё раз", + "aetherScheduleNoDeviceConnected": "Устройство не подключено", + "aetherScheduleNodeHasActiveFlight": "{nodeName} уже имеет активный рейс ({flightNumber})", + "aetherScheduleNotesHint": "Место у окна, левая сторона. Мощность 20 дБм.", + "aetherScheduleNotesLabel": "Заметки", + "aetherScheduleResponsibilityTooltip": "Ваша ответственность", + "aetherScheduleRouteExceedsRange": "{distance} — превышает максимальную дальность воздушного судна", + "aetherScheduleRouteFound": "Маршрут найден: {route}", + "aetherScheduleRouteSameAirport": "Одинаковый аэропорт", + "aetherScheduleRouteTooClose": "{departure} и {arrival} находятся на расстоянии {distance} км — слишком близко для коммерческого рейса", + "aetherScheduleSameAirport": "Аэропорты отправления и прибытия не могут совпадать", + "aetherScheduleSearchButton": "Найти", + "aetherScheduleSearchTooltip": "Поиск рейсов", + "aetherScheduleSectionArrival": "Время прибытия (необязательно)", + "aetherScheduleSectionDeparture": "Время отправления", + "aetherScheduleSectionFlight": "Информация о рейсе", + "aetherScheduleSectionNotes": "Дополнительные заметки (необязательно)", + "aetherScheduleSelect": "Выбрать", + "aetherScheduleSelectDepartureTime": "Выберите дату и время отправления", + "aetherScheduleSignInRequired": "Войдите, чтобы запланировать рейс", + "aetherScheduleSuccessInFlight": "Рейс в воздухе!", + "aetherScheduleSuccessScheduled": "Рейс запланирован!", + "aetherScheduleSwapTooltip": "Поменять аэропорты местами", + "aetherScheduleTimeLabel": "Время", + "aetherScheduleTip1": "По возможности занимайте место у окна", + "aetherScheduleTip2": "Держите узел рядом с окном во время полёта", + "aetherScheduleTip3": "Чем выше мощность TX, тем больше дальность", + "aetherScheduleTip4": "Сообщите другим свою частоту/регион", + "aetherScheduleTipsTitle": "Советы для лучшего приёма", + "aetherScheduleTitle": "Запланировать рейс", "aetherScheduleToHint": "JFK", - "aetherScheduleToLabel": "To", - "aetherScheduleTooClose": "{departure} and {arrival} are only {distance} km apart — no commercial routes exist", - "aetherScheduleTooFar": "{departure} to {arrival} is {distance} — exceeds maximum aircraft range", - "aetherScheduleValidateFlightTooltip": "Validate flight", + "aetherScheduleToLabel": "Куда", + "aetherScheduleTooClose": "{departure} и {arrival} находятся всего в {distance} км — коммерческих маршрутов нет", + "aetherScheduleTooFar": "{departure} — {arrival}: {distance} — превышает максимальную дальность воздушного судна", + "aetherScheduleValidateFlightTooltip": "Проверить рейс", "aetherScreenTitle": "Aether", - "aetherSearchEmptySubtitle": "Try a different flight number or check\nif the flight is currently airborne", - "aetherSearchEmptyTitle": "No active flights found", - "aetherSearchError": "Search failed. Please try again.", - "aetherSearchFlightNumberHint": "Flight number (e.g. UA123)", - "aetherSearchHint": "Search flights, airports, nodes...", - "aetherSearchIdleSubtitle": "Type a callsign and press Search\nto find flights currently in the air", - "aetherSearchIdleTitle": "Search for active flights", - "aetherSearchOnGround": "On ground", - "aetherSearchRetry": "Retry", - "aetherSearchRouteFrom": "From {airport} · En route", - "aetherSearchRouteTo": "To {airport}", - "aetherSearchTitle": "Search Flights", - "aetherSearchTooltip": "Search", - "aetherShareText": "{flightNumber} {departure} → {arrival}\nTrack this Meshtastic flight on Aether:\n{url}", - "aetherSignInRequired": "Sign In Required", - "aetherSignInRequiredSubtitle": "Sign in to view and manage your scheduled flights.", - "aetherStatsActive": "Active", - "aetherStatsRecord": "Record", - "aetherStatsReports": "Reports", - "aetherStatsScheduled": "Scheduled", - "aetherStatusCompleted": "Completed", - "aetherStatusInFlight": "In Flight", - "aetherStatusScheduled": "Scheduled", - "aetherStatusUpcoming": "Upcoming", - "aetherValidationActive": "Flight is currently active!", - "aetherValidationActiveAlt": "Flight is currently active! {altitude} ft", - "aetherValidationEnterFlightFirst": "Enter a flight number first", - "aetherValidationFailed": "Failed to validate flight", - "aetherValidationInvalidFormat": "Invalid flight number format", - "aetherValidationRateLimited": "Rate limited. Try again in a few minutes.", - "aetherValidationVerified": "Flight verified in OpenSky records", - "ambientLightingBlue": "Blue", - "ambientLightingBrightness": "LED Brightness", - "ambientLightingCurrent": "Current", - "ambientLightingCurrentSubtitle": "LED drive current (brightness)", - "ambientLightingCurrentValue": "{milliamps} mA", - "ambientLightingCustomColor": "Custom Color", - "ambientLightingDeviceSupportInfo": "Ambient lighting is only available on devices with LED support (RAK WisBlock, T-Beam, etc.)", - "ambientLightingGreen": "Green", - "ambientLightingLedEnabled": "LED Enabled", - "ambientLightingLedEnabledSubtitle": "Turn ambient lighting on or off", - "ambientLightingPresetColors": "Preset Colors", - "ambientLightingRed": "Red", - "ambientLightingSave": "Save", - "ambientLightingSaveError": "Failed to save: {error}", - "ambientLightingSaved": "Ambient lighting saved", - "ambientLightingTitle": "Ambient Lighting", + "aetherSearchEmptySubtitle": "Попробуйте другой номер рейса или проверьте,\nнаходится ли рейс в воздухе", + "aetherSearchEmptyTitle": "Активных рейсов не найдено", + "aetherSearchError": "Ошибка поиска. Повторите попытку.", + "aetherSearchFlightNumberHint": "Номер рейса (например, UA123)", + "aetherSearchHint": "Поиск рейсов, аэропортов, узлов...", + "aetherSearchIdleSubtitle": "Введите callsign и нажмите «Найти»,\nчтобы найти рейсы в воздухе", + "aetherSearchIdleTitle": "Поиск активных рейсов", + "aetherSearchOnGround": "На земле", + "aetherSearchRetry": "Повторить", + "aetherSearchRouteFrom": "Из {airport} · В пути", + "aetherSearchRouteTo": "В {airport}", + "aetherSearchTitle": "Поиск рейсов", + "aetherSearchTooltip": "Поиск", + "aetherShareText": "{flightNumber} {departure} → {arrival}\nОтслеживайте этот Meshtastic-рейс в Aether:\n{url}", + "aetherSignInRequired": "Требуется вход", + "aetherSignInRequiredSubtitle": "Войдите, чтобы просматривать запланированные рейсы и управлять ими.", + "aetherStatsActive": "Активные", + "aetherStatsRecord": "Рекорд", + "aetherStatsReports": "Отчёты", + "aetherStatsScheduled": "Запланированные", + "aetherStatusCompleted": "Завершён", + "aetherStatusInFlight": "В полёте", + "aetherStatusScheduled": "Запланирован", + "aetherStatusUpcoming": "Предстоящий", + "aetherValidationActive": "Рейс в настоящее время активен!", + "aetherValidationActiveAlt": "Рейс в настоящее время активен! {altitude} фут.", + "aetherValidationEnterFlightFirst": "Сначала введите номер рейса", + "aetherValidationFailed": "Не удалось проверить рейс", + "aetherValidationInvalidFormat": "Неверный формат номера рейса", + "aetherValidationRateLimited": "Превышен лимит запросов. Повторите через несколько минут.", + "aetherValidationVerified": "Рейс подтверждён в базе OpenSky", + "ambientLightingBlue": "Синий", + "ambientLightingBrightness": "Яркость LED", + "ambientLightingCurrent": "Ток", + "ambientLightingCurrentSubtitle": "Ток питания LED (яркость)", + "ambientLightingCurrentValue": "{milliamps} мА", + "ambientLightingCustomColor": "Пользовательский цвет", + "ambientLightingDeviceSupportInfo": "Фоновое освещение доступно только на устройствах с поддержкой LED (RAK WisBlock, T-Beam и др.)", + "ambientLightingGreen": "Зелёный", + "ambientLightingLedEnabled": "LED включён", + "ambientLightingLedEnabledSubtitle": "Включить или выключить фоновое освещение", + "ambientLightingPresetColors": "Готовые цвета", + "ambientLightingRed": "Красный", + "ambientLightingSave": "Сохранить", + "ambientLightingSaveError": "Не удалось сохранить: {error}", + "ambientLightingSaved": "Фоновое освещение сохранено", + "ambientLightingTitle": "Фоновое освещение", "appTitle": "Socialmesh", - "arCalibratingSensors": "Calibrating sensors...", - "arCalibrationScreenAccuracyImproved": "Compass accuracy improved", - "arCalibrationScreenComplete": "CALIBRATION COMPLETE", - "arCalibrationScreenContinue": "CONTINUE TO AR", - "arCalibrationScreenInstructionAlmost": "Almost there!\nJust a bit more.", - "arCalibrationScreenInstructionIdle": "Move your device in a figure-8 pattern to calibrate the compass for accurate AR navigation.", - "arCalibrationScreenInstructionMoving": "Keep moving in a figure-8 pattern...\nFollow the glowing dot.", - "arCalibrationScreenInstructionProgress": "Great progress!\nContinue the figure-8 motion.", - "arCalibrationScreenSkip": "Skip for now", - "arCalibrationScreenStart": "START CALIBRATION", - "arCalibrationScreenTitle": "COMPASS CALIBRATION", - "arCouldNotOpenMaps": "Could not open maps for {name}", - "arEngineError": "AR ENGINE ERROR", - "arInitializingEngine": "INITIALIZING AR ENGINE", - "arNoCamerasAvailable": "No cameras available", - "arNodeBadgeCritical": "CRITICAL", - "arNodeBadgeMoving": "MOVING", - "arNodeBadgeNew": "NEW", - "arNodeBadgeOffline": "OFFLINE", - "arNodeBadgeWarning": "WARNING", - "arNodeDetailAltitude": "Altitude", - "arNodeDetailBattery": "Battery", - "arNodeDetailBearing": "BEARING", - "arNodeDetailDistance": "DISTANCE", - "arNodeDetailElevation": "ELEVATION", - "arNodeDetailLastHeard": "Last Heard", - "arNodeDetailNavigate": "Navigate", + "arCalibratingSensors": "Калибровка датчиков...", + "arCalibrationScreenAccuracyImproved": "Точность компаса улучшена", + "arCalibrationScreenComplete": "КАЛИБРОВКА ЗАВЕРШЕНА", + "arCalibrationScreenContinue": "ПЕРЕЙТИ К AR", + "arCalibrationScreenInstructionAlmost": "Почти готово!\nЕщё немного.", + "arCalibrationScreenInstructionIdle": "Двигайте устройство по траектории цифры 8, чтобы откалибровать компас для точной AR-навигации.", + "arCalibrationScreenInstructionMoving": "Продолжайте движение по траектории 8...\nСледуйте за светящейся точкой.", + "arCalibrationScreenInstructionProgress": "Отличный прогресс!\nПродолжайте движение по траектории 8.", + "arCalibrationScreenSkip": "Пропустить пока", + "arCalibrationScreenStart": "НАЧАТЬ КАЛИБРОВКУ", + "arCalibrationScreenTitle": "КАЛИБРОВКА КОМПАСА", + "arCouldNotOpenMaps": "Не удалось открыть карты для {name}", + "arEngineError": "ОШИБКА AR-ДВИЖКА", + "arInitializingEngine": "ИНИЦИАЛИЗАЦИЯ AR-ДВИЖКА", + "arNoCamerasAvailable": "Камеры недоступны", + "arNodeBadgeCritical": "КРИТИЧНО", + "arNodeBadgeMoving": "В ДВИЖЕНИИ", + "arNodeBadgeNew": "НОВЫЙ", + "arNodeBadgeOffline": "ОФЛАЙН", + "arNodeBadgeWarning": "ПРЕДУПРЕЖДЕНИЕ", + "arNodeDetailAltitude": "Высота", + "arNodeDetailBattery": "Аккумулятор", + "arNodeDetailBearing": "НАПРАВЛЕНИЕ", + "arNodeDetailDistance": "РАССТОЯНИЕ", + "arNodeDetailElevation": "ВЫСОТА НАД УРОВНЕМ МОРЯ", + "arNodeDetailLastHeard": "Последний сигнал", + "arNodeDetailNavigate": "Навигация", "arNodeDetailRssi": "RSSI", "arNodeDetailSnr": "SNR", - "arNodeDetailSpeed": "Speed", - "arNodeDetailUnknownNode": "Unknown Node", - "arNodeNoGpsPosition": "Node has no GPS position", - "arRetry": "RETRY", - "arSettingsAlerts": "Alerts", - "arSettingsAltimeter": "Altimeter", - "arSettingsCompass": "Compass", - "arSettingsDistanceFilter": "DISTANCE FILTER", - "arSettingsExplorer": "Explorer", - "arSettingsFavoritesOnly": "Favorites Only", - "arSettingsHorizon": "Horizon", - "arSettingsHudElements": "HUD ELEMENTS", - "arSettingsMaxDistance": "Max Distance", - "arSettingsMaxDistanceLabel": "100km", - "arSettingsMinDistanceLabel": "100m", - "arSettingsMinimal": "Minimal", - "arSettingsNodeFilters": "NODE FILTERS", - "arSettingsShowOfflineNodes": "Show Offline Nodes", - "arSettingsTactical": "Advanced", - "arSettingsViewMode": "VIEW MODE", - "arTouchLocked": "Touch locked", - "arTouchUnlocked": "Touch unlocked", - "arViewModeSelectorExp": "EXP", - "arViewModeSelectorMin": "MIN", - "arViewModeSelectorTac": "ADV", - "authMfaActiveMethods": "Active Methods", - "authMfaCancelButton": "Cancel", - "authMfaChangePhoneNumber": "Change Phone Number", - "authMfaCodeSentTo": "Verification code sent to {phoneNumber}", - "authMfaDateDaysAgo": "{count} days ago", - "authMfaDateMonthsAgo": "{count, plural, =1{1 month ago} other{{count} months ago}}", - "authMfaDateToday": "today", - "authMfaDateWeeksAgo": "{count, plural, =1{1 week ago} other{{count} weeks ago}}", - "authMfaDateYesterday": "yesterday", - "authMfaEnableButton": "Enable Two-Factor Auth", - "authMfaEnabled": "Two-factor authentication enabled", - "authMfaEnrollmentHeading": "Add an extra layer of security", - "authMfaEnrollmentSubheading": "You'll receive a verification code via SMS when signing in", - "authMfaEnrollmentTitle": "Enable Two-Factor Auth", - "authMfaEnterCodeSentTo": "Enter the code sent to {phone}", - "authMfaEnterCodeSentToPhone": "Enter the 6-digit code sent to {phoneNumber}", - "authMfaEnterSixDigitCode": "Please enter the 6-digit code", - "authMfaEnterSixDigitCodeWarning": "Please enter the 6-digit code", - "authMfaErrorAccountExistsDifferentCredential": "An account already exists with the same email but a different sign-in method. Please sign in with your original method.", - "authMfaErrorAlreadyEnrolled": "This phone number is already enrolled for two-factor auth.", - "authMfaErrorAppVerificationFailed": "App verification failed. Please try again.", - "authMfaErrorCancelled": "Verification was cancelled.", - "authMfaErrorCodeExpired": "The verification code has expired. Please request a new one.", - "authMfaErrorCredentialInUse": "This phone number is already used by another account.", - "authMfaErrorEmailInUse": "This email is already associated with another account.", - "authMfaErrorGeneric": "Verification failed. Please try again.", - "authMfaErrorInfoNotFound": "Two-factor authentication info not found. Please re-enroll your second factor.", - "authMfaErrorInternal": "An internal error occurred. Please try again.", - "authMfaErrorInvalidAppCredential": "App verification failed. Please restart the app and try again.", - "authMfaErrorInvalidCertHash": "App signing verification failed. This build may not be properly configured for phone authentication.", - "authMfaErrorInvalidCode": "That code is incorrect. Please check and try again.", - "authMfaErrorInvalidCredential": "The code you entered is incorrect or has expired. Please try again.", - "authMfaErrorInvalidData": "Invalid verification data. Please request a new code.", - "authMfaErrorInvalidPhoneNumber": "Please enter a valid phone number with country code (e.g. +1 234 567 890).", - "authMfaErrorInvalidTotpCode": "That authenticator code is incorrect. Please check and try again.", - "authMfaErrorMaxFactors": "You have reached the maximum number of second factors.", - "authMfaErrorMissingAppCredential": "App verification is not configured. Please try again later.", - "authMfaErrorMissingClientId": "App verification failed. Please restart the app and try again.", - "authMfaErrorMissingCode": "Please enter the verification code sent to your phone.", - "authMfaErrorMissingPhone": "Please enter your phone number.", - "authMfaErrorMissingTotpCode": "Please enter the code from your authenticator app.", - "authMfaErrorNoCurrentUser": "Please sign in first to manage two-factor auth.", - "authMfaErrorNoInternet": "No internet connection. Please check your network and try again.", - "authMfaErrorPhoneNotEnabled": "Phone verification is not enabled. Please contact support.", - "authMfaErrorProviderAlreadyLinked": "This sign-in method is already linked to your account.", - "authMfaErrorQuotaExceeded": "Service temporarily unavailable. Please try again later.", - "authMfaErrorReauthCancelled": "Re-authentication was cancelled. Please try again.", - "authMfaErrorReauthFailed": "Re-authentication failed. Please sign out, sign back in, and try again.", - "authMfaErrorResolveSignInFailed": "The verification code is incorrect or has expired. Please try again or request a new code.", - "authMfaErrorSecondFactorRequired": "Two-factor verification is required to complete sign-in.", - "authMfaErrorSessionExpired": "Your verification session has expired. Please request a new code.", - "authMfaErrorSignInSessionExpired": "Your sign-in session has expired. Please start the sign-in again.", - "authMfaErrorTimeout": "The request timed out. Please try again.", - "authMfaErrorTooManyRequests": "Too many attempts. Please wait a few minutes and try again.", - "authMfaErrorUnknown": "Verification failed (error: {errorCode}). Please try again.", - "authMfaErrorUnsupportedFirstFactor": "Your sign-in method does not support two-factor auth.", - "authMfaErrorUserDisabled": "This account has been disabled. Please contact support.", - "authMfaErrorVerificationFailed": "Phone verification failed. Please check your number and try again.", - "authMfaErrorWrongAccount": "That account doesn't match the one you're signed into. Please try again and select the correct account.", - "authMfaFactorAdded": "Added {relativeTime}", - "authMfaHowItWorks": "How it works", - "authMfaInfoQuickDescription": "Takes just a few seconds to verify during sign-in", - "authMfaInfoQuickTitle": "Quick & Easy", - "authMfaInfoSecurityDescription": "Protects your account even if your password is compromised", - "authMfaInfoSecurityTitle": "Extra Security", - "authMfaInfoSmsDescription": "Receive a verification code via text message when signing in", - "authMfaInfoSmsTitle": "SMS Verification", - "authMfaManagementTitle": "Two-Factor Authentication", - "authMfaNoInternetBody": "Two-factor authentication management requires an internet connection. Please connect and try again.", - "authMfaNoInternetTitle": "No Internet Connection", - "authMfaNoPhoneFactorFound": "No phone factor found", - "authMfaNoVerificationId": "No verification ID. Try resending.", - "authMfaNotEnabledDescription": "Add an extra layer of security", - "authMfaOfflineBanner": "You are offline. Changes cannot be made until you reconnect.", - "authMfaPhoneCountryCodeRequired": "Phone number must include country code (+1, +44, etc.)", - "authMfaPhoneFallback": "Phone", - "authMfaPhoneNumberHint": "+1 234 567 890", - "authMfaPhoneNumberLabel": "Phone Number", - "authMfaPhoneRequired": "Please enter your phone number", - "authMfaProtectedDescription": "Your account is protected with 2FA", - "authMfaRemoveConfirmLabel": "Remove", - "authMfaRemoveConfirmMessage": "Your account will be less secure. You can re-enable it anytime.", - "authMfaRemoveConfirmTitle": "Remove Two-Factor Auth?", - "authMfaRemoveRequiresInternet": "Removing two-factor authentication requires an internet connection.", - "authMfaRemoved": "Two-factor authentication removed", - "authMfaRequiresInternet": "Two-factor authentication requires an internet connection.", - "authMfaRetryButton": "Retry", - "authMfaSendCodeButton": "Send Code", - "authMfaSendCodeRequiresInternet": "Sending verification codes requires an internet connection.", - "authMfaSendingButton": "Sending...", - "authMfaSendingCode": "Sending verification code...", - "authMfaStatusNotEnabled": "Not Enabled", - "authMfaStatusProtected": "Protected", - "authMfaStillOffline": "Still offline. Please check your connection.", + "arNodeDetailSpeed": "Скорость", + "arNodeDetailUnknownNode": "Неизвестный узел", + "arNodeNoGpsPosition": "Узел не имеет GPS-координат", + "arRetry": "ПОВТОРИТЬ", + "arSettingsAlerts": "Оповещения", + "arSettingsAltimeter": "Альтиметр", + "arSettingsCompass": "Компас", + "arSettingsDistanceFilter": "ФИЛЬТР РАССТОЯНИЯ", + "arSettingsExplorer": "Исследователь", + "arSettingsFavoritesOnly": "Только избранные", + "arSettingsHorizon": "Горизонт", + "arSettingsHudElements": "ЭЛЕМЕНТЫ HUD", + "arSettingsMaxDistance": "Макс. расстояние", + "arSettingsMaxDistanceLabel": "100 км", + "arSettingsMinDistanceLabel": "100 м", + "arSettingsMinimal": "Минимальный", + "arSettingsNodeFilters": "ФИЛЬТРЫ УЗЛОВ", + "arSettingsShowOfflineNodes": "Показывать офлайн-узлы", + "arSettingsTactical": "Расширенный", + "arSettingsViewMode": "РЕЖИМ ПРОСМОТРА", + "arTouchLocked": "Касание заблокировано", + "arTouchUnlocked": "Касание разблокировано", + "arViewModeSelectorExp": "ИСС", + "arViewModeSelectorMin": "МИН", + "arViewModeSelectorTac": "РАС", + "authMfaActiveMethods": "Активные методы", + "authMfaCancelButton": "Отмена", + "authMfaChangePhoneNumber": "Изменить номер телефона", + "authMfaCodeSentTo": "Код подтверждения отправлен на {phoneNumber}", + "authMfaDateDaysAgo": "{count} дн. назад", + "authMfaDateMonthsAgo": "{count, plural, =1{1 месяц назад} few{{count} месяца назад} many{{count} месяцев назад} other{{count} месяцев назад}}", + "authMfaDateToday": "сегодня", + "authMfaDateWeeksAgo": "{count, plural, =1{1 неделю назад} few{{count} недели назад} many{{count} недель назад} other{{count} недель назад}}", + "authMfaDateYesterday": "вчера", + "authMfaEnableButton": "Включить двухфакторную аутентификацию", + "authMfaEnabled": "Двухфакторная аутентификация включена", + "authMfaEnrollmentHeading": "Добавьте дополнительный уровень защиты", + "authMfaEnrollmentSubheading": "При входе вы будете получать код подтверждения по SMS", + "authMfaEnrollmentTitle": "Включить двухфакторную аутентификацию", + "authMfaEnterCodeSentTo": "Введите код, отправленный на {phone}", + "authMfaEnterCodeSentToPhone": "Введите 6-значный код, отправленный на {phoneNumber}", + "authMfaEnterSixDigitCode": "Введите 6-значный код", + "authMfaEnterSixDigitCodeWarning": "Введите 6-значный код", + "authMfaErrorAccountExistsDifferentCredential": "Аккаунт с таким адресом электронной почты уже существует, но привязан к другому способу входа. Войдите с помощью исходного метода.", + "authMfaErrorAlreadyEnrolled": "Этот номер телефона уже зарегистрирован для двухфакторной аутентификации.", + "authMfaErrorAppVerificationFailed": "Проверка приложения не удалась. Попробуйте ещё раз.", + "authMfaErrorCancelled": "Подтверждение отменено.", + "authMfaErrorCodeExpired": "Срок действия кода подтверждения истёк. Запросите новый.", + "authMfaErrorCredentialInUse": "Этот номер телефона уже используется другим аккаунтом.", + "authMfaErrorEmailInUse": "Этот адрес электронной почты уже привязан к другому аккаунту.", + "authMfaErrorGeneric": "Подтверждение не удалось. Попробуйте ещё раз.", + "authMfaErrorInfoNotFound": "Данные двухфакторной аутентификации не найдены. Зарегистрируйте второй фактор повторно.", + "authMfaErrorInternal": "Произошла внутренняя ошибка. Попробуйте ещё раз.", + "authMfaErrorInvalidAppCredential": "Проверка приложения не удалась. Перезапустите приложение и попробуйте снова.", + "authMfaErrorInvalidCertHash": "Проверка подписи приложения не удалась. Возможно, эта сборка неправильно настроена для телефонной аутентификации.", + "authMfaErrorInvalidCode": "Неверный код. Проверьте и попробуйте снова.", + "authMfaErrorInvalidCredential": "Введённый код неверен или устарел. Попробуйте ещё раз.", + "authMfaErrorInvalidData": "Недопустимые данные подтверждения. Запросите новый код.", + "authMfaErrorInvalidPhoneNumber": "Введите корректный номер телефона с кодом страны (например, +7 912 345 67 89).", + "authMfaErrorInvalidTotpCode": "Неверный код из приложения-аутентификатора. Проверьте и попробуйте снова.", + "authMfaErrorMaxFactors": "Достигнуто максимальное количество дополнительных факторов.", + "authMfaErrorMissingAppCredential": "Проверка приложения не настроена. Попробуйте позже.", + "authMfaErrorMissingClientId": "Проверка приложения не удалась. Перезапустите приложение и попробуйте снова.", + "authMfaErrorMissingCode": "Введите код подтверждения, отправленный на ваш телефон.", + "authMfaErrorMissingPhone": "Введите номер телефона.", + "authMfaErrorMissingTotpCode": "Введите код из приложения-аутентификатора.", + "authMfaErrorNoCurrentUser": "Войдите в систему, чтобы управлять двухфакторной аутентификацией.", + "authMfaErrorNoInternet": "Нет подключения к интернету. Проверьте сеть и попробуйте снова.", + "authMfaErrorPhoneNotEnabled": "Подтверждение по телефону не включено. Обратитесь в поддержку.", + "authMfaErrorProviderAlreadyLinked": "Этот способ входа уже привязан к вашему аккаунту.", + "authMfaErrorQuotaExceeded": "Сервис временно недоступен. Попробуйте позже.", + "authMfaErrorReauthCancelled": "Повторная аутентификация отменена. Попробуйте ещё раз.", + "authMfaErrorReauthFailed": "Повторная аутентификация не удалась. Выйдите из системы, войдите снова и попробуйте ещё раз.", + "authMfaErrorResolveSignInFailed": "Код подтверждения неверен или устарел. Попробуйте ещё раз или запросите новый код.", + "authMfaErrorSecondFactorRequired": "Для завершения входа требуется двухфакторная проверка.", + "authMfaErrorSessionExpired": "Сессия подтверждения истекла. Запросите новый код.", + "authMfaErrorSignInSessionExpired": "Сессия входа истекла. Начните вход заново.", + "authMfaErrorTimeout": "Время ожидания запроса истекло. Попробуйте ещё раз.", + "authMfaErrorTooManyRequests": "Слишком много попыток. Подождите несколько минут и попробуйте снова.", + "authMfaErrorUnknown": "Подтверждение не удалось (ошибка: {errorCode}). Попробуйте ещё раз.", + "authMfaErrorUnsupportedFirstFactor": "Ваш способ входа не поддерживает двухфакторную аутентификацию.", + "authMfaErrorUserDisabled": "Этот аккаунт заблокирован. Обратитесь в поддержку.", + "authMfaErrorVerificationFailed": "Подтверждение по телефону не удалось. Проверьте номер и попробуйте снова.", + "authMfaErrorWrongAccount": "Этот аккаунт не совпадает с тем, в который вы вошли. Попробуйте снова и выберите правильный аккаунт.", + "authMfaFactorAdded": "Добавлено {relativeTime}", + "authMfaHowItWorks": "Как это работает", + "authMfaInfoQuickDescription": "Подтверждение занимает всего несколько секунд при входе", + "authMfaInfoQuickTitle": "Быстро и просто", + "authMfaInfoSecurityDescription": "Защищает ваш аккаунт, даже если пароль скомпрометирован", + "authMfaInfoSecurityTitle": "Дополнительная защита", + "authMfaInfoSmsDescription": "Получайте код подтверждения по SMS при каждом входе", + "authMfaInfoSmsTitle": "Подтверждение по SMS", + "authMfaManagementTitle": "Двухфакторная аутентификация", + "authMfaNoInternetBody": "Управление двухфакторной аутентификацией требует подключения к интернету. Подключитесь и попробуйте снова.", + "authMfaNoInternetTitle": "Нет подключения к интернету", + "authMfaNoPhoneFactorFound": "Телефонный фактор не найден", + "authMfaNoVerificationId": "Идентификатор подтверждения отсутствует. Попробуйте отправить код повторно.", + "authMfaNotEnabledDescription": "Добавьте дополнительный уровень защиты", + "authMfaOfflineBanner": "Вы не в сети. Изменения невозможны до восстановления подключения.", + "authMfaPhoneCountryCodeRequired": "Номер телефона должен включать код страны (+7, +1, +44 и т.д.)", + "authMfaPhoneFallback": "Телефон", + "authMfaPhoneNumberHint": "+7 912 345 67 89", + "authMfaPhoneNumberLabel": "Номер телефона", + "authMfaPhoneRequired": "Введите номер телефона", + "authMfaProtectedDescription": "Ваш аккаунт защищён двухфакторной аутентификацией", + "authMfaRemoveConfirmLabel": "Удалить", + "authMfaRemoveConfirmMessage": "Ваш аккаунт станет менее защищённым. Вы можете включить её снова в любой момент.", + "authMfaRemoveConfirmTitle": "Удалить двухфакторную аутентификацию?", + "authMfaRemoveRequiresInternet": "Для отключения двухфакторной аутентификации требуется подключение к интернету.", + "authMfaRemoved": "Двухфакторная аутентификация удалена", + "authMfaRequiresInternet": "Двухфакторная аутентификация требует подключения к интернету.", + "authMfaRetryButton": "Повторить", + "authMfaSendCodeButton": "Отправить код", + "authMfaSendCodeRequiresInternet": "Для отправки кодов подтверждения требуется подключение к интернету.", + "authMfaSendingButton": "Отправка...", + "authMfaSendingCode": "Отправка кода подтверждения...", + "authMfaStatusNotEnabled": "Не включено", + "authMfaStatusProtected": "Защищено", + "authMfaStillOffline": "Всё ещё нет сети. Проверьте подключение.", "authMfaVerificationCodeHint": "000000", - "authMfaVerificationCodeLabel": "Verification Code", - "authMfaVerifyAndEnableButton": "Verify & Enable", - "authMfaVerifyButton": "Verify", - "authMfaVerifyIdentityTitle": "Verify Identity", - "authMfaVerifyRequiresInternet": "Verifying codes requires an internet connection.", - "authMfaVerifyingButton": "Verifying...", - "authMfaYourPhone": "your phone", - "automationActionBodyLabel": "Body", - "automationActionChangeType": "Change Action Type", - "automationActionChannelIndex": "Channel {index}", - "automationActionChannelMessage": "Channel message", - "automationActionChannelsCount": "{count} channels", - "automationActionCustomSound": "Custom sound (optional)", - "automationActionDefaultChannel": "Default channel", - "automationActionDirectMessage": "Direct message", - "automationActionDone": "Done", - "automationActionGlyphPattern": "Glyph pattern (Nothing Phone)", - "automationActionGotIt": "Got it", - "automationActionIftttEventName": "IFTTT Event Name", - "automationActionIftttHelp": "Uses your IFTTT Webhook key from Settings", - "automationActionIftttHint": "e.g., meshtastic_alert", - "automationActionLogEvent": "Log to history", - "automationActionMessageLabel": "Message", - "automationActionNoChannels": "No channels available", - "automationActionNoSoundsFound": "No sounds found", - "automationActionPlaySound": "Play alert sound", - "automationActionPlayFailed": "Failed to play: {error}", - "automationActionPlaySoundFailed": "Failed to play sound: {error}", - "automationActionPlayingSound": "Playing \"{name}\"...", - "automationActionPlaysAfter": "Plays after notification", - "automationActionPreview": "Preview", - "automationActionPrimary": "Primary", - "automationActionPushNotification": "Push notification", - "automationActionRtttlRingtone": "RTTTL ringtone", - "automationActionSearchResults": "SEARCH RESULTS", - "automationActionSearchSounds": "Search sounds...", - "automationActionSelectChannel": "Select channel", - "automationActionSelectChannelTitle": "Select Channel", - "automationActionSelectNodePlaceholder": "Select node", - "automationActionSelectSound": "Select a sound", - "automationActionSendMessage": "Send message to node", - "automationActionSendToChannel": "Send to channel", - "automationActionShortcutDataInfo": "Event data (node name, battery, location, etc.) will be passed as JSON input to your shortcut.", - "automationActionShortcutHelpTitle": "Using Shortcuts", - "automationActionShortcutIosNote": "Note: Shortcuts app will briefly open when triggered. This is an iOS limitation.", - "automationActionShortcutKeyBattery": "Battery % (if available)", - "automationActionShortcutKeyLatitude": "GPS latitude (if available)", - "automationActionShortcutKeyLongitude": "GPS longitude (if available)", - "automationActionShortcutKeyMessage": "Message text (if applicable)", - "automationActionShortcutKeyNodeName": "Name of the node", - "automationActionShortcutKeyNodeNum": "Node number", - "automationActionShortcutKeyTimestamp": "Event timestamp", - "automationActionShortcutKeyTrigger": "Trigger type (nodeOffline, etc.)", - "automationActionShortcutKeysTitle": "Available keys in the dictionary:", - "automationActionShortcutNameHint": "Enter exact shortcut name", - "automationActionShortcutNameLabel": "Shortcut Name", - "automationActionShortcutSetup": "Setting up your shortcut:", - "automationActionShortcutStep1": "Add \"Get Dictionary from\" action\nSelect \"Shortcut Input\"", - "automationActionShortcutStep2": "Add \"Get Value for\" action\nSet key (e.g., node_name) and select \"Dictionary\"", - "automationActionShortcutStep3": "Use the extracted value in your actions\n(e.g., Send Message, Show Notification)", - "automationActionSoundSection": "SOUND", - "automationActionSoundsCount": "{count} sounds", - "automationActionSuggestions": "SUGGESTIONS", - "automationActionSystemDefault": "System default", - "automationActionTapToChoose": "Tap to choose", - "automationActionTitleLabel": "Title", - "automationActionTo": "TO", - "automationActionTriggerShortcut": "Run iOS Shortcut", - "automationActionTriggerWebhook": "Trigger webhook (IFTTT)", - "automationActionUpdateWidget": "Update home widget", - "automationActionVariableHint": "Tap variables below to insert", - "automationActionVibrate": "Vibrate device", - "automationCardActionCount": "{count} action{s}", - "automationCardDaysAgo": "{count}d ago", - "automationCardHoursAgo": "{count}h ago", - "automationCardJustNow": "Just now", - "automationCardMinutesAgo": "{count}m ago", - "automationCardRunsCount": "{count} runs", - "automationCardWeeksAgo": "{count}w ago", - "automationCategoryBattery": "Battery", - "automationCategoryLocation": "Location", - "automationCategoryManual": "Manual", - "automationCategoryMessages": "Messages", - "automationCategoryNodeStatus": "Node Status", - "automationCategorySensors": "Sensors", - "automationCategorySignal": "Signal", - "automationCategoryTime": "Time", - "automationConditionBatteryAbove": "Battery above threshold", - "automationConditionBatteryBelow": "Battery below threshold", - "automationConditionDayOfWeek": "On specific days", - "automationConditionNodeOffline": "Node is inactive", - "automationConditionNodeOnline": "Node is active", - "automationConditionOutsideGeofence": "Outside geofence", - "automationConditionTimeRange": "During time range", - "automationConditionWithinGeofence": "Within geofence", - "automationEditorAddAction": "Add Action", - "automationEditorCreateAutomation": "Create Automation", - "automationEditorCreated": "Automation created", - "automationEditorDeleteError": "Failed to delete automation", - "automationEditorDeleteTooltip": "Delete", - "automationEditorDescBatteryLow": "Triggered when battery drops below {threshold}%", - "automationEditorDescSilent": "Alert if no activity from node for {minutes} minutes", - "automationEditorDescriptionHint": "What does this automation do?", - "automationEditorDescriptionLabel": "Description (optional)", - "automationEditorInvalidVars": "Invalid variables: {vars}", - "automationEditorNameHint": "e.g., Low Battery Alert", - "automationEditorNameLabel": "Name", - "automationEditorNoActions": "No actions configured", - "automationEditorNoActionsHint": "Tap \"+ Add Action\" to add one", - "automationEditorSaveChanges": "Save Changes", - "automationEditorSaveError": "Failed to save automation", - "automationEditorSaving": "Saving...", - "automationEditorStepNumber": "Step {number}", - "automationEditorThen": "THEN", - "automationEditorThen2": "then...", - "automationEditorThenDo": "then do...", - "automationEditorTitleEdit": "Edit Automation", - "automationEditorTitleNew": "New Automation", - "automationEditorUpdated": "Automation updated", - "automationEditorValidateActions": "Please add at least one action", - "automationEditorValidateName": "Please enter a name for this automation", - "automationEditorWhen": "WHEN", - "automationFlowAddNode": "Add Node", - "automationFlowCompilationIssues": "Compilation Issues", - "automationFlowCreate": "Create", - "automationFlowCreated": "Automation created", - "automationFlowDiscard": "Discard", - "automationFlowDiscardMessage": "You have unsaved changes in the flow editor. Discard them and go back?", - "automationFlowDiscardTitle": "Discard Changes?", - "automationFlowEditTitle": "Edit Flow", - "automationFlowErrors": "Errors", - "automationFlowKeepEditing": "Keep Editing", - "automationFlowNameHint": "Flow name...", - "automationFlowNewTitle": "New Flow", - "automationFlowNoCompilation": "No automations could be compiled from this graph", - "automationFlowNodesCount": "{count} nodes", - "automationFlowSave": "Save", - "automationFlowSaveError": "Failed to save automation", - "automationFlowToolbarAdd": "Add", - "automationFlowToolbarDelete": "Delete ({count})", - "automationFlowToolbarFit": "Fit", - "automationFlowToolbarRedo": "Redo", - "automationFlowToolbarUndo": "Undo", - "automationFlowUpdated": "Automation updated", - "automationFlowValidateName": "Please enter a name for this automation", - "automationFlowValidationTooltip": "Validation issues", - "automationFlowWarnings": "Warnings", - "automationImportActionsCount": "Actions ({count})", - "automationImportButton": "Import", - "automationImportConditionsCount": "Conditions ({count})", - "automationImportConditionsText": "{count} conditions", - "automationImportEditFirst": "Edit First", - "automationImportError": "Failed to import: {error}", - "automationImportFailed": "Failed to import automation: {error}", - "automationImportFailedTitle": "Import Failed", - "automationImportGoBack": "Go Back", - "automationImportNoData": "No automation data provided", - "automationImportNotFound": "Automation not found or has been deleted", - "automationImportSuccess": "Automation imported successfully", - "automationImportTitle": "Import Automation", - "automationImportTrigger": "Trigger", - "automationImportView": "View", - "automationImportWarning": "This automation will be imported as disabled. Review and enable it when ready.", - "automationScreenAcceptableUse": "Acceptable Use", - "automationScreenAddAutomation": "Add Automation", - "automationScreenClear": "Clear", - "automationScreenCreateFromScratch": "Create from Scratch", - "automationScreenCreateFromScratchSubtitle": "Build a custom automation with full control over triggers and actions", - "automationScreenCreatedFromTemplate": "Automation created from template", - "automationScreenDaysAgo": "{count}d ago", - "automationScreenDelete": "Delete", - "automationScreenDeleteMessage": "Are you sure you want to delete \"{name}\"?", - "automationScreenDeleteTitle": "Delete Automation", - "automationScreenDeleted": "Deleted \"{name}\"", - "automationScreenDeleting": "Deleting \"{name}\"...", - "automationScreenEmptyDescription": "Create automations to trigger actions automatically when events occur on your mesh network.", - "automationScreenEmptyTitle": "Automate Your Mesh", - "automationScreenExecutionLog": "Execution Log", - "automationScreenHelp": "Help", - "automationScreenHoursAgo": "{count}h ago", - "automationScreenJustNow": "Just now", - "automationScreenLoadError": "Failed to load automations", - "automationScreenMinutesAgo": "{count}m ago", - "automationScreenNewTooltip": "New Automation", - "automationScreenNoExecutions": "No executions yet", - "automationScreenQuickStartSubtitle": "One-tap setup for common use cases", - "automationScreenQuickStartTemplates": "Quick Start Templates", - "automationScreenRetry": "Retry", - "automationScreenRunFailed": "Failed to run: {error}", - "automationScreenRunSuccess": "Ran \"{name}\" successfully", - "automationScreenRunning": "Running \"{name}\"...", - "automationScreenScanQrCode": "Scan QR Code", - "automationScreenStartWithTrigger": "Start with a Trigger", - "automationScreenStartWithTriggerSubtitle": "Choose what event starts your automation", - "automationScreenStatActive": "Active", - "automationScreenStatExecutions": "Executions", - "automationScreenStatTotal": "Total", - "automationScreenTitle": "Automations", - "automationShareMessage": "Check out this automation on Socialmesh!", - "automationShareScanInfo": "Scan this QR code in Socialmesh to import this automation", - "automationShareSignIn": "Sign in to share automations", - "automationShareSignInAction": "Sign In", - "automationShareSubject": "Socialmesh Automation: {name}", - "automationShareTitle": "Share Automation", - "automationTriggerAnyChannel": "Any channel", - "automationTriggerAnyNode": "Any node", - "automationTriggerBatteryFull": "Battery fully charged", - "automationTriggerBatteryLow": "Battery drops below threshold", - "automationTriggerBatteryThreshold": "Battery threshold", - "automationTriggerChannelActivity": "Activity on channel", - "automationTriggerChannelHelp": "Leave empty to trigger for any channel activity", - "automationTriggerChannelIndex": "Channel {index}", - "automationTriggerChannelLabel": "Channel (optional)", - "automationTriggerDaily": "Daily", - "automationTriggerDayFri": "Fri", - "automationTriggerDayMon": "Mon", - "automationTriggerDaySat": "Sat", - "automationTriggerDaySun": "Sun", - "automationTriggerDayThu": "Thu", - "automationTriggerDayTue": "Tue", - "automationTriggerDayWed": "Wed", - "automationTriggerDays": "Days", - "automationTriggerDescBatteryFull": "Triggered when battery is fully charged", - "automationTriggerDescBatteryLow": "Triggered when battery drops below threshold", - "automationTriggerDescChannelActivity": "Triggered when activity on channel", - "automationTriggerDescDetectionSensor": "Triggered when detection sensor activates", - "automationTriggerDescGeofenceEnter": "Triggered when node enters geofence area", - "automationTriggerDescGeofenceExit": "Triggered when node exits geofence area", - "automationTriggerDescManual": "Triggered manually via Shortcuts or UI", - "automationTriggerDescMessageContains": "Triggered when message contains keyword", - "automationTriggerDescMessageReceived": "Triggered when any message is received", - "automationTriggerDescNodeOffline": "Triggered when a node is not heard for a while", - "automationTriggerDescNodeOnline": "Triggered when a node is heard recently", - "automationTriggerDescNodeSilent": "Triggered when node is silent for duration", - "automationTriggerDescPositionChanged": "Triggered when node position changes", - "automationTriggerDescScheduled": "Triggered at scheduled time", - "automationTriggerDescSignalWeak": "Triggered when signal strength drops", - "automationTriggerDetectionSensor": "Detection sensor triggered", - "automationTriggerEveryHours": "Every {hours} hour{s}", - "automationTriggerEveryHoursMinutes": "Every {hours} hour{s} {minutes} minutes", - "automationTriggerEveryMinutes": "Every {count} minutes", - "automationTriggerGeofenceCenter": "Geofence Center", - "automationTriggerGeofenceEnter": "Enters geofence area", - "automationTriggerGeofenceExit": "Exits geofence area", - "automationTriggerInterval": "Interval", - "automationTriggerKeywordHint": "e.g., SOS, help, emergency", - "automationTriggerKeywordLabel": "Keyword to match", - "automationTriggerLatitude": "Latitude", - "automationTriggerLongitude": "Longitude", - "automationTriggerManual": "Manual trigger", - "automationTriggerManualDescription": "This automation can be triggered manually from:\n• The Automations screen (tap the play button)\n• Siri Shortcuts\n• Widgets", - "automationTriggerManualTitle": "Manual Trigger", - "automationTriggerMessageContains": "Message contains keyword", - "automationTriggerMessageReceived": "Message received", - "automationTriggerNodeFilterHelp": "Leave empty to trigger for any node", - "automationTriggerNodeFilterLabel": "Filter by node (optional)", - "automationTriggerNodeOffline": "Node becomes inactive", - "automationTriggerNodeOnline": "Node becomes active", - "automationTriggerNodeSilent": "Node silent for duration", - "automationTriggerPickOnMap": "Pick on Map", - "automationTriggerPositionChanged": "Position updated", - "automationTriggerRadius": "Radius", - "automationTriggerRepeatEvery": "Repeat every", - "automationTriggerScheduleType": "Schedule Type", - "automationTriggerScheduled": "Scheduled time", - "automationTriggerSelectNode": "Select Node", - "automationTriggerSelectTrigger": "Select Trigger", - "automationTriggerSensorAny": "Any", - "automationTriggerSensorClear": "Clear", - "automationTriggerSensorDetected": "Detected", - "automationTriggerSensorNameHelp": "Leave empty to trigger for any sensor", - "automationTriggerSensorNameHint": "e.g., Motion, Door, Window", - "automationTriggerSensorNameLabel": "Sensor name filter (optional)", - "automationTriggerSensorState": "Trigger when sensor is", - "automationTriggerSignalThreshold": "Signal threshold (SNR)", - "automationTriggerSignalWeak": "Signal strength drops", - "automationTriggerSilentDuration": "Silent duration", - "automationTriggerTime": "Time", - "automationTriggerWeekly": "Weekly", - "automationValidateGeofence": "Please select a geofence location", - "automationValidateKeyword": "Please enter a keyword to match", - "automationValidateMessage": "Please enter a message to send", - "automationValidateSchedule": "Please set a schedule time", - "automationValidateShortcutName": "Please enter a Shortcut name", - "automationValidateTargetNode": "Please select a target node", - "automationValidateWebhookEvent": "Please enter a webhook event name", - "automationVariableAllVariables": "All variables", - "automationVariableDeleteHint": "Tap a variable to select it, then backspace to remove", - "automationVariableDescBattery": "Current battery percentage", - "automationVariableDescChannelName": "Channel name", - "automationVariableDescKeyword": "Matched keyword", - "automationVariableDescLocation": "GPS coordinates (lat, lon)", - "automationVariableDescMessage": "Message content", - "automationVariableDescNodeName": "Name of the triggering node", - "automationVariableDescNodeNum": "Node number in hex (e.g. a1b2)", - "automationVariableDescSensorName": "Detection sensor name", - "automationVariableDescSensorState": "Sensor state (detected / clear)", - "automationVariableDescSignalThreshold": "Signal threshold in dB (SNR)", - "automationVariableDescSilentDuration": "Silent duration setting", - "automationVariableDescThreshold": "Configured trigger threshold", - "automationVariableDescTime": "Current timestamp (ISO 8601)", - "automationVariableDescZoneRadius": "Geofence radius in meters", - "automationVariableNoMatch": "No matching variables", - "automationVariablePickerTitle": "Insert Variable", - "automationVariableSearchHint": "Search variables...", - "automationVariableSectionTrigger": "Trigger context", - "automationVariableSectionUniversal": "Universal", - "categoryProductsApplyFilters": "Apply Filters", - "categoryProductsClearFilters": "Clear Filters", - "categoryProductsErrorLoading": "Error loading products", - "categoryProductsFilter": "Filter", - "categoryProductsFiltersTitle": "Filters", - "categoryProductsFrequencyBands": "Frequency Bands", - "categoryProductsInStockOnly": "In Stock Only", - "categoryProductsNotFound": "No products found", - "categoryProductsOutOfStock": "OUT OF STOCK", - "categoryProductsPriceRange": "Price Range", - "categoryProductsReset": "Reset", - "categoryProductsResultCount": "{count} products", - "categoryProductsRetry": "Retry", - "categoryProductsSortNewest": "Newest First", - "categoryProductsSortPopular": "Most Popular", - "categoryProductsSortPriceHigh": "Price: High to Low", - "categoryProductsSortPriceLow": "Price: Low to High", - "categoryProductsSortRating": "Highest Rated", - "categoryProductsTryFilters": "Try adjusting your filters", - "channelFormApproxLocationTitle": "Approximate Location", - "channelFormCreatedSnackbar": "Channel created", - "channelFormDefaultName": "Channel {index}", - "channelFormDeviceNotConnected": "Cannot save channel: Device not connected", - "channelFormDeviceNotReady": "Device not ready - please wait for connection", - "channelFormDownlinkSubtitle": "Receive messages from MQTT server", - "channelFormDownlinkTitle": "Downlink Enabled", - "channelFormEditTitle": "Edit Channel", - "channelFormEncryptionLabel": "Encryption", - "channelFormError": "Error: {error}", - "channelFormInvalidBase64": "Invalid base64 encoding", - "channelFormInvalidKeySize": "Invalid key size ({byteCount} bytes). Use 1, 16, or 32 bytes.", - "channelFormKeyEmpty": "Key cannot be empty", + "authMfaVerificationCodeLabel": "Код подтверждения", + "authMfaVerifyAndEnableButton": "Подтвердить и включить", + "authMfaVerifyButton": "Подтвердить", + "authMfaVerifyIdentityTitle": "Подтверждение личности", + "authMfaVerifyRequiresInternet": "Для проверки кодов требуется подключение к интернету.", + "authMfaVerifyingButton": "Проверка...", + "authMfaYourPhone": "ваш телефон", + "automationActionBodyLabel": "Тело", + "automationActionChangeType": "Изменить тип действия", + "automationActionChannelIndex": "Канал {index}", + "automationActionChannelMessage": "Сообщение в канале", + "automationActionChannelsCount": "{count} каналов", + "automationActionCustomSound": "Пользовательский звук (необязательно)", + "automationActionDefaultChannel": "Канал по умолчанию", + "automationActionDirectMessage": "Личное сообщение", + "automationActionDone": "Готово", + "automationActionGlyphPattern": "Паттерн подсветки (Nothing Phone)", + "automationActionGotIt": "Понятно", + "automationActionIftttEventName": "Название события IFTTT", + "automationActionIftttHelp": "Использует ваш ключ Webhook IFTTT из настроек", + "automationActionIftttHint": "например, meshtastic_alert", + "automationActionLogEvent": "Записать в историю", + "automationActionMessageLabel": "Сообщение", + "automationActionNoChannels": "Нет доступных каналов", + "automationActionNoSoundsFound": "Звуки не найдены", + "automationActionPlaySound": "Воспроизвести звук оповещения", + "automationActionPlayFailed": "Ошибка воспроизведения: {error}", + "automationActionPlaySoundFailed": "Не удалось воспроизвести звук: {error}", + "automationActionPlayingSound": "Воспроизведение \"{name}\"...", + "automationActionPlaysAfter": "Воспроизводится после уведомления", + "automationActionPreview": "Предпросмотр", + "automationActionPrimary": "Основной", + "automationActionPushNotification": "Push-уведомление", + "automationActionRtttlRingtone": "Мелодия RTTTL", + "automationActionSearchResults": "РЕЗУЛЬТАТЫ ПОИСКА", + "automationActionSearchSounds": "Поиск звуков...", + "automationActionSelectChannel": "Выбрать канал", + "automationActionSelectChannelTitle": "Выбор канала", + "automationActionSelectNodePlaceholder": "Выберите узел", + "automationActionSelectSound": "Выбрать звук", + "automationActionSendMessage": "Отправить сообщение узлу", + "automationActionSendToChannel": "Отправить в канал", + "automationActionShortcutDataInfo": "Данные события (имя узла, аккумулятор, местоположение и т.д.) будут переданы в виде JSON на вход в вашем шортcаte.", + "automationActionShortcutHelpTitle": "Использование шортcатов", + "automationActionShortcutIosNote": "Примечание: приложение «Шортcаты» кратко откроется при срабатывании. Это ограничение iOS.", + "automationActionShortcutKeyBattery": "Уровень аккумулятора % (если доступно)", + "automationActionShortcutKeyLatitude": "Широта GPS (если доступно)", + "automationActionShortcutKeyLongitude": "Долгота GPS (если доступно)", + "automationActionShortcutKeyMessage": "Текст сообщения (если применимо)", + "automationActionShortcutKeyNodeName": "Имя узла", + "automationActionShortcutKeyNodeNum": "Номер узла", + "automationActionShortcutKeyTimestamp": "Временная метка события", + "automationActionShortcutKeyTrigger": "Тип триггера (nodeOffline и т.д.)", + "automationActionShortcutKeysTitle": "Доступные ключи в словаре:", + "automationActionShortcutNameHint": "Введите точное имя шортcата", + "automationActionShortcutNameLabel": "Имя шортcата", + "automationActionShortcutSetup": "Настройка шортcата:", + "automationActionShortcutStep1": "Добавьте действие «Получить словарь из»\nВыберите «Входные данные шортcата»", + "automationActionShortcutStep2": "Добавьте действие «Получить значение для»\nУкажите ключ (например, node_name) и выберите «Словарь»", + "automationActionShortcutStep3": "Используйте извлечённое значение в ваших действиях\n(например, «Отправить сообщение», «Показать уведомление»)", + "automationActionSoundSection": "ЗВУК", + "automationActionSoundsCount": "{count} звуков", + "automationActionSuggestions": "ПРЕДЛОЖЕНИЯ", + "automationActionSystemDefault": "Системный по умолчанию", + "automationActionTapToChoose": "Нажмите, чтобы выбрать", + "automationActionTitleLabel": "Заголовок", + "automationActionTo": "КОМУ", + "automationActionTriggerShortcut": "Запустить шортcат iOS", + "automationActionTriggerWebhook": "Вызвать Webhook (IFTTT)", + "automationActionUpdateWidget": "Обновить виджет на главном экране", + "automationActionVariableHint": "Нажмите на переменные ниже для вставки", + "automationActionVibrate": "Вибрация устройства", + "automationCardActionCount": "{count} действие{s}", + "automationCardDaysAgo": "{count}д назад", + "automationCardHoursAgo": "{count}ч назад", + "automationCardJustNow": "Только что", + "automationCardMinutesAgo": "{count}м назад", + "automationCardRunsCount": "{count} запусков", + "automationCardWeeksAgo": "{count}н назад", + "automationCategoryBattery": "Аккумулятор", + "automationCategoryLocation": "Местоположение", + "automationCategoryManual": "Вручную", + "automationCategoryMessages": "Сообщения", + "automationCategoryNodeStatus": "Статус узла", + "automationCategorySensors": "Датчики", + "automationCategorySignal": "Сигнал", + "automationCategoryTime": "Время", + "automationConditionBatteryAbove": "Аккумулятор выше порогового значения", + "automationConditionBatteryBelow": "Аккумулятор ниже порогового значения", + "automationConditionDayOfWeek": "В определённые дни", + "automationConditionNodeOffline": "Узел неактивен", + "automationConditionNodeOnline": "Узел активен", + "automationConditionOutsideGeofence": "За пределами геозоны", + "automationConditionTimeRange": "В течение временного диапазона", + "automationConditionWithinGeofence": "В пределах геозоны", + "automationEditorAddAction": "Добавить действие", + "automationEditorCreateAutomation": "Создать автоматизацию", + "automationEditorCreated": "Автоматизация создана", + "automationEditorDeleteError": "Не удалось удалить автоматизацию", + "automationEditorDeleteTooltip": "Удалить", + "automationEditorDescBatteryLow": "Срабатывает, когда уровень аккумулятора падает ниже {threshold}%", + "automationEditorDescSilent": "Оповещение, если нет активности от узла в течение {minutes} минут", + "automationEditorDescriptionHint": "Что делает эта автоматизация?", + "automationEditorDescriptionLabel": "Описание (необязательно)", + "automationEditorInvalidVars": "Недопустимые переменные: {vars}", + "automationEditorNameHint": "например, Оповещение о низком заряде", + "automationEditorNameLabel": "Название", + "automationEditorNoActions": "Действия не настроены", + "automationEditorNoActionsHint": "Нажмите «+ Добавить действие», чтобы добавить", + "automationEditorSaveChanges": "Сохранить изменения", + "automationEditorSaveError": "Не удалось сохранить автоматизацию", + "automationEditorSaving": "Сохранение...", + "automationEditorStepNumber": "Шаг {number}", + "automationEditorThen": "ТОГДА", + "automationEditorThen2": "тогда...", + "automationEditorThenDo": "тогда выполнить...", + "automationEditorTitleEdit": "Редактировать автоматизацию", + "automationEditorTitleNew": "Новая автоматизация", + "automationEditorUpdated": "Автоматизация обновлена", + "automationEditorValidateActions": "Добавьте хотя бы одно действие", + "automationEditorValidateName": "Введите название для этой автоматизации", + "automationEditorWhen": "КОГДА", + "automationFlowAddNode": "Добавить узел", + "automationFlowCompilationIssues": "Проблемы компиляции", + "automationFlowCreate": "Создать", + "automationFlowCreated": "Автоматизация создана", + "automationFlowDiscard": "Отменить", + "automationFlowDiscardMessage": "У вас есть несохранённые изменения в редакторе потока. Отменить их и вернуться назад?", + "automationFlowDiscardTitle": "Отменить изменения?", + "automationFlowEditTitle": "Редактировать поток", + "automationFlowErrors": "Ошибки", + "automationFlowKeepEditing": "Продолжить редактирование", + "automationFlowNameHint": "Название потока...", + "automationFlowNewTitle": "Новый поток", + "automationFlowNoCompilation": "Из этого графа не удалось скомпилировать ни одной автоматизации", + "automationFlowNodesCount": "{count} узлов", + "automationFlowSave": "Сохранить", + "automationFlowSaveError": "Не удалось сохранить автоматизацию", + "automationFlowToolbarAdd": "Добавить", + "automationFlowToolbarDelete": "Удалить ({count})", + "automationFlowToolbarFit": "По размеру", + "automationFlowToolbarRedo": "Повторить", + "automationFlowToolbarUndo": "Отменить", + "automationFlowUpdated": "Автоматизация обновлена", + "automationFlowValidateName": "Введите название для этой автоматизации", + "automationFlowValidationTooltip": "Проблемы проверки", + "automationFlowWarnings": "Предупреждения", + "automationImportActionsCount": "Действия ({count})", + "automationImportButton": "Импортировать", + "automationImportConditionsCount": "Условия ({count})", + "automationImportConditionsText": "{count} условий", + "automationImportEditFirst": "Сначала изменить", + "automationImportError": "Ошибка импорта: {error}", + "automationImportFailed": "Не удалось импортировать автоматизацию: {error}", + "automationImportFailedTitle": "Ошибка импорта", + "automationImportGoBack": "Назад", + "automationImportNoData": "Данные автоматизации не предоставлены", + "automationImportNotFound": "Автоматизация не найдена или была удалена", + "automationImportSuccess": "Автоматизация успешно импортирована", + "automationImportTitle": "Импорт автоматизации", + "automationImportTrigger": "Триггер", + "automationImportView": "Просмотр", + "automationImportWarning": "Эта автоматизация будет импортирована как отключённая. Проверьте её и включите, когда будете готовы.", + "automationScreenAcceptableUse": "Допустимое использование", + "automationScreenAddAutomation": "Добавить автоматизацию", + "automationScreenClear": "Очистить", + "automationScreenCreateFromScratch": "Создать с нуля", + "automationScreenCreateFromScratchSubtitle": "Создайте пользовательскую автоматизацию с полным контролем над триггерами и действиями", + "automationScreenCreatedFromTemplate": "Автоматизация создана из шаблона", + "automationScreenDaysAgo": "{count}д назад", + "automationScreenDelete": "Удалить", + "automationScreenDeleteMessage": "Вы уверены, что хотите удалить \"{name}\"?", + "automationScreenDeleteTitle": "Удалить автоматизацию", + "automationScreenDeleted": "\"{name}\" удалено", + "automationScreenDeleting": "Удаление \"{name}\"...", + "automationScreenEmptyDescription": "Создавайте автоматизации для автоматического выполнения действий при возникновении событий в вашей mesh-сети.", + "automationScreenEmptyTitle": "Автоматизируйте вашу сеть", + "automationScreenExecutionLog": "Журнал выполнения", + "automationScreenHelp": "Справка", + "automationScreenHoursAgo": "{count}ч назад", + "automationScreenJustNow": "Только что", + "automationScreenLoadError": "Не удалось загрузить автоматизации", + "automationScreenMinutesAgo": "{count}м назад", + "automationScreenNewTooltip": "Новая автоматизация", + "automationScreenNoExecutions": "Выполнений пока нет", + "automationScreenQuickStartSubtitle": "Быстрая настройка для распространённых сценариев", + "automationScreenQuickStartTemplates": "Шаблоны быстрого старта", + "automationScreenRetry": "Повторить", + "automationScreenRunFailed": "Ошибка запуска: {error}", + "automationScreenRunSuccess": "\"{name}\" выполнено успешно", + "automationScreenRunning": "Выполнение \"{name}\"...", + "automationScreenScanQrCode": "Сканировать QR-код", + "automationScreenStartWithTrigger": "Начать с триггера", + "automationScreenStartWithTriggerSubtitle": "Выберите событие, которое запускает вашу автоматизацию", + "automationScreenStatActive": "Активных", + "automationScreenStatExecutions": "Выполнений", + "automationScreenStatTotal": "Всего", + "automationScreenTitle": "Автоматизации", + "automationShareMessage": "Посмотрите эту автоматизацию в Socialmesh!", + "automationShareScanInfo": "Отсканируйте этот QR-код в Socialmesh, чтобы импортировать автоматизацию", + "automationShareSignIn": "Войдите, чтобы делиться автоматизациями", + "automationShareSignInAction": "Войти", + "automationShareSubject": "Автоматизация Socialmesh: {name}", + "automationShareTitle": "Поделиться автоматизацией", + "automationTriggerAnyChannel": "Любой канал", + "automationTriggerAnyNode": "Любой узел", + "automationTriggerBatteryFull": "Аккумулятор полностью заряжен", + "automationTriggerBatteryLow": "Уровень аккумулятора падает ниже порога", + "automationTriggerBatteryThreshold": "Пороговый уровень аккумулятора", + "automationTriggerChannelActivity": "Активность на канале", + "automationTriggerChannelHelp": "Оставьте пустым, чтобы срабатывать при любой активности в канале", + "automationTriggerChannelIndex": "Канал {index}", + "automationTriggerChannelLabel": "Канал (необязательно)", + "automationTriggerDaily": "Ежедневно", + "automationTriggerDayFri": "Пт", + "automationTriggerDayMon": "Пн", + "automationTriggerDaySat": "Сб", + "automationTriggerDaySun": "Вс", + "automationTriggerDayThu": "Чт", + "automationTriggerDayTue": "Вт", + "automationTriggerDayWed": "Ср", + "automationTriggerDays": "Дни", + "automationTriggerDescBatteryFull": "Срабатывает, когда аккумулятор полностью заряжен", + "automationTriggerDescBatteryLow": "Срабатывает, когда уровень аккумулятора падает ниже порога", + "automationTriggerDescChannelActivity": "Срабатывает при активности на канале", + "automationTriggerDescDetectionSensor": "Срабатывает при активации датчика обнаружения", + "automationTriggerDescGeofenceEnter": "Срабатывает, когда узел входит в геозону", + "automationTriggerDescGeofenceExit": "Срабатывает, когда узел выходит из геозоны", + "automationTriggerDescManual": "Запускается вручную через шортcаты или интерфейс", + "automationTriggerDescMessageContains": "Срабатывает, когда сообщение содержит ключевое слово", + "automationTriggerDescMessageReceived": "Срабатывает при получении любого сообщения", + "automationTriggerDescNodeOffline": "Срабатывает, когда узел долгое время не отвечает", + "automationTriggerDescNodeOnline": "Срабатывает, когда узел недавно выходил на связь", + "automationTriggerDescNodeSilent": "Срабатывает, когда узел молчит в течение заданного времени", + "automationTriggerDescPositionChanged": "Срабатывает, когда изменяется положение узла", + "automationTriggerDescScheduled": "Срабатывает по расписанию", + "automationTriggerDescSignalWeak": "Срабатывает, когда уровень сигнала падает", + "automationTriggerDetectionSensor": "Сработал датчик обнаружения", + "automationTriggerEveryHours": "Каждые {hours} час{s}", + "automationTriggerEveryHoursMinutes": "Каждые {hours} час{s} {minutes} минут", + "automationTriggerEveryMinutes": "Каждые {count} минут", + "automationTriggerGeofenceCenter": "Центр геозоны", + "automationTriggerGeofenceEnter": "Вход в геозону", + "automationTriggerGeofenceExit": "Выход из геозоны", + "automationTriggerInterval": "Интервал", + "automationTriggerKeywordHint": "например, SOS, помощь, срочно", + "automationTriggerKeywordLabel": "Ключевое слово для поиска", + "automationTriggerLatitude": "Широта", + "automationTriggerLongitude": "Долгота", + "automationTriggerManual": "Запуск вручную", + "automationTriggerManualDescription": "Эту автоматизацию можно запустить вручную из:\n• Экрана автоматизаций (нажмите кнопку воспроизведения)\n• Siri Shortcuts\n• Виджетов", + "automationTriggerManualTitle": "Запуск вручную", + "automationTriggerMessageContains": "Сообщение содержит ключевое слово", + "automationTriggerMessageReceived": "Сообщение получено", + "automationTriggerNodeFilterHelp": "Оставьте пустым, чтобы срабатывать для любого узла", + "automationTriggerNodeFilterLabel": "Фильтр по узлу (необязательно)", + "automationTriggerNodeOffline": "Узел стал неактивным", + "automationTriggerNodeOnline": "Узел стал активным", + "automationTriggerNodeSilent": "Узел молчит в течение заданного времени", + "automationTriggerPickOnMap": "Выбрать на карте", + "automationTriggerPositionChanged": "Местоположение обновлено", + "automationTriggerRadius": "Радиус", + "automationTriggerRepeatEvery": "Повторять каждые", + "automationTriggerScheduleType": "Тип расписания", + "automationTriggerScheduled": "Запланированное время", + "automationTriggerSelectNode": "Выбрать узел", + "automationTriggerSelectTrigger": "Выбрать триггер", + "automationTriggerSensorAny": "Любой", + "automationTriggerSensorClear": "Нет срабатывания", + "automationTriggerSensorDetected": "Обнаружено", + "automationTriggerSensorNameHelp": "Оставьте пустым, чтобы срабатывать для любого датчика", + "automationTriggerSensorNameHint": "например, Движение, Дверь, Окно", + "automationTriggerSensorNameLabel": "Фильтр по имени датчика (необязательно)", + "automationTriggerSensorState": "Срабатывать, когда датчик:", + "automationTriggerSignalThreshold": "Пороговое значение сигнала (SNR)", + "automationTriggerSignalWeak": "Уровень сигнала падает", + "automationTriggerSilentDuration": "Продолжительность молчания", + "automationTriggerTime": "Время", + "automationTriggerWeekly": "Еженедельно", + "automationValidateGeofence": "Выберите местоположение геозоны", + "automationValidateKeyword": "Введите ключевое слово для поиска", + "automationValidateMessage": "Введите сообщение для отправки", + "automationValidateSchedule": "Задайте время расписания", + "automationValidateShortcutName": "Введите имя шортcата", + "automationValidateTargetNode": "Выберите целевой узел", + "automationValidateWebhookEvent": "Введите имя события Webhook", + "automationVariableAllVariables": "Все переменные", + "automationVariableDeleteHint": "Нажмите на переменную, чтобы выбрать её, затем нажмите Backspace для удаления", + "automationVariableDescBattery": "Текущий уровень аккумулятора в процентах", + "automationVariableDescChannelName": "Название канала", + "automationVariableDescKeyword": "Найденное ключевое слово", + "automationVariableDescLocation": "GPS-координаты (широта, долгота)", + "automationVariableDescMessage": "Содержимое сообщения", + "automationVariableDescNodeName": "Имя узла, вызвавшего срабатывание", + "automationVariableDescNodeNum": "Номер узла в шестнадцатеричном формате (например, a1b2)", + "automationVariableDescSensorName": "Имя датчика обнаружения", + "automationVariableDescSensorState": "Состояние датчика (обнаружено / нет срабатывания)", + "automationVariableDescSignalThreshold": "Пороговое значение сигнала в дБ (SNR)", + "automationVariableDescSilentDuration": "Настройка продолжительности молчания", + "automationVariableDescThreshold": "Настроенное пороговое значение триггера", + "automationVariableDescTime": "Текущая временная метка (ISO 8601)", + "automationVariableDescZoneRadius": "Радиус геозоны в метрах", + "automationVariableNoMatch": "Совпадающих переменных не найдено", + "automationVariablePickerTitle": "Вставить переменную", + "automationVariableSearchHint": "Поиск переменных...", + "automationVariableSectionTrigger": "Контекст триггера", + "automationVariableSectionUniversal": "Универсальные", + "categoryProductsApplyFilters": "Применить фильтры", + "categoryProductsClearFilters": "Сбросить фильтры", + "categoryProductsErrorLoading": "Ошибка загрузки товаров", + "categoryProductsFilter": "Фильтр", + "categoryProductsFiltersTitle": "Фильтры", + "categoryProductsFrequencyBands": "Частотные диапазоны", + "categoryProductsInStockOnly": "Только в наличии", + "categoryProductsNotFound": "Товары не найдены", + "categoryProductsOutOfStock": "НЕТ В НАЛИЧИИ", + "categoryProductsPriceRange": "Ценовой диапазон", + "categoryProductsReset": "Сбросить", + "categoryProductsResultCount": "{count} товаров", + "categoryProductsRetry": "Повторить", + "categoryProductsSortNewest": "Сначала новые", + "categoryProductsSortPopular": "Самые популярные", + "categoryProductsSortPriceHigh": "Цена: по убыванию", + "categoryProductsSortPriceLow": "Цена: по возрастанию", + "categoryProductsSortRating": "Лучший рейтинг", + "categoryProductsTryFilters": "Попробуйте изменить фильтры", + "channelFormApproxLocationTitle": "Приблизительное местоположение", + "channelFormCreatedSnackbar": "Канал создан", + "channelFormDefaultName": "Канал {index}", + "channelFormDeviceNotConnected": "Невозможно сохранить канал: устройство не подключено", + "channelFormDeviceNotReady": "Устройство не готово — подождите установления соединения", + "channelFormDownlinkSubtitle": "Получать сообщения с сервера MQTT", + "channelFormDownlinkTitle": "Входящий канал (Downlink) включён", + "channelFormEditTitle": "Изменить канал", + "channelFormEncryptionLabel": "Шифрование", + "channelFormError": "Ошибка: {error}", + "channelFormInvalidBase64": "Неверная кодировка base64", + "channelFormInvalidKeySize": "Недопустимый размер ключа ({byteCount} байт). Используйте 1, 16 или 32 байта.", + "channelFormKeyEmpty": "Ключ не может быть пустым", "channelFormKeySizeAes128": "AES-128", "channelFormKeySizeAes256": "AES-256", - "channelFormKeySizeBitDesc": "{bits}-bit encryption key", - "channelFormKeySizeDefault": "Default (Simple)", - "channelFormKeySizeDefaultDesc": "1-byte simple key (AQ==)", - "channelFormKeySizeNone": "No Encryption", - "channelFormKeySizeNoneDesc": "Messages sent in plaintext", - "channelFormMaxChannelsReached": "Maximum 8 channels allowed", + "channelFormKeySizeBitDesc": "Ключ шифрования {bits} бит", + "channelFormKeySizeDefault": "По умолчанию (простой)", + "channelFormKeySizeDefaultDesc": "Однобайтовый простой ключ (AQ==)", + "channelFormKeySizeNone": "Без шифрования", + "channelFormKeySizeNoneDesc": "Сообщения отправляются в открытом виде", + "channelFormMaxChannelsReached": "Максимально допустимо 8 каналов", "channelFormMqttLabel": "MQTT", - "channelFormMqttWarning": "Most devices have very limited processing power and RAM. Bridging a busy channel like LongFast via the default MQTT server can flood the device with 15-25 packets per second, causing it to stop responding. Consider using a private broker or a quieter channel.", - "channelFormNameHint": "Enter channel name (no spaces)", - "channelFormNameMaxHint": "Max 11 characters", - "channelFormNameTitle": "Channel Name", - "channelFormNewTitle": "New Channel", - "channelFormPositionEnabledSubtitle": "Share position on this channel", - "channelFormPositionEnabledTitle": "Positions Enabled", - "channelFormPositionLabel": "Position", - "channelFormPreciseLocationSubtitle": "Share exact GPS coordinates", - "channelFormPreciseLocationTitle": "Precise Location", - "channelFormPrecision12": "Within 5.8 km", - "channelFormPrecision13": "Within 2.9 km", - "channelFormPrecision14": "Within 1.5 km", - "channelFormPrecision15": "Within 700 m", - "channelFormPrecision32": "Precise location", - "channelFormPrecisionUnknown": "Unknown", - "channelFormPrimaryChannelNote": "This is the main channel for device communication. Changes may affect connectivity.", - "channelFormPrimaryChannelTitle": "Primary Channel", - "channelFormSaveButton": "Save", - "channelFormUpdatedSnackbar": "Channel updated", - "channelFormUplinkSubtitle": "Forward messages to MQTT server", - "channelFormUplinkTitle": "Uplink Enabled", - "channelOptionsCopyButton": "Copy", - "channelOptionsDefaultName": "Channel {index}", - "channelOptionsDelete": "Delete Channel", - "channelOptionsDeleteButton": "Delete", - "channelOptionsDeleteConfirm": "Delete channel \"{name}\"?", - "channelOptionsDeleteFailed": "Failed to delete channel: {error}", - "channelOptionsDeleteNotConnected": "Cannot delete channel: Device not connected", - "channelOptionsDeleteTitle": "Delete Channel", - "channelOptionsEdit": "Edit Channel", - "channelOptionsEncrypted": "Encrypted", - "channelOptionsHideButton": "Hide", - "channelOptionsInviteLink": "Share Invite Link", - "channelOptionsKeyCopied": "Key copied to clipboard", - "channelOptionsKeySubtitle": "{keyBits}-bit · {keyBytes} bytes · Base64", - "channelOptionsKeyTitle": "Encryption Key", - "channelOptionsNoEncryption": "No encryption", - "channelOptionsShare": "Share Channel", - "channelOptionsShowButton": "Show", - "channelOptionsViewKey": "View Encryption Key", - "channelShareCreatingInvite": "Creating invite link...", - "channelShareDefaultName": "Channel {index}", - "channelShareInviteCopied": "Invite link copied to clipboard", - "channelShareInviteFailed": "Failed to create invite link", - "channelShareMessage": "Join my channel on Socialmesh!", - "channelShareQrInfo": "Scan this QR code in Socialmesh to import this channel", - "channelShareSignInAction": "Sign In", - "channelShareSignInRequired": "Sign in to share channels", - "channelShareSubject": "Socialmesh Channel: {channelName}", - "channelShareTitle": "Share Channel", - "channelWizardBackButton": "Back", - "channelWizardCompatMax": "Highest security. Ensure all participants support AES-256 encryption.", - "channelWizardCompatOpen": "Compatible with all devices. No key exchange needed.", - "channelWizardCompatPrivate": "Recommended. Share the QR code securely with people you want to communicate with.", - "channelWizardCompatShared": "Uses the default Meshtastic key. Other users with default settings may intercept messages.", - "channelWizardContinueButton": "Continue", - "channelWizardCopyUrlButton": "Copy URL", - "channelWizardCreateButton": "Create Channel", - "channelWizardCreateFailed": "Failed to create channel: {error}", - "channelWizardCreatedHeading": "Channel Created!", - "channelWizardCreatedSubtitle": "Share this QR code with others to let them join.", - "channelWizardCreating": "Creating channel...", - "channelWizardDefaultKey": "Default key", - "channelWizardDeviceNotConnected": "Cannot save channel: Device not connected", - "channelWizardDisabled": "Disabled", - "channelWizardDoneButton": "Done", - "channelWizardDownlinkSubtitle": "Receive messages from MQTT and broadcast them on this channel.", - "channelWizardDownlinkTitle": "Downlink Enabled", - "channelWizardEnabled": "Enabled", - "channelWizardEncryptionKeyLabel": "Encryption Key", - "channelWizardHelpTooltip": "Help", - "channelWizardKeyBits": "{bits} bits", + "channelFormMqttWarning": "Большинство устройств имеют очень ограниченные вычислительные ресурсы и оперативную память. Подключение активного канала, например LongFast, через стандартный сервер MQTT может перегрузить устройство потоком 15–25 пакетов в секунду, из-за чего оно перестанет отвечать. Рекомендуется использовать частный брокер или менее загруженный канал.", + "channelFormNameHint": "Введите имя канала (без пробелов)", + "channelFormNameMaxHint": "Не более 11 символов", + "channelFormNameTitle": "Имя канала", + "channelFormNewTitle": "Новый канал", + "channelFormPositionEnabledSubtitle": "Передавать местоположение в этом канале", + "channelFormPositionEnabledTitle": "Передача местоположения включена", + "channelFormPositionLabel": "Местоположение", + "channelFormPreciseLocationSubtitle": "Передавать точные координаты GPS", + "channelFormPreciseLocationTitle": "Точное местоположение", + "channelFormPrecision12": "С точностью до 5,8 км", + "channelFormPrecision13": "С точностью до 2,9 км", + "channelFormPrecision14": "С точностью до 1,5 км", + "channelFormPrecision15": "С точностью до 700 м", + "channelFormPrecision32": "Точное местоположение", + "channelFormPrecisionUnknown": "Неизвестно", + "channelFormPrimaryChannelNote": "Это основной канал для связи устройства. Изменения могут повлиять на соединение.", + "channelFormPrimaryChannelTitle": "Основной канал", + "channelFormSaveButton": "Сохранить", + "channelFormUpdatedSnackbar": "Канал обновлён", + "channelFormUplinkSubtitle": "Пересылать сообщения на сервер MQTT", + "channelFormUplinkTitle": "Исходящий канал (Uplink) включён", + "channelOptionsCopyButton": "Копировать", + "channelOptionsDefaultName": "Канал {index}", + "channelOptionsDelete": "Удалить канал", + "channelOptionsDeleteButton": "Удалить", + "channelOptionsDeleteConfirm": "Удалить канал «{name}»?", + "channelOptionsDeleteFailed": "Не удалось удалить канал: {error}", + "channelOptionsDeleteNotConnected": "Невозможно удалить канал: устройство не подключено", + "channelOptionsDeleteTitle": "Удалить канал", + "channelOptionsEdit": "Изменить канал", + "channelOptionsEncrypted": "Зашифрован", + "channelOptionsHideButton": "Скрыть", + "channelOptionsInviteLink": "Поделиться ссылкой-приглашением", + "channelOptionsKeyCopied": "Ключ скопирован в буфер обмена", + "channelOptionsKeySubtitle": "{keyBits} бит · {keyBytes} байт · Base64", + "channelOptionsKeyTitle": "Ключ шифрования", + "channelOptionsNoEncryption": "Без шифрования", + "channelOptionsShare": "Поделиться каналом", + "channelOptionsShowButton": "Показать", + "channelOptionsViewKey": "Просмотреть ключ шифрования", + "channelShareCreatingInvite": "Создание ссылки-приглашения...", + "channelShareDefaultName": "Канал {index}", + "channelShareInviteCopied": "Ссылка-приглашение скопирована в буфер обмена", + "channelShareInviteFailed": "Не удалось создать ссылку-приглашение", + "channelShareMessage": "Присоединяйтесь к моему каналу в Socialmesh!", + "channelShareQrInfo": "Отсканируйте этот QR-код в Socialmesh, чтобы импортировать канал", + "channelShareSignInAction": "Войти", + "channelShareSignInRequired": "Для публикации каналов необходимо войти в аккаунт", + "channelShareSubject": "Канал Socialmesh: {channelName}", + "channelShareTitle": "Поделиться каналом", + "channelWizardBackButton": "Назад", + "channelWizardCompatMax": "Максимальная защита. Убедитесь, что все участники поддерживают шифрование AES-256.", + "channelWizardCompatOpen": "Совместим со всеми устройствами. Обмен ключами не требуется.", + "channelWizardCompatPrivate": "Рекомендуется. Безопасно поделитесь QR-кодом с теми, кому хотите разрешить доступ.", + "channelWizardCompatShared": "Использует стандартный ключ Meshtastic. Другие пользователи с настройками по умолчанию могут перехватывать сообщения.", + "channelWizardContinueButton": "Продолжить", + "channelWizardCopyUrlButton": "Копировать URL", + "channelWizardCreateButton": "Создать канал", + "channelWizardCreateFailed": "Не удалось создать канал: {error}", + "channelWizardCreatedHeading": "Канал создан!", + "channelWizardCreatedSubtitle": "Поделитесь этим QR-кодом, чтобы другие могли присоединиться.", + "channelWizardCreating": "Создание канала...", + "channelWizardDefaultKey": "Ключ по умолчанию", + "channelWizardDeviceNotConnected": "Невозможно сохранить канал: устройство не подключено", + "channelWizardDisabled": "Отключено", + "channelWizardDoneButton": "Готово", + "channelWizardDownlinkSubtitle": "Получать сообщения из MQTT и рассылать их в этом канале.", + "channelWizardDownlinkTitle": "Входящий канал (Downlink) включён", + "channelWizardEnabled": "Включено", + "channelWizardEncryptionKeyLabel": "Ключ шифрования", + "channelWizardHelpTooltip": "Справка", + "channelWizardKeyBits": "{bits} бит", "channelWizardKeySizeAes128": "AES-128", - "channelWizardKeySizeAes128Desc": "Strong encryption - recommended for most uses", + "channelWizardKeySizeAes128Desc": "Надёжное шифрование — рекомендуется для большинства случаев", "channelWizardKeySizeAes256": "AES-256", - "channelWizardKeySizeAes256Desc": "Maximum encryption - highest security", - "channelWizardKeySizeDefault": "Default", - "channelWizardKeySizeDefaultDesc": "Simple shared key - compatible but not secure", - "channelWizardKeySizeNone": "None", - "channelWizardKeySizeNoneDesc": "No encryption - messages are sent in plain text", - "channelWizardMqttFloodWarning": "Most devices have very limited processing power and RAM. Bridging a busy channel like LongFast via the default MQTT server can flood the device with 15-25 packets per second, causing it to stop responding. Consider using a private broker or a quieter channel.", - "channelWizardMqttHeader": "MQTT Settings", - "channelWizardMqttWarning": "MQTT must be configured on your device for uplink/downlink to work.", - "channelWizardNameBannerInfo": "Channel names are limited to 12 alphanumeric characters.", - "channelWizardNameHeading": "Name Your Channel", - "channelWizardNameHint": "e.g., Family, Friends, Hiking", - "channelWizardNameLabel": "Channel Name", - "channelWizardNameSubtitle": "Choose a name that helps you identify this channel. It will be visible to anyone who joins.", - "channelWizardNoKey": "No key", - "channelWizardOptionsHeading": "Advanced Options", - "channelWizardOptionsSubtitle": "Configure optional channel settings.", - "channelWizardPositionSubtitle": "Share your position on this channel.", - "channelWizardPositionTitle": "Position Enabled", - "channelWizardPrivacyHeading": "Choose Privacy Level", - "channelWizardPrivacyMaxDesc": "AES-256 encryption for maximum security. Ideal for sensitive communications. Slightly higher battery usage.", - "channelWizardPrivacyMaxTitle": "Maximum Security", - "channelWizardPrivacyOpenDesc": "No encryption. Anyone with a compatible radio can read your messages. Use only for public broadcasts.", - "channelWizardPrivacyOpenTitle": "Open Channel", - "channelWizardPrivacyPrivateDesc": "AES-128 encryption with a random key. Only people you share the QR code with can join. Recommended for most uses.", - "channelWizardPrivacyPrivateTitle": "Private Channel", - "channelWizardPrivacySharedDesc": "Uses the well-known default key. Other Meshtastic users may be able to read messages. Good for community channels.", - "channelWizardPrivacySharedTitle": "Shared Channel", - "channelWizardPrivacySubtitle": "Select how secure you want this channel to be. Higher security uses stronger encryption.", - "channelWizardRadioComplianceLink": "View Radio Compliance Rules", - "channelWizardReviewEncryption": "Encryption", - "channelWizardReviewHeading": "Review & Create", - "channelWizardReviewKeySize": "Key Size", - "channelWizardReviewMqttDownlink": "MQTT Downlink", - "channelWizardReviewMqttUplink": "MQTT Uplink", - "channelWizardReviewName": "Name", - "channelWizardReviewPositionSharing": "Position Sharing", - "channelWizardReviewPrivacyLevel": "Privacy Level", - "channelWizardReviewSubtitle": "Review your channel settings before creating.", - "channelWizardScreenTitle": "Create Channel", - "channelWizardStepNameContent": "Choose a memorable name for your channel.\n\n• Names are limited to 12 characters\n• Only letters and numbers allowed\n• The name is visible to anyone who joins\n• Pick something descriptive like \"Family\" or \"Hiking\"", - "channelWizardStepNameTitle": "Channel Name", - "channelWizardStepOptionsContent": "Configure optional channel settings.\n\n• Position Sharing: Allow location sharing on this channel\n• MQTT Uplink: Send messages to the internet (requires MQTT setup)\n• MQTT Downlink: Receive messages from the internet\n• Encryption Key: Auto-generated, but you can paste a custom key\n\nMost users can skip these advanced options.", - "channelWizardStepOptionsTitle": "Advanced Options", - "channelWizardStepPrivacyContent": "Select how secure your channel should be.\n\n• OPEN: No encryption - anyone can read messages\n• SHARED: Uses the default Meshtastic key - not private\n• PRIVATE (Recommended): Unique AES-128 key - secure\n• MAXIMUM: AES-256 encryption - highest security\n\nHigher security requires sharing your channel key with others.", - "channelWizardStepPrivacyTitle": "Privacy Level", - "channelWizardStepReviewContent": "Review your channel settings before creating.\n\n• Verify the name and privacy level are correct\n• After creation, share the QR code with others\n• Others scan the QR code to join your channel\n• You can also copy the URL to share via text", - "channelWizardStepReviewTitle": "Review & Create", - "channelWizardSummaryEncryption": "Encryption", - "channelWizardSummaryName": "Name", - "channelWizardSummaryPrivacy": "Privacy", - "channelWizardUplinkSubtitle": "Send messages from this channel to MQTT when connected to the internet.", - "channelWizardUplinkTitle": "Uplink Enabled", - "channelWizardUrlCopied": "Channel URL copied to clipboard", - "channelsClearSearch": "Clear search", - "channelsDefaultChannelName": "Channel {index}", - "channelsEmpty": "No channels configured", - "channelsEmptySubtitle": "Channels are still being loaded from device\nor use the icons above to add channels", - "channelsFilterAll": "All", - "channelsFilterEncrypted": "Encrypted", + "channelWizardKeySizeAes256Desc": "Максимальное шифрование — наивысший уровень защиты", + "channelWizardKeySizeDefault": "По умолчанию", + "channelWizardKeySizeDefaultDesc": "Простой общий ключ — совместим, но небезопасен", + "channelWizardKeySizeNone": "Нет", + "channelWizardKeySizeNoneDesc": "Без шифрования — сообщения отправляются в открытом виде", + "channelWizardMqttFloodWarning": "Большинство устройств имеют очень ограниченные вычислительные ресурсы и оперативную память. Подключение активного канала, например LongFast, через стандартный сервер MQTT может перегрузить устройство потоком 15–25 пакетов в секунду, из-за чего оно перестанет отвечать. Рекомендуется использовать частный брокер или менее загруженный канал.", + "channelWizardMqttHeader": "Настройки MQTT", + "channelWizardMqttWarning": "Для работы uplink/downlink необходимо настроить MQTT на устройстве.", + "channelWizardNameBannerInfo": "Имя канала ограничено 12 буквенно-цифровыми символами.", + "channelWizardNameHeading": "Назовите канал", + "channelWizardNameHint": "Например: Семья, Друзья, Поход", + "channelWizardNameLabel": "Имя канала", + "channelWizardNameSubtitle": "Выберите имя, по которому вы будете узнавать этот канал. Оно будет видно всем, кто к нему присоединится.", + "channelWizardNoKey": "Нет ключа", + "channelWizardOptionsHeading": "Дополнительные параметры", + "channelWizardOptionsSubtitle": "Настройте дополнительные параметры канала.", + "channelWizardPositionSubtitle": "Передавать ваше местоположение в этом канале.", + "channelWizardPositionTitle": "Передача местоположения включена", + "channelWizardPrivacyHeading": "Выберите уровень конфиденциальности", + "channelWizardPrivacyMaxDesc": "Шифрование AES-256 для максимальной защиты. Идеально для конфиденциальной переписки. Незначительно повышает расход заряда батареи.", + "channelWizardPrivacyMaxTitle": "Максимальная защита", + "channelWizardPrivacyOpenDesc": "Без шифрования. Любой пользователь с совместимым радиоустройством сможет читать ваши сообщения. Используйте только для публичных трансляций.", + "channelWizardPrivacyOpenTitle": "Открытый канал", + "channelWizardPrivacyPrivateDesc": "Шифрование AES-128 со случайным ключом. Присоединиться смогут только те, кому вы передадите QR-код. Рекомендуется для большинства случаев.", + "channelWizardPrivacyPrivateTitle": "Приватный канал", + "channelWizardPrivacySharedDesc": "Использует общеизвестный ключ по умолчанию. Другие пользователи Meshtastic могут читать сообщения. Подходит для публичных сообществ.", + "channelWizardPrivacySharedTitle": "Общий канал", + "channelWizardPrivacySubtitle": "Выберите уровень защиты канала. Более высокий уровень означает более стойкое шифрование.", + "channelWizardRadioComplianceLink": "Посмотреть правила использования радиосвязи", + "channelWizardReviewEncryption": "Шифрование", + "channelWizardReviewHeading": "Проверка и создание", + "channelWizardReviewKeySize": "Размер ключа", + "channelWizardReviewMqttDownlink": "MQTT входящий канал (Downlink)", + "channelWizardReviewMqttUplink": "MQTT исходящий канал (Uplink)", + "channelWizardReviewName": "Имя", + "channelWizardReviewPositionSharing": "Передача местоположения", + "channelWizardReviewPrivacyLevel": "Уровень конфиденциальности", + "channelWizardReviewSubtitle": "Проверьте настройки канала перед созданием.", + "channelWizardScreenTitle": "Создать канал", + "channelWizardStepNameContent": "Придумайте запоминающееся имя для вашего канала.\n\n• Имя ограничено 12 символами\n• Допустимы только буквы и цифры\n• Имя видно всем, кто присоединится\n• Выбирайте что-то понятное, например «Семья» или «Поход»", + "channelWizardStepNameTitle": "Имя канала", + "channelWizardStepOptionsContent": "Настройте дополнительные параметры канала.\n\n• Передача местоположения: разрешить геолокацию в этом канале\n• MQTT Uplink: отправлять сообщения в интернет (требует настройки MQTT)\n• MQTT Downlink: получать сообщения из интернета\n• Ключ шифрования: генерируется автоматически, но можно вставить собственный\n\nБольшинству пользователей эти расширенные настройки не нужны.", + "channelWizardStepOptionsTitle": "Дополнительные параметры", + "channelWizardStepPrivacyContent": "Выберите уровень защиты вашего канала.\n\n• ОТКРЫТЫЙ: без шифрования — сообщения может читать каждый\n• ОБЩИЙ: использует стандартный ключ Meshtastic — не является приватным\n• ПРИВАТНЫЙ (рекомендуется): уникальный ключ AES-128 — безопасный\n• МАКСИМАЛЬНЫЙ: шифрование AES-256 — наивысший уровень защиты\n\nПри более высоком уровне защиты необходимо передать ключ канала другим участникам.", + "channelWizardStepPrivacyTitle": "Уровень конфиденциальности", + "channelWizardStepReviewContent": "Проверьте настройки канала перед созданием.\n\n• Убедитесь, что имя и уровень конфиденциальности верны\n• После создания поделитесь QR-кодом с другими участниками\n• Другие сканируют QR-код, чтобы присоединиться к каналу\n• Можно также скопировать URL и отправить его в виде текста", + "channelWizardStepReviewTitle": "Проверка и создание", + "channelWizardSummaryEncryption": "Шифрование", + "channelWizardSummaryName": "Имя", + "channelWizardSummaryPrivacy": "Конфиденциальность", + "channelWizardUplinkSubtitle": "Отправлять сообщения из этого канала в MQTT при наличии подключения к интернету.", + "channelWizardUplinkTitle": "Исходящий канал (Uplink) включён", + "channelWizardUrlCopied": "URL канала скопирован в буфер обмена", + "channelsClearSearch": "Очистить поиск", + "channelsDefaultChannelName": "Канал {index}", + "channelsEmpty": "Каналы не настроены", + "channelsEmptySubtitle": "Каналы ещё загружаются с устройства\nили воспользуйтесь значками выше, чтобы добавить каналы", + "channelsFilterAll": "Все", + "channelsFilterEncrypted": "Зашифрованные", "channelsFilterMqtt": "MQTT", - "channelsFilterPosition": "Position", - "channelsFilterPrimary": "Primary", - "channelsMenuAddChannel": "Add Channel", - "channelsMenuHelp": "Help", - "channelsMenuScanQrCode": "Scan QR Code", - "channelsMenuSettings": "Settings", - "channelsNoMatch": "No channels match \"{query}\"", - "channelsPrimaryChannelName": "Primary Channel", - "channelsScreenTitle": "Channels ({count})", - "channelsSearchHint": "Search channels", - "channelsTileEncrypted": "Encrypted", - "channelsTileNoEncryption": "No encryption", - "channelsTilePrimaryBadge": "PRIMARY", + "channelsFilterPosition": "Местоположение", + "channelsFilterPrimary": "Основной", + "channelsMenuAddChannel": "Добавить канал", + "channelsMenuHelp": "Справка", + "channelsMenuScanQrCode": "Сканировать QR-код", + "channelsMenuSettings": "Настройки", + "channelsNoMatch": "Каналов, соответствующих «{query}», не найдено", + "channelsPrimaryChannelName": "Основной канал", + "channelsScreenTitle": "Каналы ({count})", + "channelsSearchHint": "Поиск каналов", + "channelsTileEncrypted": "Зашифрован", + "channelsTileNoEncryption": "Без шифрования", + "channelsTilePrimaryBadge": "ОСНОВНОЙ", "channelsUnreadOverflow": "99+", "commonCancel": "Отмена", "commonDelete": "Удалить", "commonDone": "Готово", - "commonErrorWithDetails": "Error: {error}", + "commonErrorWithDetails": "Ошибка: {error}", "commonGoBack": "Назад", - "commonNext": "Next", - "commonNever": "Never", - "commonJustNow": "Just now", - "commonMinutesAgo": "{count}m ago", - "commonHoursAgo": "{count}h ago", - "commonDaysAgo": "{count}d ago", - "commonHopsSingular": "{count} hop", - "commonHopsPlural": "{count} hops", - "nodeInfoLatitude": "Lat: {value}°", - "nodeInfoLongitude": "Lon: {value}°", - "nodeInfoNotAvailable": "N/A", - "nodeInfoYou": "YOU", - "nodeInfoPosition": "Position", - "nodeInfoMessage": "Message", - "bindingSelectorNoResults": "No variables found", + "commonNext": "Далее", + "commonNever": "Никогда", + "commonJustNow": "только что", + "commonMinutesAgo": "{count} мин. назад", + "commonHoursAgo": "{count} ч. назад", + "commonDaysAgo": "{count} дн. назад", + "commonHopsSingular": "{count} хоп", + "commonHopsPlural": "{count} хопа", + "nodeInfoLatitude": "Шир: {value}°", + "nodeInfoLongitude": "Дол: {value}°", + "nodeInfoNotAvailable": "Н/Д", + "nodeInfoYou": "ВЫ", + "nodeInfoPosition": "Позиция", + "nodeInfoMessage": "Сообщение", + "bindingSelectorNoResults": "Переменные не найдены", "commonOk": "OК", "commonRetry": "Повторить", "commonSave": "Сохранить", - "debugScreenAppLogTitle": "App Log", - "debugScreenApply": "Apply", - "debugScreenAutoScrollOff": "Auto-scroll off", - "debugScreenAutoScrollOn": "Auto-scroll on", - "debugScreenClear": "Clear", - "debugScreenClearLogsMenuItem": "Clear Logs", - "debugScreenClearLogsMessage": "Are you sure you want to clear all logs?", - "debugScreenClearLogsTitle": "Clear Logs", - "debugScreenClearMenuItem": "Clear", - "debugScreenCopy": "Copy", - "debugScreenCopyToClipboard": "Copy to Clipboard", - "debugScreenDebugExportMessage": "This export includes device info, connection state, node list, route metadata, and recent app logs.\n\nMessage text is redacted and GPS coordinates are coarsened. Review the file before sharing with anyone.", - "debugScreenDebugExportTitle": "Debug Export", - "debugScreenDeviceApply": "Apply", - "debugScreenDeviceAutoScrollOff": "Auto-scroll OFF", - "debugScreenDeviceAutoScrollOn": "Auto-scroll ON", - "debugScreenDeviceClear": "Clear", - "debugScreenDeviceClearMessage": "Are you sure you want to clear all device logs?", - "debugScreenDeviceClearTitle": "Clear Logs", - "debugScreenDeviceEntryCount": "{count} entries", - "debugScreenDeviceFilterSubtitle": "Select which levels to display", - "debugScreenDeviceFilterTitle": "Filter Log Levels", - "debugScreenDeviceLogsCopied": "Device logs copied to clipboard", - "debugScreenDeviceLogsTitle": "Device Logs", - "debugScreenDeviceSearchHint": "Search logs...", - "debugScreenEntryCount": "{count} entries", - "debugScreenExport": "Export", - "debugScreenExportDebugJson": "Export Debug JSON", - "debugScreenExportFailed": "Export failed: {error}", - "debugScreenFilter": "Filter", - "debugScreenFilterLevelsTooltip": "Filter levels", - "debugScreenFilterLogLevels": "Filter Log Levels", - "debugScreenFilterSubtitle": "Select which levels to display", - "debugScreenFiltered": "Filtered", - "debugScreenGeneratingExport": "Generating debug export...", - "debugScreenLogCopied": "Log copied to clipboard", - "debugScreenLogsWillAppear": "Logs will appear here as your device sends them", - "debugScreenNoDeviceLogs": "No device logs yet", - "debugScreenNoLogEntries": "No log entries", - "debugScreenSearchLogsHint": "Search logs...", - "debugScreenShare": "Share", - "debugScreenShareLog": "Share Log", - "debugScreenStreamingBanner": "Streaming firmware debug logs from your connected device via BLE", - "deviceConfigBleName": "BLE Name", - "deviceConfigBroadcastEighteenHours": "Eighteen Hours", - "deviceConfigBroadcastFiveHours": "Five Hours", - "deviceConfigBroadcastFortyEightHours": "Forty Eight Hours", - "deviceConfigBroadcastFourHours": "Four Hours", - "deviceConfigBroadcastInterval": "Broadcast Interval", - "deviceConfigBroadcastIntervalSubtitle": "How often to broadcast node info to the mesh", - "deviceConfigBroadcastNever": "Never", - "deviceConfigBroadcastSeventyTwoHours": "Seventy Two Hours", - "deviceConfigBroadcastSixHours": "Six Hours", - "deviceConfigBroadcastThirtySixHours": "Thirty Six Hours", - "deviceConfigBroadcastThreeHours": "Three Hours", - "deviceConfigBroadcastTwelveHours": "Twelve Hours", - "deviceConfigBroadcastTwentyFourHours": "Twenty Four Hours", - "deviceConfigButtonGpio": "Button GPIO", - "deviceConfigBuzzerAllEnabled": "All Enabled", - "deviceConfigBuzzerAllEnabledDesc": "Buzzer sounds for all feedback including buttons and alerts.", - "deviceConfigBuzzerDirectMsgOnly": "Direct Messages Only", - "deviceConfigBuzzerDirectMsgOnlyDesc": "Buzzer only for direct messages and alerts.", - "deviceConfigBuzzerDisabled": "Disabled", - "deviceConfigBuzzerDisabledDesc": "All buzzer audio feedback is disabled.", - "deviceConfigBuzzerGpio": "Buzzer GPIO", - "deviceConfigBuzzerNotificationsOnly": "Notifications Only", - "deviceConfigBuzzerNotificationsOnlyDesc": "Buzzer only for notifications and alerts, not button presses.", - "deviceConfigBuzzerSystemOnly": "System Only", - "deviceConfigBuzzerSystemOnlyDesc": "Button presses, startup, shutdown sounds only. No alerts.", - "deviceConfigDisableLedHeartbeat": "Disable LED Heartbeat", - "deviceConfigDisableLedHeartbeatSubtitle": "Turn off the blinking status LED", - "deviceConfigDisableTripleClick": "Disable Triple Click", - "deviceConfigDisableTripleClickSubtitle": "Disable triple-click to toggle GPS", - "deviceConfigDoubleTapAsButton": "Double Tap as Button", - "deviceConfigDoubleTapAsButtonSubtitle": "Treat accelerometer double-tap as button press", - "deviceConfigFactoryReset": "Factory Reset", - "deviceConfigFactoryResetDialogConfirm": "Factory Reset", - "deviceConfigFactoryResetDialogMessage": "This will reset ALL device settings to factory defaults, including channels, configuration, and stored data.\n\nThis action cannot be undone!", - "deviceConfigFactoryResetDialogTitle": "Factory Reset", - "deviceConfigFactoryResetError": "Failed to reset: {error}", - "deviceConfigFactoryResetSubtitle": "Reset device to factory defaults", - "deviceConfigFactoryResetSuccess": "Factory reset initiated - device will restart", - "deviceConfigFrequencyOverride": "Frequency Override (MHz)", - "deviceConfigFrequencyOverrideHint": "0.0 (use default)", - "deviceConfigGpioWarning": "Only change these if you know your hardware requires custom GPIO pins.", - "deviceConfigHamModeInfo": "Ham mode uses your long name as call sign (max 8 chars), broadcasts node info every 10 minutes, overrides frequency, duty cycle, and TX power, and disables encryption.", - "deviceConfigHamModeWarning": "HAM nodes cannot relay encrypted traffic. Other non-HAM nodes in your mesh will not be able to route encrypted messages through this node, creating a relay gap in the network.", - "deviceConfigHardware": "Hardware", - "deviceConfigLicensedOperator": "Licensed Operator (Ham)", - "deviceConfigLicensedOperatorSubtitle": "Sets call sign, overrides frequency/power, disables encryption", - "deviceConfigLongName": "Long Name", - "deviceConfigLongNameHint": "Enter display name", - "deviceConfigLongNameSubtitle": "Display name visible on the mesh", - "deviceConfigNameHelpText": "Your device name is broadcast to the mesh and visible to other nodes.", - "deviceConfigNodeNumber": "Node Number", - "deviceConfigPosixTimezone": "POSIX Timezone", - "deviceConfigPosixTimezoneExample": "e.g. EST5EDT,M3.2.0,M11.1.0", - "deviceConfigPosixTimezoneHint": "Leave empty for UTC", - "deviceConfigRebootWarning": "Changes to device configuration will cause the device to reboot.", - "deviceConfigRebroadcastAll": "All", - "deviceConfigRebroadcastAllDesc": "Rebroadcast any observed message. Default behavior.", - "deviceConfigRebroadcastAllSkipDecoding": "All (Skip Decoding)", - "deviceConfigRebroadcastAllSkipDecodingDesc": "Rebroadcast all messages without decoding. Faster, less CPU.", - "deviceConfigRebroadcastCorePortnumsOnly": "Core Port Numbers Only", - "deviceConfigRebroadcastCorePortnumsOnlyDesc": "Rebroadcast only core Meshtastic packets (position, telemetry, etc).", - "deviceConfigRebroadcastKnownOnly": "Known Only", - "deviceConfigRebroadcastKnownOnlyDesc": "Only rebroadcast messages from nodes in the node database.", - "deviceConfigRebroadcastLocalOnly": "Local Only", - "deviceConfigRebroadcastLocalOnlyDesc": "Only rebroadcast messages from local senders. Good for isolated networks.", - "deviceConfigRebroadcastNone": "None", - "deviceConfigRebroadcastNoneDesc": "Do not rebroadcast any messages. Node only receives.", - "deviceConfigRemoteAdminConfiguring": "Configuring: {nodeName}", - "deviceConfigRemoteAdminTitle": "Remote Administration", - "deviceConfigResetNodeDb": "Reset Node Database", - "deviceConfigResetNodeDbDialogConfirm": "Reset", - "deviceConfigResetNodeDbDialogMessage": "This will clear all stored node information from the device. The mesh network will need to rediscover all nodes.\n\nAre you sure you want to continue?", - "deviceConfigResetNodeDbDialogTitle": "Reset Node Database", - "deviceConfigResetNodeDbError": "Failed to reset: {error}", - "deviceConfigResetNodeDbSubtitle": "Clear all stored node information", - "deviceConfigResetNodeDbSuccess": "Node database reset initiated", - "deviceConfigRoleClient": "Client", - "deviceConfigRoleClientBase": "Client Base", - "deviceConfigRoleClientBaseDesc": "Base station for favorited nodes. Routes their packets like a router, others as client.", - "deviceConfigRoleClientDesc": "Default role. Mesh packets are routed through this node. Can send and receive messages.", - "deviceConfigRoleClientHidden": "Client Hidden", - "deviceConfigRoleClientHiddenDesc": "Acts as client but hides from the node list. Still routes traffic.", - "deviceConfigRoleClientMute": "Client Mute", - "deviceConfigRoleClientMuteDesc": "Same as client but will not transmit any messages from itself. Useful for monitoring.", - "deviceConfigRoleLostAndFound": "Lost and Found", - "deviceConfigRoleLostAndFoundDesc": "Optimized for finding lost devices. Sends periodic beacons.", - "deviceConfigRoleRouter": "Router", - "deviceConfigRoleRouterDesc": "Routes mesh packets between nodes. Screen and Bluetooth disabled to conserve power.", - "deviceConfigRoleRouterLate": "Router Late", - "deviceConfigRoleRouterLateDesc": "Rebroadcasts all packets after other routers. Extends coverage without consuming priority hops.", - "deviceConfigRoleSensor": "Sensor", - "deviceConfigRoleSensorDesc": "Designed for remote sensing. Reports telemetry data at defined intervals.", + "debugScreenAppLogTitle": "Журнал приложения", + "debugScreenApply": "Применить", + "debugScreenAutoScrollOff": "Автопрокрутка выключена", + "debugScreenAutoScrollOn": "Автопрокрутка включена", + "debugScreenClear": "Очистить", + "debugScreenClearLogsMenuItem": "Очистить журналы", + "debugScreenClearLogsMessage": "Вы уверены, что хотите удалить все журналы?", + "debugScreenClearLogsTitle": "Очистить журналы", + "debugScreenClearMenuItem": "Очистить", + "debugScreenCopy": "Копировать", + "debugScreenCopyToClipboard": "Копировать в буфер обмена", + "debugScreenDebugExportMessage": "Этот экспорт содержит сведения об устройстве, состояние подключения, список узлов, метаданные маршрутов и последние журналы приложения.\n\nТекст сообщений скрыт, координаты GPS огрублены. Проверьте файл перед отправкой.", + "debugScreenDebugExportTitle": "Экспорт отладки", + "debugScreenDeviceApply": "Применить", + "debugScreenDeviceAutoScrollOff": "Автопрокрутка ВЫКЛ", + "debugScreenDeviceAutoScrollOn": "Автопрокрутка ВКЛ", + "debugScreenDeviceClear": "Очистить", + "debugScreenDeviceClearMessage": "Вы уверены, что хотите удалить все журналы устройства?", + "debugScreenDeviceClearTitle": "Очистить журналы", + "debugScreenDeviceEntryCount": "{count} записей", + "debugScreenDeviceFilterSubtitle": "Выберите отображаемые уровни", + "debugScreenDeviceFilterTitle": "Фильтр уровней журнала", + "debugScreenDeviceLogsCopied": "Журналы устройства скопированы в буфер обмена", + "debugScreenDeviceLogsTitle": "Журналы устройства", + "debugScreenDeviceSearchHint": "Поиск в журналах...", + "debugScreenEntryCount": "{count} записей", + "debugScreenExport": "Экспорт", + "debugScreenExportDebugJson": "Экспортировать JSON отладки", + "debugScreenExportFailed": "Экспорт не выполнен: {error}", + "debugScreenFilter": "Фильтр", + "debugScreenFilterLevelsTooltip": "Фильтр уровней", + "debugScreenFilterLogLevels": "Фильтр уровней журнала", + "debugScreenFilterSubtitle": "Выберите отображаемые уровни", + "debugScreenFiltered": "Отфильтровано", + "debugScreenGeneratingExport": "Создание экспорта отладки...", + "debugScreenLogCopied": "Журнал скопирован в буфер обмена", + "debugScreenLogsWillAppear": "Журналы будут появляться здесь по мере поступления от устройства", + "debugScreenNoDeviceLogs": "Журналов устройства ещё нет", + "debugScreenNoLogEntries": "Записей журнала нет", + "debugScreenSearchLogsHint": "Поиск в журналах...", + "debugScreenShare": "Поделиться", + "debugScreenShareLog": "Поделиться журналом", + "debugScreenStreamingBanner": "Получение отладочных журналов прошивки с подключённого устройства через BLE", + "deviceConfigBleName": "Имя BLE", + "deviceConfigBroadcastEighteenHours": "Восемнадцать часов", + "deviceConfigBroadcastFiveHours": "Пять часов", + "deviceConfigBroadcastFortyEightHours": "Сорок восемь часов", + "deviceConfigBroadcastFourHours": "Четыре часа", + "deviceConfigBroadcastInterval": "Интервал трансляции", + "deviceConfigBroadcastIntervalSubtitle": "Как часто транслировать информацию об узле в сеть", + "deviceConfigBroadcastNever": "Никогда", + "deviceConfigBroadcastSeventyTwoHours": "Семьдесят два часа", + "deviceConfigBroadcastSixHours": "Шесть часов", + "deviceConfigBroadcastThirtySixHours": "Тридцать шесть часов", + "deviceConfigBroadcastThreeHours": "Три часа", + "deviceConfigBroadcastTwelveHours": "Двенадцать часов", + "deviceConfigBroadcastTwentyFourHours": "Двадцать четыре часа", + "deviceConfigButtonGpio": "GPIO кнопки", + "deviceConfigBuzzerAllEnabled": "Все включены", + "deviceConfigBuzzerAllEnabledDesc": "Зуммер сигнализирует обо всех событиях, включая нажатия кнопок и оповещения.", + "deviceConfigBuzzerDirectMsgOnly": "Только личные сообщения", + "deviceConfigBuzzerDirectMsgOnlyDesc": "Зуммер срабатывает только для личных сообщений и оповещений.", + "deviceConfigBuzzerDisabled": "Отключён", + "deviceConfigBuzzerDisabledDesc": "Все звуковые сигналы зуммера отключены.", + "deviceConfigBuzzerGpio": "GPIO зуммера", + "deviceConfigBuzzerNotificationsOnly": "Только уведомления", + "deviceConfigBuzzerNotificationsOnlyDesc": "Зуммер срабатывает только для уведомлений и оповещений, но не при нажатии кнопок.", + "deviceConfigBuzzerSystemOnly": "Только системные", + "deviceConfigBuzzerSystemOnlyDesc": "Только нажатия кнопок, включение и выключение устройства. Без оповещений.", + "deviceConfigDisableLedHeartbeat": "Отключить мигание LED", + "deviceConfigDisableLedHeartbeatSubtitle": "Выключить мигающий индикатор состояния", + "deviceConfigDisableTripleClick": "Отключить тройное нажатие", + "deviceConfigDisableTripleClickSubtitle": "Отключить тройное нажатие для переключения GPS", + "deviceConfigDoubleTapAsButton": "Двойное касание как кнопка", + "deviceConfigDoubleTapAsButtonSubtitle": "Обрабатывать двойное касание акселерометра как нажатие кнопки", + "deviceConfigFactoryReset": "Сброс к заводским настройкам", + "deviceConfigFactoryResetDialogConfirm": "Сбросить", + "deviceConfigFactoryResetDialogMessage": "Это сбросит ВСЕ настройки устройства к заводским значениям, включая каналы, конфигурацию и сохранённые данные.\n\nДействие нельзя отменить!", + "deviceConfigFactoryResetDialogTitle": "Сброс к заводским настройкам", + "deviceConfigFactoryResetError": "Не удалось выполнить сброс: {error}", + "deviceConfigFactoryResetSubtitle": "Сбросить устройство к заводским настройкам", + "deviceConfigFactoryResetSuccess": "Сброс к заводским настройкам начат — устройство перезагружается", + "deviceConfigFrequencyOverride": "Переопределение частоты (MHz)", + "deviceConfigFrequencyOverrideHint": "0.0 (использовать по умолчанию)", + "deviceConfigGpioWarning": "Изменяйте эти параметры только если вы знаете, что ваше устройство требует нестандартных GPIO-пинов.", + "deviceConfigHamModeInfo": "Режим HAM использует ваше полное имя в качестве позывного (макс. 8 символов), транслирует информацию об узле каждые 10 минут, переопределяет частоту, рабочий цикл и мощность передачи, а также отключает шифрование.", + "deviceConfigHamModeWarning": "Узлы HAM не могут ретранслировать зашифрованный трафик. Другие узлы сети без режима HAM не смогут маршрутизировать зашифрованные сообщения через этот узел, создавая разрыв в ретрансляции.", + "deviceConfigHardware": "Аппаратная часть", + "deviceConfigLicensedOperator": "Лицензированный оператор (HAM)", + "deviceConfigLicensedOperatorSubtitle": "Задаёт позывной, переопределяет частоту и мощность, отключает шифрование", + "deviceConfigLongName": "Полное имя", + "deviceConfigLongNameHint": "Введите отображаемое имя", + "deviceConfigLongNameSubtitle": "Отображаемое имя, видимое в сети", + "deviceConfigNameHelpText": "Имя вашего устройства транслируется в сеть и видно другим узлам.", + "deviceConfigNodeNumber": "Номер узла", + "deviceConfigPosixTimezone": "POSIX-часовой пояс", + "deviceConfigPosixTimezoneExample": "например, EST5EDT,M3.2.0,M11.1.0", + "deviceConfigPosixTimezoneHint": "Оставьте пустым для UTC", + "deviceConfigRebootWarning": "Изменения конфигурации устройства приведут к его перезагрузке.", + "deviceConfigRebroadcastAll": "Все", + "deviceConfigRebroadcastAllDesc": "Ретранслировать любое обнаруженное сообщение. Поведение по умолчанию.", + "deviceConfigRebroadcastAllSkipDecoding": "Все (без декодирования)", + "deviceConfigRebroadcastAllSkipDecodingDesc": "Ретранслировать все сообщения без декодирования. Быстрее, меньше нагрузка на CPU.", + "deviceConfigRebroadcastCorePortnumsOnly": "Только основные номера портов", + "deviceConfigRebroadcastCorePortnumsOnlyDesc": "Ретранслировать только основные пакеты Meshtastic (позиция, телеметрия и т.д.).", + "deviceConfigRebroadcastKnownOnly": "Только известные", + "deviceConfigRebroadcastKnownOnlyDesc": "Ретранслировать только сообщения от узлов из базы данных узлов.", + "deviceConfigRebroadcastLocalOnly": "Только локальные", + "deviceConfigRebroadcastLocalOnlyDesc": "Ретранслировать только сообщения от локальных отправителей. Подходит для изолированных сетей.", + "deviceConfigRebroadcastNone": "Нет", + "deviceConfigRebroadcastNoneDesc": "Не ретранслировать никакие сообщения. Узел только принимает.", + "deviceConfigRemoteAdminConfiguring": "Настройка: {nodeName}", + "deviceConfigRemoteAdminTitle": "Удалённое администрирование", + "deviceConfigResetNodeDb": "Сбросить базу данных узлов", + "deviceConfigResetNodeDbDialogConfirm": "Сбросить", + "deviceConfigResetNodeDbDialogMessage": "Это удалит всю сохранённую информацию об узлах с устройства. Сети потребуется заново обнаружить все узлы.\n\nВы уверены, что хотите продолжить?", + "deviceConfigResetNodeDbDialogTitle": "Сбросить базу данных узлов", + "deviceConfigResetNodeDbError": "Не удалось выполнить сброс: {error}", + "deviceConfigResetNodeDbSubtitle": "Удалить всю сохранённую информацию об узлах", + "deviceConfigResetNodeDbSuccess": "Сброс базы данных узлов начат", + "deviceConfigRoleClient": "Клиент", + "deviceConfigRoleClientBase": "Базовый клиент", + "deviceConfigRoleClientBaseDesc": "Базовая станция для избранных узлов. Маршрутизирует их пакеты как маршрутизатор, остальные — как клиент.", + "deviceConfigRoleClientDesc": "Роль по умолчанию. Пакеты сети маршрутизируются через этот узел. Может отправлять и получать сообщения.", + "deviceConfigRoleClientHidden": "Скрытый клиент", + "deviceConfigRoleClientHiddenDesc": "Работает как клиент, но скрыт из списка узлов. По-прежнему маршрутизирует трафик.", + "deviceConfigRoleClientMute": "Немой клиент", + "deviceConfigRoleClientMuteDesc": "Аналогично клиенту, но не передаёт собственные сообщения. Полезно для мониторинга.", + "deviceConfigRoleLostAndFound": "Бюро находок", + "deviceConfigRoleLostAndFoundDesc": "Оптимизировано для поиска потерянных устройств. Периодически отправляет маяки.", + "deviceConfigRoleRouter": "Маршрутизатор", + "deviceConfigRoleRouterDesc": "Маршрутизирует пакеты сети между узлами. Экран и Bluetooth отключены для экономии питания.", + "deviceConfigRoleRouterLate": "Запоздалый маршрутизатор", + "deviceConfigRoleRouterLateDesc": "Ретранслирует все пакеты после других маршрутизаторов. Расширяет зону покрытия без расхода приоритетных переходов.", + "deviceConfigRoleSensor": "Сенсор", + "deviceConfigRoleSensorDesc": "Предназначен для дистанционного сбора данных. Передаёт телеметрию через заданные интервалы.", "deviceConfigRoleTak": "TAK", - "deviceConfigRoleTakDesc": "Team Awareness Kit integration. Bridges Meshtastic and TAK systems.", - "deviceConfigRoleTakTracker": "TAK Tracker", - "deviceConfigRoleTakTrackerDesc": "Combination of TAK and Tracker modes.", - "deviceConfigRoleTracker": "Tracker", - "deviceConfigRoleTrackerDesc": "Optimized for GPS tracking. Sends position updates at defined intervals.", - "deviceConfigSave": "Save", - "deviceConfigSaveAndReboot": "Save & Reboot", - "deviceConfigSaveChangesMessage": "Saving device configuration will cause the device to reboot. You will be briefly disconnected while the device restarts.", - "deviceConfigSaveChangesTitle": "Save Changes?", - "deviceConfigSaveError": "Error saving config: {error}", - "deviceConfigSavedLocal": "Configuration saved - device rebooting", - "deviceConfigSavedRemote": "Configuration sent to remote node", - "deviceConfigSectionButtonInput": "Button & Input", - "deviceConfigSectionBuzzer": "Buzzer", - "deviceConfigSectionDangerZone": "Danger Zone", - "deviceConfigSectionDeviceInfo": "Device Info", - "deviceConfigSectionDeviceRole": "Device Role", - "deviceConfigSectionGpio": "GPIO (Advanced)", + "deviceConfigRoleTakDesc": "Интеграция с Team Awareness Kit. Соединяет Meshtastic и системы TAK.", + "deviceConfigRoleTakTracker": "TAK-трекер", + "deviceConfigRoleTakTrackerDesc": "Сочетание режимов TAK и трекера.", + "deviceConfigRoleTracker": "Трекер", + "deviceConfigRoleTrackerDesc": "Оптимизировано для GPS-трекинга. Отправляет обновления позиции через заданные интервалы.", + "deviceConfigSave": "Сохранить", + "deviceConfigSaveAndReboot": "Сохранить и перезагрузить", + "deviceConfigSaveChangesMessage": "Сохранение конфигурации устройства приведёт к его перезагрузке. Вы будете кратковременно отключены на время перезапуска.", + "deviceConfigSaveChangesTitle": "Сохранить изменения?", + "deviceConfigSaveError": "Ошибка сохранения конфигурации: {error}", + "deviceConfigSavedLocal": "Конфигурация сохранена — устройство перезагружается", + "deviceConfigSavedRemote": "Конфигурация отправлена на удалённый узел", + "deviceConfigSectionButtonInput": "Кнопки и ввод", + "deviceConfigSectionBuzzer": "Зуммер", + "deviceConfigSectionDangerZone": "Опасная зона", + "deviceConfigSectionDeviceInfo": "Информация об устройстве", + "deviceConfigSectionDeviceRole": "Роль устройства", + "deviceConfigSectionGpio": "GPIO (дополнительно)", "deviceConfigSectionLed": "LED", - "deviceConfigSectionNodeInfoBroadcast": "Node Info Broadcast", - "deviceConfigSectionRebroadcastMode": "Rebroadcast Mode", - "deviceConfigSectionSerial": "Serial", - "deviceConfigSectionTimezone": "Timezone", - "deviceConfigSectionUserFlags": "User Flags", - "deviceConfigSerialConsole": "Serial Console", - "deviceConfigSerialConsoleSubtitle": "Enable serial port for debugging", - "deviceConfigShortName": "Short Name", - "deviceConfigShortNameHint": "e.g. FUZZ", - "deviceConfigShortNameSubtitle": "Max {maxLength} characters (A-Z, 0-9)", - "deviceConfigTitle": "Device Config", - "deviceConfigTitleRemote": "Device Config (Remote)", - "deviceConfigTxPower": "TX Power", + "deviceConfigSectionNodeInfoBroadcast": "Трансляция информации об узле", + "deviceConfigSectionRebroadcastMode": "Режим ретрансляции", + "deviceConfigSectionSerial": "Последовательный порт", + "deviceConfigSectionTimezone": "Часовой пояс", + "deviceConfigSectionUserFlags": "Пользовательские флаги", + "deviceConfigSerialConsole": "Консоль последовательного порта", + "deviceConfigSerialConsoleSubtitle": "Включить последовательный порт для отладки", + "deviceConfigShortName": "Короткое имя", + "deviceConfigShortNameHint": "например, FUZZ", + "deviceConfigShortNameSubtitle": "Макс. {maxLength} символов (A-Z, 0-9)", + "deviceConfigTitle": "Конфигурация устройства", + "deviceConfigTitleRemote": "Конфигурация устройства (удалённая)", + "deviceConfigTxPower": "Мощность передачи (TX)", "deviceConfigTxPowerValue": "{power} dBm", - "deviceConfigUnknown": "Unknown", - "deviceConfigUnmessagable": "Unmessagable", - "deviceConfigUnmessagableSubtitle": "Mark as infrastructure node that won't respond to messages", - "deviceConfigUserId": "User ID", - "deviceSheetActionAppSettings": "App Settings", - "deviceSheetActionAppSettingsSubtitle": "Notifications, theme, preferences", - "deviceSheetActionDeviceConfig": "Device Config", - "deviceSheetActionDeviceConfigSubtitle": "Configure device role and settings", - "deviceSheetActionDeviceManagement": "Device Management", - "deviceSheetActionDeviceManagementSubtitle": "Radio, display, power, and position settings", - "deviceSheetActionResetNodeDb": "Reset Node Database", - "deviceSheetActionResetNodeDbSubtitle": "Clear all learned nodes from device", - "deviceSheetActionScanQr": "Scan QR Code", - "deviceSheetActionScanQrSubtitle": "Import nodes, channels, or automations", - "deviceSheetAddress": "Address", - "deviceSheetBattery": "Battery", + "deviceConfigUnknown": "Неизвестно", + "deviceConfigUnmessagable": "Недоступен для сообщений", + "deviceConfigUnmessagableSubtitle": "Пометить как инфраструктурный узел, не отвечающий на сообщения", + "deviceConfigUserId": "ID пользователя", + "deviceSheetActionAppSettings": "Настройки приложения", + "deviceSheetActionAppSettingsSubtitle": "Уведомления, тема оформления, настройки", + "deviceSheetActionDeviceConfig": "Конфигурация устройства", + "deviceSheetActionDeviceConfigSubtitle": "Настроить роль и параметры устройства", + "deviceSheetActionDeviceManagement": "Управление устройством", + "deviceSheetActionDeviceManagementSubtitle": "Настройки радио, дисплея, питания и позиции", + "deviceSheetActionResetNodeDb": "Сбросить базу данных узлов", + "deviceSheetActionResetNodeDbSubtitle": "Удалить все известные узлы с устройства", + "deviceSheetActionScanQr": "Сканировать QR-код", + "deviceSheetActionScanQrSubtitle": "Импортировать узлы, каналы или автоматизации", + "deviceSheetAddress": "Адрес", + "deviceSheetBattery": "Аккумулятор", "deviceSheetBatteryPercent": "{percent}%", - "deviceSheetBatteryRefreshFailed": "Failed", - "deviceSheetBatteryRefreshIdle": "Fetch battery from device", + "deviceSheetBatteryRefreshFailed": "Ошибка", + "deviceSheetBatteryRefreshIdle": "Получить уровень заряда с устройства", "deviceSheetBatteryRefreshResult": "{percent}%{millivolts}", "deviceSheetBluetoothLe": "Bluetooth LE", - "deviceSheetCharging": "Charging", - "deviceSheetConnected": "Connected", - "deviceSheetConnecting": "Connecting...", - "deviceSheetConnectionType": "Connection Type", - "deviceSheetDeviceName": "Device Name", - "deviceSheetDisconnectButton": "Disconnect", - "deviceSheetDisconnectDialogConfirm": "Disconnect", - "deviceSheetDisconnectDialogMessage": "Are you sure you want to disconnect from this device?", - "deviceSheetDisconnectDialogTitle": "Disconnect", - "deviceSheetDisconnected": "Disconnected", - "deviceSheetDisconnecting": "Disconnecting...", - "deviceSheetDisconnectingButton": "Disconnecting...", - "deviceSheetError": "Error", - "deviceSheetFirmware": "Firmware", - "deviceSheetInfoCardConnected": "Connected", - "deviceSheetInfoCardConnecting": "Connecting...", - "deviceSheetInfoCardConnectionError": "Connection Error", - "deviceSheetInfoCardDisconnected": "Disconnected", - "deviceSheetInfoCardDisconnecting": "Disconnecting...", - "deviceSheetNoDevice": "No Device", - "deviceSheetNodeId": "Node ID", - "deviceSheetNodeName": "Node Name", - "deviceSheetProtocol": "Protocol", - "deviceSheetReconnecting": "Reconnecting...", - "deviceSheetRefreshBattery": "Refresh Battery", - "deviceSheetRefreshingBattery": "Refreshing battery...", - "deviceSheetResetNodeDbDialogConfirm": "Reset", - "deviceSheetResetNodeDbDialogMessage": "This will clear all learned nodes from the device and app. The device will need to rediscover nodes on the mesh.\n\nAre you sure you want to continue?", - "deviceSheetResetNodeDbDialogTitle": "Reset Node Database", - "deviceSheetResetNodeDbError": "Failed to reset node database: {error}", - "deviceSheetResetNodeDbSuccess": "Node database reset successfully", - "deviceSheetScanForDevices": "Scan for Devices", - "deviceSheetSectionConnectionDetails": "Connection Details", - "deviceSheetSectionDeveloperTools": "Developer Tools", - "deviceSheetSectionQuickActions": "Quick Actions", - "deviceSheetSignalStrength": "Signal Strength", + "deviceSheetCharging": "Зарядка", + "deviceSheetConnected": "Подключено", + "deviceSheetConnecting": "Подключение...", + "deviceSheetConnectionType": "Тип подключения", + "deviceSheetDeviceName": "Имя устройства", + "deviceSheetDisconnectButton": "Отключить", + "deviceSheetDisconnectDialogConfirm": "Отключить", + "deviceSheetDisconnectDialogMessage": "Вы уверены, что хотите отключиться от этого устройства?", + "deviceSheetDisconnectDialogTitle": "Отключить", + "deviceSheetDisconnected": "Отключено", + "deviceSheetDisconnecting": "Отключение...", + "deviceSheetDisconnectingButton": "Отключение...", + "deviceSheetError": "Ошибка", + "deviceSheetFirmware": "Прошивка", + "deviceSheetInfoCardConnected": "Подключено", + "deviceSheetInfoCardConnecting": "Подключение...", + "deviceSheetInfoCardConnectionError": "Ошибка подключения", + "deviceSheetInfoCardDisconnected": "Отключено", + "deviceSheetInfoCardDisconnecting": "Отключение...", + "deviceSheetNoDevice": "Нет устройства", + "deviceSheetNodeId": "ID узла", + "deviceSheetNodeName": "Имя узла", + "deviceSheetProtocol": "Протокол", + "deviceSheetReconnecting": "Переподключение...", + "deviceSheetRefreshBattery": "Обновить данные аккумулятора", + "deviceSheetRefreshingBattery": "Обновление данных аккумулятора...", + "deviceSheetResetNodeDbDialogConfirm": "Сбросить", + "deviceSheetResetNodeDbDialogMessage": "Это удалит все известные узлы с устройства и из приложения. Устройству потребуется заново обнаружить узлы в сети.\n\nВы уверены, что хотите продолжить?", + "deviceSheetResetNodeDbDialogTitle": "Сбросить базу данных узлов", + "deviceSheetResetNodeDbError": "Не удалось сбросить базу данных узлов: {error}", + "deviceSheetResetNodeDbSuccess": "База данных узлов успешно сброшена", + "deviceSheetScanForDevices": "Сканировать устройства", + "deviceSheetSectionConnectionDetails": "Сведения о подключении", + "deviceSheetSectionDeveloperTools": "Инструменты разработчика", + "deviceSheetSectionQuickActions": "Быстрые действия", + "deviceSheetSignalStrength": "Уровень сигнала", "deviceSheetSignalStrengthValue": "{rssi} dBm", - "deviceSheetStatus": "Status", - "deviceSheetUnknown": "Unknown", + "deviceSheetStatus": "Статус", + "deviceSheetUnknown": "Неизвестно", "deviceSheetUsb": "USB", - "deviceShopBecomeSeller": "Become a Seller", - "deviceShopBecomeSellerBody": "Are you a manufacturer or distributor of Meshtastic-compatible devices? Join our marketplace to reach mesh radio enthusiasts worldwide.", - "deviceShopBrowseByCategory": "Browse by Category", - "deviceShopCategories": "Categories", - "deviceShopClear": "Clear", - "deviceShopConnectToBrowse": "Connect to browse devices", - "deviceShopContactUs": "Contact Us", - "deviceShopErrorLoadingProducts": "Error loading products", - "deviceShopFavoritesTooltip": "Favorites", - "deviceShopFeatured": "Featured", - "deviceShopHelpTooltip": "Help", - "deviceShopMarketplaceDisclaimer": "Purchases are completed on the seller's official store. Socialmesh does not handle payment, shipping, warranty, or returns.", - "deviceShopMarketplaceInfoTitle": "Marketplace Information", - "deviceShopNewArrivals": "New Arrivals", - "deviceShopNoInternet": "No internet connection", - "deviceShopNoResults": "No results for \"{query}\"", - "deviceShopOfficialPartners": "Official Partners", - "deviceShopOnSale": "On Sale", - "deviceShopOutOfStock": "OUT OF STOCK", - "deviceShopPopularDevices": "Popular Devices", - "deviceShopRecentSearches": "Recent Searches", - "deviceShopRetry": "Retry", - "deviceShopSearchHint": "Search devices, modules, antennas...", - "deviceShopSeeAll": "See All", - "deviceShopSellYourDevices": "Sell your Meshtastic devices", + "deviceShopBecomeSeller": "Стать продавцом", + "deviceShopBecomeSellerBody": "Вы являетесь производителем или дистрибьютором устройств, совместимых с Meshtastic? Присоединяйтесь к нашей торговой площадке и охватите энтузиастов по всему миру.", + "deviceShopBrowseByCategory": "Просмотр по категориям", + "deviceShopCategories": "Категории", + "deviceShopClear": "Очистить", + "deviceShopConnectToBrowse": "Подключитесь для просмотра устройств", + "deviceShopContactUs": "Связаться с нами", + "deviceShopErrorLoadingProducts": "Ошибка загрузки товаров", + "deviceShopFavoritesTooltip": "Избранное", + "deviceShopFeatured": "Рекомендуемые", + "deviceShopHelpTooltip": "Помощь", + "deviceShopMarketplaceDisclaimer": "Покупки совершаются в официальном магазине продавца. Socialmesh не несёт ответственности за оплату, доставку, гарантию и возвраты.", + "deviceShopMarketplaceInfoTitle": "Информация о торговой площадке", + "deviceShopNewArrivals": "Новинки", + "deviceShopNoInternet": "Нет подключения к интернету", + "deviceShopNoResults": "Нет результатов для «{query}»", + "deviceShopOfficialPartners": "Официальные партнёры", + "deviceShopOnSale": "Распродажа", + "deviceShopOutOfStock": "НЕТ В НАЛИЧИИ", + "deviceShopPopularDevices": "Популярные устройства", + "deviceShopRecentSearches": "Недавние запросы", + "deviceShopRetry": "Повторить", + "deviceShopSearchHint": "Поиск устройств, модулей, антенн...", + "deviceShopSeeAll": "Смотреть все", + "deviceShopSellYourDevices": "Продавайте ваши устройства Meshtastic", "deviceShopSupportEmail": "support@socialmesh.app", - "deviceShopTitle": "Device Shop", - "deviceShopTrending": "Trending", - "deviceShopTryAgain": "Try again in a moment", - "deviceShopTryDifferentKeywords": "Try different keywords", - "deviceShopUnableToLoad": "Unable to load products", - "deviceShopErrorWithDetails": "Error: {error}", - "deviceShopFailedToUploadImage": "Failed to upload image: {error}", - "deviceShopFailedToUploadLogo": "Failed to upload logo: {error}", - "deviceShopFieldRequired": "Required", - "deviceShopGoBackTooltip": "Go back", - "deviceShopRefreshTooltip": "Refresh", - "deviceShopReviewSubmitFailed": "Failed to submit review: {error}", - "discoveryDiscoveredBadge": "DISCOVERED", - "discoveryNodesFound": "{count} nodes found", - "discoveryScanningNetwork": "Scanning Network", - "discoverySearchingForNodes": "Searching for nodes...", - "discoverySignalExcellent": "Excellent", - "discoverySignalGood": "Good", - "discoverySignalWeak": "Weak", - "discoveryUnknownNode": "Unknown Node", - "drawerAdminDashboard": "Admin Dashboard", - "drawerAdminSectionHeader": "ADMIN", - "drawerBadgeNew": "NEW", + "deviceShopTitle": "Магазин устройств", + "deviceShopTrending": "В тренде", + "deviceShopTryAgain": "Повторите попытку через некоторое время", + "deviceShopTryDifferentKeywords": "Попробуйте другие ключевые слова", + "deviceShopUnableToLoad": "Не удалось загрузить товары", + "deviceShopErrorWithDetails": "Ошибка: {error}", + "deviceShopFailedToUploadImage": "Не удалось загрузить изображение: {error}", + "deviceShopFailedToUploadLogo": "Не удалось загрузить логотип: {error}", + "deviceShopFieldRequired": "Обязательное поле", + "deviceShopGoBackTooltip": "Назад", + "deviceShopRefreshTooltip": "Обновить", + "deviceShopReviewSubmitFailed": "Не удалось отправить отзыв: {error}", + "discoveryDiscoveredBadge": "ОБНАРУЖЕН", + "discoveryNodesFound": "Найдено узлов: {count}", + "discoveryScanningNetwork": "Сканирование сети", + "discoverySearchingForNodes": "Поиск узлов...", + "discoverySignalExcellent": "Отличный", + "discoverySignalGood": "Хороший", + "discoverySignalWeak": "Слабый", + "discoveryUnknownNode": "Неизвестный узел", + "drawerAdminDashboard": "Панель администратора", + "drawerAdminSectionHeader": "АДМИНИСТРАТОР", + "drawerBadgeNew": "НОВОЕ", "drawerBadgePro": "PRO", - "drawerBadgeTryIt": "TRY IT", - "drawerEnterpriseDeviceManagement": "Device Management", - "drawerEnterpriseExportDenied": "Requires Supervisor or Admin role", - "drawerEnterpriseFieldReports": "Field Reports", - "drawerEnterpriseIncidents": "Incidents", - "drawerEnterpriseOrgSettings": "Org Settings", - "drawerEnterpriseReports": "Reports", - "drawerEnterpriseSectionHeader": "ENTERPRISE", - "drawerEnterpriseTasks": "Tasks", - "drawerEnterpriseUserManagement": "User Management", - "drawerNodeNotConnected": "Not Connected", - "drawerNodeOffline": "Offline", - "drawerNodeOnline": "Online", + "drawerBadgeTryIt": "ПОПРОБУЙТЕ", + "drawerEnterpriseDeviceManagement": "Управление устройствами", + "drawerEnterpriseExportDenied": "Требуется роль Supervisor или Admin", + "drawerEnterpriseFieldReports": "Полевые отчёты", + "drawerEnterpriseIncidents": "Инциденты", + "drawerEnterpriseOrgSettings": "Настройки организации", + "drawerEnterpriseReports": "Отчёты", + "drawerEnterpriseSectionHeader": "КОРПОРАТИВНОЕ", + "drawerEnterpriseTasks": "Задачи", + "drawerEnterpriseUserManagement": "Управление пользователями", + "drawerNodeNotConnected": "Не подключён", + "drawerNodeOffline": "Офлайн", + "drawerNodeOnline": "Онлайн", "explorerTitleCartographer": "Картограф", "explorerTitleCartographerDescription": "Картографирует невидимую инфраструктуру", "explorerTitleExplorer": "Исследователь", @@ -1340,1039 +1340,1039 @@ "explorerTitleObserverDescription": "Изучает сеть Mesh", "explorerTitleSignalHunter": "Охотник за сигналами", "explorerTitleSignalHunterDescription": "Ищет сигналы по всему диапазону", - "favoritesCancelCompare": "Cancel compare", - "favoritesCannotCompare": "Cannot compare nodes not in mesh", - "favoritesCharging": "Charging", - "favoritesCompareNodes": "Compare nodes", - "favoritesDelete": "Delete", - "favoritesEmptyDescription": "Tap the star icon on any node to add it to your favorites for quick access.", - "favoritesEmptyTitle": "No Favorites Yet", - "favoritesErrorLoading": "Error loading favorites", - "favoritesNodeNotInMesh": "Node not currently in mesh. Check back later.", - "favoritesNotInMesh": "Not in mesh", - "favoritesRemoveConfirm": "Remove", - "favoritesRemoveMessage": "Remove {name} from your favorites?", - "favoritesRemoveTitle": "Remove Favorite?", - "favoritesRemoveTooltip": "Remove from favorites", - "favoritesRetry": "Retry", - "favoritesSelectFirst": "Select first node", - "favoritesSelectSecond": "Select second node", - "favoritesTitle": "Favorite Nodes", - "featuredProductsDiscard": "Discard", - "featuredProductsEmpty": "No featured products", - "featuredProductsEmptySubtitle": "Mark products as featured to manage their order here", - "featuredProductsOrderUpdated": "Featured order updated", - "featuredProductsRemove": "Remove", - "featuredProductsRemoveMessage": "Remove \"{name}\" from featured products?", - "featuredProductsRemoveTitle": "Remove from Featured", - "featuredProductsRemoveTooltip": "Remove from featured", - "featuredProductsRemoved": "Removed from featured", - "featuredProductsReorderInfo": "Drag and drop products to reorder. Products at the top will appear first in the featured section.", - "featuredProductsSave": "Save", - "featuredProductsTitle": "Featured Products", - "featuredProductsUnsavedChanges": "You have unsaved changes", - "feedbackBugReportsTitle": "My Bug Reports", - "feedbackConversation": "Conversation", - "feedbackFailedToLoad": "Failed to load reports", - "feedbackFilterAll": "All", - "feedbackFilterAwaiting": "Awaiting", - "feedbackFilterOpen": "Open", - "feedbackFilterResolved": "Resolved", - "feedbackFilterResponded": "Responded", - "feedbackFormHint": "Tell us about the issue you encountered", - "feedbackFormTitle": "Report bug", - "feedbackFormValidationError": "Please describe the issue.", - "feedbackFormWhatHappened": "What happened?", - "feedbackIncludeScreenshot": "Include screenshot in report", - "feedbackNoBugReports": "No bug reports yet", - "feedbackNoBugReportsDesc": "Shake your device to report a bug.\nYour reports and any responses will appear here.", - "feedbackNoMatchFilter": "No reports match this filter", - "feedbackNoMatchSearch": "No reports match your search", - "feedbackReplyFailed": "Failed to send reply: {error}", - "feedbackReplyHint": "Write a reply...", - "feedbackReplySent": "Reply sent", - "feedbackReportBugAction": "Report bug", - "feedbackReportBugDescription": "If something isn't working correctly, you can report it to help improve Socialmesh for everyone.", - "feedbackReportBugTitle": "Report a bug?", - "feedbackReportResolved": "This report has been resolved", + "favoritesCancelCompare": "Отменить сравнение", + "favoritesCannotCompare": "Невозможно сравнить узлы вне сети", + "favoritesCharging": "Зарядка", + "favoritesCompareNodes": "Сравнить узлы", + "favoritesDelete": "Удалить", + "favoritesEmptyDescription": "Нажмите значок звезды на любом узле, чтобы добавить его в избранное для быстрого доступа.", + "favoritesEmptyTitle": "Избранного пока нет", + "favoritesErrorLoading": "Ошибка загрузки избранного", + "favoritesNodeNotInMesh": "Узел в данный момент не в сети. Проверьте позже.", + "favoritesNotInMesh": "Не в сети", + "favoritesRemoveConfirm": "Удалить", + "favoritesRemoveMessage": "Удалить {name} из избранного?", + "favoritesRemoveTitle": "Удалить из избранного?", + "favoritesRemoveTooltip": "Удалить из избранного", + "favoritesRetry": "Повторить", + "favoritesSelectFirst": "Выберите первый узел", + "favoritesSelectSecond": "Выберите второй узел", + "favoritesTitle": "Избранные узлы", + "featuredProductsDiscard": "Отменить", + "featuredProductsEmpty": "Нет рекомендуемых товаров", + "featuredProductsEmptySubtitle": "Отметьте товары как рекомендуемые, чтобы управлять их порядком здесь", + "featuredProductsOrderUpdated": "Порядок рекомендуемых обновлён", + "featuredProductsRemove": "Удалить", + "featuredProductsRemoveMessage": "Удалить «{name}» из рекомендуемых товаров?", + "featuredProductsRemoveTitle": "Убрать из рекомендуемых", + "featuredProductsRemoveTooltip": "Убрать из рекомендуемых", + "featuredProductsRemoved": "Убрано из рекомендуемых", + "featuredProductsReorderInfo": "Перетащите товары для изменения порядка. Товары вверху появятся первыми в разделе рекомендуемых.", + "featuredProductsSave": "Сохранить", + "featuredProductsTitle": "Рекомендуемые товары", + "featuredProductsUnsavedChanges": "Есть несохранённые изменения", + "feedbackBugReportsTitle": "Мои сообщения об ошибках", + "feedbackConversation": "Диалог", + "feedbackFailedToLoad": "Не удалось загрузить отчёты", + "feedbackFilterAll": "Все", + "feedbackFilterAwaiting": "Ожидающие", + "feedbackFilterOpen": "Открытые", + "feedbackFilterResolved": "Решённые", + "feedbackFilterResponded": "С ответом", + "feedbackFormHint": "Опишите проблему, с которой вы столкнулись", + "feedbackFormTitle": "Сообщить об ошибке", + "feedbackFormValidationError": "Пожалуйста, опишите проблему.", + "feedbackFormWhatHappened": "Что произошло?", + "feedbackIncludeScreenshot": "Включить снимок экрана в отчёт", + "feedbackNoBugReports": "Сообщений об ошибках пока нет", + "feedbackNoBugReportsDesc": "Встряхните устройство, чтобы сообщить об ошибке.\nВаши отчёты и ответы на них появятся здесь.", + "feedbackNoMatchFilter": "Отчёты не соответствуют фильтру", + "feedbackNoMatchSearch": "Отчёты не соответствуют запросу", + "feedbackReplyFailed": "Не удалось отправить ответ: {error}", + "feedbackReplyHint": "Написать ответ...", + "feedbackReplySent": "Ответ отправлен", + "feedbackReportBugAction": "Сообщить об ошибке", + "feedbackReportBugDescription": "Если что-то работает неправильно, вы можете сообщить об этом, чтобы помочь улучшить Socialmesh для всех.", + "feedbackReportBugTitle": "Сообщить об ошибке?", + "feedbackReportResolved": "Этот отчёт решён", "feedbackResponseAuthorSocialmesh": "Socialmesh", - "feedbackResponseAuthorYou": "You", - "feedbackRetry": "Retry", - "feedbackScreenshotSubtitle": "Helps us debug faster", - "feedbackSearchReports": "Search reports", - "feedbackSendButton": "Send", - "feedbackSendingReport": "Sending bug report...", - "feedbackShakeToReport": "Shake device to report a bug", - "feedbackToggleOff": "Toggle off to disable", - "feedbackWaitingForAdmin": "Waiting for admin response", - "feedbackYourReport": "Your report", - "fileTransferAccepted": "Accepted: {filename}", - "fileTransferActionAccept": "Accept", - "fileTransferActionCancel": "Cancel", - "fileTransferActionDelete": "Delete", - "fileTransferActionInfo": "Info", - "fileTransferActionReject": "Reject", - "fileTransferActionRetry": "Retry", - "fileTransferActionShare": "Share", - "fileTransferAttachmentMeta": "{size} · {chunkCount} chunks over mesh", - "fileTransferBinaryFileHint": "Binary file — save to open with an external app", - "fileTransferCancelConfirm": "Cancel Transfer", - "fileTransferCancelMessage": "Cancel the transfer of \"{filename}\"? ", - "fileTransferCancelTitle": "Cancel Transfer?", - "fileTransferCancelled": "Transfer cancelled", - "fileTransferClearCompleted": "Clear Completed", - "fileTransferClearConfirm": "Clear", - "fileTransferClearMessage": "Remove all completed, failed, and cancelled transfers? This cannot be undone.", - "fileTransferClearTitle": "Clear Completed Transfers?", - "fileTransferClearedCount": "Cleared {count} transfers", - "fileTransferContactsClearSearch": "Clear search", - "fileTransferContactsDaysAgo": "{count}d ago", - "fileTransferContactsDetailReceived": "Received", - "fileTransferContactsDetailSent": "Sent", - "fileTransferContactsDetailTotal": "Total", - "fileTransferContactsDiscoveredHint": "Discovered nodes will appear here", - "fileTransferContactsFilterActive": "Active", - "fileTransferContactsFilterAll": "All", - "fileTransferContactsFilterFavorites": "Favorites", - "fileTransferContactsFilterHasFiles": "Has Files", - "fileTransferContactsHoursAgo": "{count}h ago", - "fileTransferContactsJustNow": "just now", - "fileTransferContactsMinutesAgo": "{count}m ago", - "fileTransferContactsNoMatchFilter": "No {filter} contacts", - "fileTransferContactsNoMatchSearch": "No contacts match \"{query}\"", - "fileTransferContactsNoNodes": "No nodes on the mesh yet", - "fileTransferContactsSearchHint": "Search contacts", - "fileTransferContactsSectionActive": "Active", - "fileTransferContactsSectionFavorites": "Favorites", - "fileTransferContactsSectionInactive": "Inactive", - "fileTransferContactsSectionWithFiles": "With Files", - "fileTransferContactsSendFile": "Send File", - "fileTransferContactsStarted": "Transfer started: {filename}", - "fileTransferContainerClearCompleted": "Clear Completed", - "fileTransferContainerClearMessage": "Remove all completed, failed, and cancelled transfers? This cannot be undone.", - "fileTransferContainerClearTitle": "Clear Completed Transfers?", - "fileTransferContainerCleared": "Cleared {count} transfers", - "fileTransferContainerPurgeExpired": "Purge Expired", - "fileTransferContainerPurged": "Expired transfers purged", - "fileTransferContainerSendFile": "Send File", - "fileTransferContainerSendToNode": "Send to Node", - "fileTransferContainerStarted": "Transfer started: {filename}", - "fileTransferContainerTitle": "File Transfers", - "fileTransferCopiedToClipboard": "Copied to clipboard", - "fileTransferCopyAction": "Copy", - "fileTransferCouldNotReadFile": "Could not read file: {error}", - "fileTransferCouldNotRead": "Could not read file.", - "fileTransferCouldNotSaveForSharing": "Could not save file for sharing", - "fileTransferCouldNotStart": "Could not start transfer. Check that a node is connected and try again.", - "fileTransferDeleteConfirm": "Delete", - "fileTransferDeleteMessage": "Delete \"{filename}\"? This cannot be undone.", - "fileTransferDeleteTitle": "Delete Transfer?", - "fileTransferDeleted": "Deleted: {filename}", - "fileTransferDetailsSection": "Transfer Details", - "fileTransferDirectionReceived": "Received", - "fileTransferDirectionSent": "Sent", - "fileTransferEmptyDescriptionContacts": "Go to Contacts, tap a node, and\nchoose Send File to get started", - "fileTransferEmptyDescriptionOverflow": "Send files to other nodes from the\noverflow menu or via NodeDex", - "fileTransferEmptyFilterTitle": "No {filter} Transfers", - "fileTransferEmptyTitle": "No File Transfers", - "fileTransferExpiredPurged": "Expired transfers purged", - "fileTransferFileEmpty": "The selected file is empty.", - "fileTransferFileTooLarge": "{filename} is {fileSize} KB — mesh transfer limit is {limit} KB.", - "fileTransferFilterActive": "Active", - "fileTransferFilterAll": "All", - "fileTransferFilterDone": "Done", - "fileTransferFilterReceived": "Received", - "fileTransferFilterSent": "Sent", - "fileTransferGoToContacts": "Go to Contacts", - "fileTransferImageDecodeError": "Could not decode image", - "fileTransferInfoChunkSize": "Chunk Size", - "fileTransferInfoChunks": "Chunks", - "fileTransferInfoCompleted": "Completed", - "fileTransferInfoCreated": "Created", - "fileTransferInfoDirection": "Direction", - "fileTransferInfoDirectionReceived": "Received", - "fileTransferInfoDirectionSent": "Sent", - "fileTransferInfoExpires": "Expires", - "fileTransferInfoFailure": "Failure", - "fileTransferInfoMimeType": "MIME Type", - "fileTransferInfoNackRounds": "NACK Rounds", - "fileTransferInfoSize": "Size", - "fileTransferInfoSourceNode": "Source Node", - "fileTransferInfoStatus": "Status", - "fileTransferInfoTargetNode": "Target Node", - "fileTransferInfoTransferId": "Transfer ID", - "fileTransferMoreBytes": "... {count} more bytes", - "fileTransferNoMatchFilter": "No transfers match this filter", - "fileTransferPinchToZoom": "Pinch to zoom", - "fileTransferPurgeExpired": "Purge Expired", - "fileTransferRejectConfirm": "Reject", - "fileTransferRejectMessage": "Reject the incoming file \"{filename}\"? The sender will be notified.", - "fileTransferRejectTitle": "Reject Transfer?", - "fileTransferRejected": "Transfer rejected", - "fileTransferSearchHint": "Search transfers", - "fileTransferSendAFile": "Send a File", - "fileTransferSendFile": "Send File", - "fileTransferSendToNode": "Send to Node", - "fileTransferStarted": "Transfer started: {filename}", - "fileTransferTabContacts": "Contacts", - "fileTransferTabFiles": "Files", - "fileTransferTitle": "File Transfers", - "fileTransferLineCount": "{count} lines", - "firmwareUpdateAvailable": "Update Available", - "firmwareUpdateBackupWarningSubtitle": "Firmware updates may reset your device configuration. Consider exporting your settings before updating.", - "firmwareUpdateBackupWarningTitle": "Backup Your Settings", + "feedbackResponseAuthorYou": "Вы", + "feedbackRetry": "Повторить", + "feedbackScreenshotSubtitle": "Помогает нам быстрее диагностировать проблему", + "feedbackSearchReports": "Поиск отчётов", + "feedbackSendButton": "Отправить", + "feedbackSendingReport": "Отправка отчёта об ошибке...", + "feedbackShakeToReport": "Встряхните устройство, чтобы сообщить об ошибке", + "feedbackToggleOff": "Отключите, чтобы деактивировать", + "feedbackWaitingForAdmin": "Ожидание ответа администратора", + "feedbackYourReport": "Ваш отчёт", + "fileTransferAccepted": "Принято: {filename}", + "fileTransferActionAccept": "Принять", + "fileTransferActionCancel": "Отмена", + "fileTransferActionDelete": "Удалить", + "fileTransferActionInfo": "Информация", + "fileTransferActionReject": "Отклонить", + "fileTransferActionRetry": "Повторить", + "fileTransferActionShare": "Поделиться", + "fileTransferAttachmentMeta": "{size} · {chunkCount} фрагментов по сети", + "fileTransferBinaryFileHint": "Бинарный файл — сохраните, чтобы открыть во внешнем приложении", + "fileTransferCancelConfirm": "Отменить передачу", + "fileTransferCancelMessage": "Отменить передачу файла \"{filename}\"? ", + "fileTransferCancelTitle": "Отменить передачу?", + "fileTransferCancelled": "Передача отменена", + "fileTransferClearCompleted": "Очистить завершённые", + "fileTransferClearConfirm": "Очистить", + "fileTransferClearMessage": "Удалить все завершённые, неудавшиеся и отменённые передачи? Отменить невозможно.", + "fileTransferClearTitle": "Очистить завершённые передачи?", + "fileTransferClearedCount": "Очищено {count} передач", + "fileTransferContactsClearSearch": "Очистить поиск", + "fileTransferContactsDaysAgo": "{count}д назад", + "fileTransferContactsDetailReceived": "Получено", + "fileTransferContactsDetailSent": "Отправлено", + "fileTransferContactsDetailTotal": "Итого", + "fileTransferContactsDiscoveredHint": "Обнаруженные узлы появятся здесь", + "fileTransferContactsFilterActive": "Активные", + "fileTransferContactsFilterAll": "Все", + "fileTransferContactsFilterFavorites": "Избранное", + "fileTransferContactsFilterHasFiles": "С файлами", + "fileTransferContactsHoursAgo": "{count}ч назад", + "fileTransferContactsJustNow": "только что", + "fileTransferContactsMinutesAgo": "{count}мин назад", + "fileTransferContactsNoMatchFilter": "Нет контактов «{filter}»", + "fileTransferContactsNoMatchSearch": "Нет контактов, соответствующих \"{query}\"", + "fileTransferContactsNoNodes": "Узлов в сети ещё нет", + "fileTransferContactsSearchHint": "Поиск контактов", + "fileTransferContactsSectionActive": "Активные", + "fileTransferContactsSectionFavorites": "Избранное", + "fileTransferContactsSectionInactive": "Неактивные", + "fileTransferContactsSectionWithFiles": "С файлами", + "fileTransferContactsSendFile": "Отправить файл", + "fileTransferContactsStarted": "Передача начата: {filename}", + "fileTransferContainerClearCompleted": "Очистить завершённые", + "fileTransferContainerClearMessage": "Удалить все завершённые, неудавшиеся и отменённые передачи? Отменить невозможно.", + "fileTransferContainerClearTitle": "Очистить завершённые передачи?", + "fileTransferContainerCleared": "Очищено {count} передач", + "fileTransferContainerPurgeExpired": "Удалить просроченные", + "fileTransferContainerPurged": "Просроченные передачи удалены", + "fileTransferContainerSendFile": "Отправить файл", + "fileTransferContainerSendToNode": "Отправить на узел", + "fileTransferContainerStarted": "Передача начата: {filename}", + "fileTransferContainerTitle": "Передача файлов", + "fileTransferCopiedToClipboard": "Скопировано в буфер обмена", + "fileTransferCopyAction": "Копировать", + "fileTransferCouldNotReadFile": "Не удалось прочитать файл: {error}", + "fileTransferCouldNotRead": "Не удалось прочитать файл.", + "fileTransferCouldNotSaveForSharing": "Не удалось сохранить файл для отправки", + "fileTransferCouldNotStart": "Не удалось начать передачу. Убедитесь, что узел подключён, и повторите попытку.", + "fileTransferDeleteConfirm": "Удалить", + "fileTransferDeleteMessage": "Удалить \"{filename}\"? Отменить невозможно.", + "fileTransferDeleteTitle": "Удалить передачу?", + "fileTransferDeleted": "Удалено: {filename}", + "fileTransferDetailsSection": "Детали передачи", + "fileTransferDirectionReceived": "Получено", + "fileTransferDirectionSent": "Отправлено", + "fileTransferEmptyDescriptionContacts": "Перейдите в «Контакты», нажмите на узел\nи выберите «Отправить файл»", + "fileTransferEmptyDescriptionOverflow": "Отправляйте файлы другим узлам через\nменю или NodeDex", + "fileTransferEmptyFilterTitle": "Нет передач «{filter}»", + "fileTransferEmptyTitle": "Нет передач файлов", + "fileTransferExpiredPurged": "Просроченные передачи удалены", + "fileTransferFileEmpty": "Выбранный файл пуст.", + "fileTransferFileTooLarge": "{filename} — {fileSize} КБ, а лимит передачи по сети составляет {limit} КБ.", + "fileTransferFilterActive": "Активные", + "fileTransferFilterAll": "Все", + "fileTransferFilterDone": "Завершённые", + "fileTransferFilterReceived": "Полученные", + "fileTransferFilterSent": "Отправленные", + "fileTransferGoToContacts": "Перейти в контакты", + "fileTransferImageDecodeError": "Не удалось декодировать изображение", + "fileTransferInfoChunkSize": "Размер фрагмента", + "fileTransferInfoChunks": "Фрагменты", + "fileTransferInfoCompleted": "Завершено", + "fileTransferInfoCreated": "Создано", + "fileTransferInfoDirection": "Направление", + "fileTransferInfoDirectionReceived": "Получено", + "fileTransferInfoDirectionSent": "Отправлено", + "fileTransferInfoExpires": "Истекает", + "fileTransferInfoFailure": "Сбой", + "fileTransferInfoMimeType": "MIME-тип", + "fileTransferInfoNackRounds": "Циклы NACK", + "fileTransferInfoSize": "Размер", + "fileTransferInfoSourceNode": "Узел-источник", + "fileTransferInfoStatus": "Статус", + "fileTransferInfoTargetNode": "Узел-получатель", + "fileTransferInfoTransferId": "ID передачи", + "fileTransferMoreBytes": "... ещё {count} байт", + "fileTransferNoMatchFilter": "Нет передач, соответствующих фильтру", + "fileTransferPinchToZoom": "Сведите пальцы для масштабирования", + "fileTransferPurgeExpired": "Удалить просроченные", + "fileTransferRejectConfirm": "Отклонить", + "fileTransferRejectMessage": "Отклонить входящий файл \"{filename}\"? Отправитель будет уведомлён.", + "fileTransferRejectTitle": "Отклонить передачу?", + "fileTransferRejected": "Передача отклонена", + "fileTransferSearchHint": "Поиск передач", + "fileTransferSendAFile": "Отправить файл", + "fileTransferSendFile": "Отправить файл", + "fileTransferSendToNode": "Отправить на узел", + "fileTransferStarted": "Передача начата: {filename}", + "fileTransferTabContacts": "Контакты", + "fileTransferTabFiles": "Файлы", + "fileTransferTitle": "Передача файлов", + "fileTransferLineCount": "{count} строк", + "firmwareUpdateAvailable": "Доступно обновление", + "firmwareUpdateBackupWarningSubtitle": "Обновления прошивки могут сбросить настройки устройства. Рекомендуется экспортировать настройки перед обновлением.", + "firmwareUpdateBackupWarningTitle": "Создайте резервную копию настроек", "firmwareUpdateBluetooth": "Bluetooth", - "firmwareUpdateCheckFailed": "Failed to check for updates", - "firmwareUpdateChecking": "Checking for updates...", - "firmwareUpdateDownload": "Download Update", - "firmwareUpdateHardware": "Hardware", - "firmwareUpdateInstalledFirmware": "Installed Firmware", - "firmwareUpdateLatestVersion": "Latest: {version}", - "firmwareUpdateNewBadge": "NEW", - "firmwareUpdateNodeId": "Node ID", - "firmwareUpdateOpenWebFlasher": "Open Web Flasher", - "firmwareUpdateReleaseNotes": "Release Notes", - "firmwareUpdateSectionAvailableUpdate": "Available Update", - "firmwareUpdateSectionCurrentVersion": "Current Version", - "firmwareUpdateSectionHowToUpdate": "How to Update", - "firmwareUpdateStep1": "Download the firmware file for your device", - "firmwareUpdateStep2": "Connect your device via USB", - "firmwareUpdateStep3": "Use the Meshtastic Web Flasher or CLI to flash", - "firmwareUpdateStep4": "Wait for device to reboot and reconnect", - "firmwareUpdateSupported": "Supported", - "firmwareUpdateTitle": "Firmware Update", - "firmwareUpdateUnableToCheck": "Unable to check for updates", - "firmwareUpdateUnknown": "Unknown", - "firmwareUpdateUpToDate": "Up to Date", - "firmwareUpdateUptime": "Uptime", - "firmwareUpdateVisitWebsite": "Visit the Meshtastic website for the latest firmware.", + "firmwareUpdateCheckFailed": "Не удалось проверить наличие обновлений", + "firmwareUpdateChecking": "Проверка обновлений...", + "firmwareUpdateDownload": "Скачать обновление", + "firmwareUpdateHardware": "Аппаратное обеспечение", + "firmwareUpdateInstalledFirmware": "Установленная прошивка", + "firmwareUpdateLatestVersion": "Последняя: {version}", + "firmwareUpdateNewBadge": "НОВОЕ", + "firmwareUpdateNodeId": "ID узла", + "firmwareUpdateOpenWebFlasher": "Открыть веб-прошивальщик", + "firmwareUpdateReleaseNotes": "Примечания к выпуску", + "firmwareUpdateSectionAvailableUpdate": "Доступное обновление", + "firmwareUpdateSectionCurrentVersion": "Текущая версия", + "firmwareUpdateSectionHowToUpdate": "Как обновить", + "firmwareUpdateStep1": "Скачайте файл прошивки для вашего устройства", + "firmwareUpdateStep2": "Подключите устройство через USB", + "firmwareUpdateStep3": "Используйте Meshtastic Web Flasher или CLI для прошивки", + "firmwareUpdateStep4": "Дождитесь перезагрузки устройства и повторного подключения", + "firmwareUpdateSupported": "Поддерживается", + "firmwareUpdateTitle": "Обновление прошивки", + "firmwareUpdateUnableToCheck": "Не удалось проверить обновления", + "firmwareUpdateUnknown": "Неизвестно", + "firmwareUpdateUpToDate": "Актуальная версия", + "firmwareUpdateUptime": "Время работы", + "firmwareUpdateVisitWebsite": "Посетите сайт Meshtastic для получения последней прошивки.", "firmwareUpdateWifi": "WiFi", - "globeEmptyDescription": "Nodes with position data will appear here", - "globeEmptyTitle": "No nodes with GPS", - "globeHelp": "Help", - "globeHideConnections": "Hide connections", - "globeNodeCount": "{count} nodes", - "globeResetView": "Reset view", - "globeScreenTitle": "Mesh Globe", - "globeSelectNode": "Select Node", - "globeShowConnections": "Show connections", - "gpsStatusAccuracy": "Accuracy", - "gpsStatusAccuracyValue": "±{meters}m", - "gpsStatusAcquiring": "Acquiring GPS...", - "gpsStatusActiveBadge": "ACTIVE", - "gpsStatusAltitude": "Altitude", - "gpsStatusAltitudeValue": "{meters}m", - "gpsStatusCardinalE": "E", - "gpsStatusCardinalN": "N", - "gpsStatusCardinalNE": "NE", - "gpsStatusCardinalNW": "NW", - "gpsStatusCardinalS": "S", - "gpsStatusCardinalSE": "SE", - "gpsStatusCardinalSW": "SW", - "gpsStatusCardinalW": "W", + "globeEmptyDescription": "Здесь появятся узлы с данными о местоположении", + "globeEmptyTitle": "Нет узлов с GPS", + "globeHelp": "Справка", + "globeHideConnections": "Скрыть подключения", + "globeNodeCount": "{count} узлов", + "globeResetView": "Сбросить вид", + "globeScreenTitle": "Глобус сети", + "globeSelectNode": "Выбрать узел", + "globeShowConnections": "Показать подключения", + "gpsStatusAccuracy": "Точность", + "gpsStatusAccuracyValue": "±{meters} м", + "gpsStatusAcquiring": "Получение GPS...", + "gpsStatusActiveBadge": "АКТИВЕН", + "gpsStatusAltitude": "Высота", + "gpsStatusAltitudeValue": "{meters} м", + "gpsStatusCardinalE": "В", + "gpsStatusCardinalN": "С", + "gpsStatusCardinalNE": "СВ", + "gpsStatusCardinalNW": "СЗ", + "gpsStatusCardinalS": "Ю", + "gpsStatusCardinalSE": "ЮВ", + "gpsStatusCardinalSW": "ЮЗ", + "gpsStatusCardinalW": "З", "gpsStatusDateAt": "{date} {time}", - "gpsStatusDaysAgo": "{count} days ago", - "gpsStatusFixAcquired": "GPS Fix Acquired", - "gpsStatusGroundSpeed": "Ground Speed", - "gpsStatusGroundSpeedValue": "{mps} m/s ({kmh} km/h)", - "gpsStatusGroundTrack": "Ground Track", + "gpsStatusDaysAgo": "{count} дн. назад", + "gpsStatusFixAcquired": "GPS-фиксация получена", + "gpsStatusGroundSpeed": "Путевая скорость", + "gpsStatusGroundSpeedValue": "{mps} м/с ({kmh} км/ч)", + "gpsStatusGroundTrack": "Курс над землёй", "gpsStatusGroundTrackValue": "{degrees}° {direction}", - "gpsStatusHoursAgo": "{count} hours ago", - "gpsStatusLatitude": "Latitude", + "gpsStatusHoursAgo": "{count} ч. назад", + "gpsStatusLatitude": "Широта", "gpsStatusLatitudeValue": "{value}°", - "gpsStatusLongitude": "Longitude", + "gpsStatusLongitude": "Долгота", "gpsStatusLongitudeValue": "{value}°", - "gpsStatusMinutesAgo": "{count} minutes ago", - "gpsStatusNoGpsFix": "No GPS Fix", - "gpsStatusNoGpsFixMessage": "The device has not acquired a GPS position yet. Make sure the device has a clear view of the sky.", - "gpsStatusOpenInMaps": "Open in Maps", - "gpsStatusPrecisionBits": "Precision Bits", - "gpsStatusSatFair": "Fair", - "gpsStatusSatGood": "Good", - "gpsStatusSatNoFix": "No Fix", - "gpsStatusSatPoor": "Poor", - "gpsStatusSatellitesCount": "{count} satellites in view", - "gpsStatusSatellitesInView": "Satellites in View", - "gpsStatusSearchingSatellites": "Searching for satellites...", - "gpsStatusSecondsAgo": "{count} seconds ago", - "gpsStatusSectionLastUpdate": "Last Update", - "gpsStatusSectionMotion": "Motion", - "gpsStatusSectionPosition": "Position", - "gpsStatusSectionSatellites": "Satellites", - "gpsStatusTitle": "GPS Status", - "gpsStatusTodayAt": "Today at {time}", - "gpsStatusUnknown": "Unknown", - "helpArticleLoadFailed": "Failed to load article", - "helpArticleMinRead": "{minutes} min read", - "helpCenterArticleRead": "Read", - "helpCenterArticleUnread": "Unread", - "helpCenterArticlesRead": "articles read", - "helpCenterComeBackToRefresh": "Come back anytime to refresh your knowledge.", - "helpCenterCompleted": "Completed", - "helpCenterContentBeingPrepared": "Help content is being prepared. Check back soon.", - "helpCenterFilterAll": "All", - "helpCenterFindThisIn": "Find this in: {screenName}", - "helpCenterHapticFeedbackSubtitle": "Vibrate during typewriter text effect", - "helpCenterHapticFeedbackTitle": "Haptic Feedback", - "helpCenterHelpPreferences": "HELP PREFERENCES", - "helpCenterInteractiveTours": "Interactive Tours", - "helpCenterLearnHowItWorks": "Learn how Meshtastic works", - "helpCenterLoadFailed": "Failed to load help content", - "helpCenterMarkAsComplete": "Mark as Complete", - "helpCenterNoArticlesAvailable": "No articles available", - "helpCenterNoArticlesInCategory": "No articles in this category", - "helpCenterNoArticlesMatchSearch": "No articles match your search.\nTry different keywords.", - "helpCenterReadEverything": "You’ve read everything!", - "helpCenterResetAllProgress": "Reset All Progress", - "helpCenterResetProgressLabel": "Reset", - "helpCenterResetProgressMessage": "This will mark all articles as unread and reset interactive tour progress. You can start fresh.", - "helpCenterResetProgressTitle": "Reset Help Progress?", + "gpsStatusMinutesAgo": "{count} мин. назад", + "gpsStatusNoGpsFix": "GPS-фиксация отсутствует", + "gpsStatusNoGpsFixMessage": "Устройство ещё не получило GPS-координаты. Убедитесь, что у устройства открытый вид на небо.", + "gpsStatusOpenInMaps": "Открыть в картах", + "gpsStatusPrecisionBits": "Биты точности", + "gpsStatusSatFair": "Удовлетворительно", + "gpsStatusSatGood": "Хорошо", + "gpsStatusSatNoFix": "Нет фиксации", + "gpsStatusSatPoor": "Слабо", + "gpsStatusSatellitesCount": "{count} спутников в зоне видимости", + "gpsStatusSatellitesInView": "Спутники в зоне видимости", + "gpsStatusSearchingSatellites": "Поиск спутников...", + "gpsStatusSecondsAgo": "{count} с. назад", + "gpsStatusSectionLastUpdate": "Последнее обновление", + "gpsStatusSectionMotion": "Движение", + "gpsStatusSectionPosition": "Положение", + "gpsStatusSectionSatellites": "Спутники", + "gpsStatusTitle": "Статус GPS", + "gpsStatusTodayAt": "Сегодня в {time}", + "gpsStatusUnknown": "Неизвестно", + "helpArticleLoadFailed": "Не удалось загрузить статью", + "helpArticleMinRead": "{minutes} мин чтения", + "helpCenterArticleRead": "Прочитано", + "helpCenterArticleUnread": "Не прочитано", + "helpCenterArticlesRead": "статей прочитано", + "helpCenterComeBackToRefresh": "Возвращайтесь в любое время, чтобы освежить знания.", + "helpCenterCompleted": "Завершено", + "helpCenterContentBeingPrepared": "Справочные материалы готовятся. Заходите позже.", + "helpCenterFilterAll": "Все", + "helpCenterFindThisIn": "Найти здесь: {screenName}", + "helpCenterHapticFeedbackSubtitle": "Вибрация при эффекте печатающего текста", + "helpCenterHapticFeedbackTitle": "Тактильная обратная связь", + "helpCenterHelpPreferences": "НАСТРОЙКИ СПРАВКИ", + "helpCenterInteractiveTours": "Интерактивные туры", + "helpCenterLearnHowItWorks": "Узнайте, как работает Meshtastic", + "helpCenterLoadFailed": "Не удалось загрузить справочное содержимое", + "helpCenterMarkAsComplete": "Отметить как завершённое", + "helpCenterNoArticlesAvailable": "Статьи недоступны", + "helpCenterNoArticlesInCategory": "В этой категории нет статей", + "helpCenterNoArticlesMatchSearch": "По вашему запросу статьи не найдены.\nПопробуйте другие ключевые слова.", + "helpCenterReadEverything": "Вы прочитали всё!", + "helpCenterResetAllProgress": "Сбросить весь прогресс", + "helpCenterResetProgressLabel": "Сбросить", + "helpCenterResetProgressMessage": "Все статьи будут отмечены как непрочитанные, а прогресс интерактивных туров будет сброшен. Вы можете начать заново.", + "helpCenterResetProgressTitle": "Сбросить прогресс в справке?", "helpCenterScreenAether": "Aether", - "helpCenterScreenAutomations": "Automations", - "helpCenterScreenChannels": "Channels", - "helpCenterScreenCreateSignal": "Create Signal", - "helpCenterScreenDeviceShop": "Device Shop", - "helpCenterScreenGlobe": "Globe", - "helpCenterScreenMap": "Map", + "helpCenterScreenAutomations": "Автоматизации", + "helpCenterScreenChannels": "Каналы", + "helpCenterScreenCreateSignal": "Создать Сигнал", + "helpCenterScreenDeviceShop": "Магазин устройств", + "helpCenterScreenGlobe": "Глобус", + "helpCenterScreenMap": "Карта", "helpCenterScreenMesh3d": "Mesh 3D", - "helpCenterScreenMeshHealth": "Mesh Health", - "helpCenterScreenMessages": "Messages", + "helpCenterScreenMeshHealth": "Здоровье сети", + "helpCenterScreenMessages": "Сообщения", "helpCenterScreenNodeDex": "NodeDex", - "helpCenterScreenNodes": "Nodes", - "helpCenterScreenPresence": "Presence", - "helpCenterScreenProfile": "Profile", - "helpCenterScreenRadioConfig": "Radio Config", - "helpCenterScreenReachability": "Reachability", - "helpCenterScreenRegionSelection": "Region Selection", - "helpCenterScreenRoutes": "Routes", - "helpCenterScreenScanner": "Scanner", - "helpCenterScreenSettings": "Settings", - "helpCenterScreenSignalFeed": "Signal Feed", - "helpCenterScreenTakGateway": "TAK Gateway", - "helpCenterScreenTimeline": "Timeline", - "helpCenterScreenTraceRouteLog": "Trace Route Log", - "helpCenterScreenWidgetBuilder": "Widget Builder", - "helpCenterScreenWidgetDashboard": "Widget Dashboard", - "helpCenterScreenWidgetMarketplace": "Widget Marketplace", - "helpCenterScreenWorldMesh": "World Mesh", - "helpCenterSearchByTitle": "Search by article title\nor description.", - "helpCenterSearchHint": "Search articles", - "helpCenterShowHelpHintsSubtitle": "Display pulsing help buttons on screens", - "helpCenterShowHelpHintsTitle": "Show Help Hints", - "helpCenterTapToLearn": "Tap an article to learn about mesh networking, radio settings, and more.", - "helpCenterTitle": "Help Center", - "helpCenterToursCompletedCount": "{completed} / {total} completed", - "helpCenterToursDescription": "Step-by-step walkthroughs for app features. These tours guide you through each screen with Ico.", - "helpCenterTryDifferentCategory": "Try selecting a different category from the filter chips above.", - "incidentActionAssign": "Assign", - "incidentActionCancel": "Cancel", - "incidentActionClose": "Close", - "incidentActionDeniedTooltip": "Requires {roleHint}", - "incidentActionEscalate": "Escalate", - "incidentActionFailedSnackbar": "Action failed", - "incidentActionResolve": "Resolve", - "incidentActionSubmit": "Submit", - "incidentActionSuccessSnackbar": "Incident {action}d", - "incidentAssignCancelButton": "Cancel", - "incidentAssignConfirmButton": "Assign", - "incidentAssignSheetTitle": "Assign Incident", - "incidentAssignedLabel": "Assigned: {assigneeId}", - "incidentAssigneeHint": "Enter user ID", - "incidentAssigneeLabel": "Assignee User ID", - "incidentClassificationComms": "Comms", - "incidentClassificationEnvironmental": "Environmental", - "incidentClassificationLogistics": "Logistics", - "incidentClassificationMedical": "Medical", - "incidentClassificationOperational": "Operational", - "incidentClassificationSafety": "Safety", - "incidentClassificationSecurity": "Security", - "incidentCreateButtonLabel": "Create Incident", - "incidentCreateCaptureLocation": "Capture Location", - "incidentCreateClassificationSection": "Classification", - "incidentCreateDescriptionHint": "Detailed description of the incident", - "incidentCreateDescriptionSection": "Description (optional)", - "incidentCreateError": "Error: {error}", - "incidentCreateFailed": "Failed to create", - "incidentCreateGettingLocation": "Getting location...", - "incidentCreateLocationError": "Could not get location", - "incidentCreateLocationException": "Location error: {error}", - "incidentCreateLocationSection": "Location (optional)", - "incidentCreatePrioritySection": "Priority", - "incidentCreateRemoveLocation": "Remove", - "incidentCreateScreenTitle": "Create Incident", - "incidentCreateSubmitButton": "Create Incident", - "incidentCreateSubmitting": "Creating...", - "incidentCreateTitleHint": "Brief incident title", - "incidentCreateTitleRequired": "Title is required", - "incidentCreateTitleSection": "Title", - "incidentCreateTooltip": "Create incident", - "incidentCreatedSuccess": "Incident created", - "incidentDetailError": "Error: {error}", - "incidentDetailTitle": "Incident Detail", - "incidentDetailTitleLoading": "Incident", - "incidentEmptyStateDescription": "Incidents track events from creation through resolution. Create one to get started.", - "incidentEmptyStateTitle": "No incidents", - "incidentFilterAssignedToMe": "Assigned to me", - "incidentFilterStateAssigned": "Assigned", - "incidentFilterStateCancelled": "Cancelled", - "incidentFilterStateClosed": "Closed", - "incidentFilterStateDraft": "Draft", - "incidentFilterStateEscalated": "Escalated", - "incidentFilterStateOpen": "Open", - "incidentFilterStateResolved": "Resolved", - "incidentListLoadError": "Failed to load incidents:\n{error}", - "incidentListTitle": "Incidents", - "incidentNotFound": "Incident not found", - "incidentNoteContinueButton": "Continue", - "incidentNoteHint": "Optional note for this transition", - "incidentNoteLabel": "Note", - "incidentNoteSheetTitle": "{action} Note (optional)", - "incidentNoteSkipButton": "Skip", - "incidentPriorityFlash": "Flash", - "incidentPriorityImmediate": "Immediate", - "incidentPriorityPriority": "Priority", - "incidentPriorityRoutine": "Routine", - "incidentRoleHintAssignedOperator": "Assigned Operator", - "incidentRoleHintOperatorOrAbove": "Operator or above", - "incidentRoleHintSupervisorOrAdmin": "Supervisor or Admin", - "incidentStateMachineAssigneeRequired": "assigneeId is required when transitioning to assigned", - "incidentStateMachineCreateDenied": "createIncident denied for role {roleName}", - "incidentStateMachineInvalidTransition": "{fromState} -> {toState} is not a valid transition", - "incidentStateMachinePermissionDenied": "{permissionName} denied for role {roleName}", - "incidentStateMachineTerminalState": "Cannot transition from {stateName}: terminal state: {stateName}", - "incidentTerminalStateMessage": "This incident is {state} — no further actions available.", - "incidentTimelineEmpty": "No transition history", - "incidentTimelineFinalState": "Final state — no further transitions", - "incidentTimelineSuperseded": "superseded", - "incidentTimelineUnknownRole": "unknown", - "incidentTransitionHistoryHeader": "Transition History", - "incidentTransitionsLoadError": "Failed to load transitions: {error}", - "legalAcceptanceAgreeButton": "I Agree", - "legalAcceptanceAgreeSemantics": "I agree to the Terms of Service and Privacy Policy. Tap to accept and continue.", - "legalAcceptanceAppIconSemantics": "Socialmesh app icon", - "legalAcceptanceDateFormatApril": "April", - "legalAcceptanceDateFormatAugust": "August", - "legalAcceptanceDateFormatDecember": "December", - "legalAcceptanceDateFormatFebruary": "February", - "legalAcceptanceDateFormatJanuary": "January", - "legalAcceptanceDateFormatJuly": "July", - "legalAcceptanceDateFormatJune": "June", - "legalAcceptanceDateFormatMarch": "March", - "legalAcceptanceDateFormatMay": "May", - "legalAcceptanceDateFormatNovember": "November", - "legalAcceptanceDateFormatOctober": "October", - "legalAcceptanceDateFormatSeptember": "September", - "legalAcceptanceDeclineBody": "Accepting the Terms of Service and Privacy Policy is required to use Socialmesh. You can review them and accept whenever you are ready.", - "legalAcceptanceDeclineButton": "Not Now", - "legalAcceptanceDeclineSemantics": "Not now. Decline and exit the app.", - "legalAcceptanceDeclineTitle": "Terms Required", - "legalAcceptanceFinePrint": "By tapping \"I Agree\", you accept our Terms of Service and acknowledge our Privacy Policy.", - "legalAcceptanceFinePrintSemantics": "By tapping I Agree, you accept our Terms of Service and acknowledge our Privacy Policy.", - "legalAcceptanceGoBackSemantics": "Go back to review and accept the terms", - "legalAcceptanceInformationSemantics": "Information", - "legalAcceptanceLegalShieldSemantics": "Legal shield", - "legalAcceptancePrivacyEffective": "Effective {date}", - "legalAcceptancePrivacyPolicy": "Privacy Policy", - "legalAcceptanceReviewButton": "Review Terms", - "legalAcceptanceSubtitleInitial": "Before you get started, please review our Terms of Service and Privacy Policy.", - "legalAcceptanceSubtitleUpdate": "We have updated our Terms of Service. Please review and accept the changes to continue using Socialmesh.", - "legalAcceptanceTermsEffective": "Effective {date}", - "legalAcceptanceTermsOfService": "Terms of Service", - "legalAcceptanceTermsSummarySemantics": "Terms summary", - "legalAcceptanceTitleInitial": "Terms & Privacy", - "legalAcceptanceTitleUpdate": "Updated Terms", - "legalAcceptanceViewPrivacySemantics": "View Privacy Policy", - "legalAcceptanceViewTermsSemantics": "View Terms of Service", - "legalEligibilityBody": "Socialmesh is intended for people aged 16 or older. You must confirm you are 16+ to continue.", - "legalEligibilityConfirmButton": "I Am 16 or Older", - "legalEligibilityConfirmSemantics": "I am 16 or older. Tap to confirm and continue.", - "legalEligibilityExitBody": "You must confirm you are 16 or older to use Socialmesh. You can confirm whenever you are ready.", - "legalEligibilityExitButton": "Exit", - "legalEligibilityExitSemantics": "Exit. You must be 16 or older to use Socialmesh.", - "legalEligibilityExitTitle": "Age Confirmation Required", - "legalEligibilityGoBackButton": "Go Back", - "legalEligibilityGoBackSemantics": "Go back to confirm your age", - "legalEligibilityIconSemantics": "Age eligibility", - "legalEligibilityInformationSemantics": "Information", - "legalEligibilityNoticeSemantics": "Age eligibility notice", - "legalEligibilityPrivacyLink": "Privacy", - "legalEligibilityTermsLink": "Terms", - "legalEligibilityTitle": "Ages 16+", - "legalEligibilityViewPrivacySemantics": "View Privacy Policy", - "legalEligibilityViewTermsSemantics": "View Terms of Service", - "lilygoModelPriceUnavailable": "Price unavailable", - "linkDeviceBannerLinkButton": "Link", - "linkDeviceBannerLinkError": "Failed to link: {error}", - "linkDeviceBannerLinkedSuccess": "Device linked to your profile!", - "linkDeviceBannerSubtitle": "Others can find and follow you", - "linkDeviceBannerTitle": "Link this device to your profile", - "mapAgeHours": "{hours}h ago", - "mapAgeMinutes": "{minutes}m ago", - "mapAgeSeconds": "{seconds}s ago", - "mapCoordinatesCopied": "Coordinates copied to clipboard", - "mapCopyBothCoordinates": "Both A and B coordinates", - "mapCopyCoordinates": "Copy Coordinates", - "mapCopyCoordinatesTooltip": "Copy coordinates", - "mapCopySummary": "Copy Summary", - "mapDelete": "Delete", - "mapDismissTooltip": "Dismiss", - "mapDistance10Km": "10 km", - "mapDistance1Km": "1 km", - "mapDistance25Km": "25 km", - "mapDistance5Km": "5 km", - "mapDistanceAll": "All", - "mapDistanceKilometers": "{km}km", - "mapDistanceKilometersFormal": "{km} km", - "mapDistanceKilometersPrecise": "{km} km", - "mapDistanceKilometersRound": "{km}km", - "mapDistanceMeters": "{meters}m", - "mapDistanceMetersFormal": "{meters} m", - "mapDropWaypoint": "Drop Waypoint", - "mapEmptyBodyNoNodes": "Nodes will appear on the map once they\nreport their GPS position.", - "mapEmptyBodyWithNodes": "{totalNodes} nodes discovered but none have\nreported GPS position yet.", - "mapEmptyTitle": "No Nodes with GPS", - "mapEntitiesTitle": "Entities", - "mapEstimatedPathLoss": "Estimated path loss: {pathLoss} dB (free-space)", - "mapExitMeasureMode": "Exit measure mode", - "mapExitMeasureModeTooltip": "Exit measure mode", - "mapFilterActive": "Active", - "mapFilterAll": "All", - "mapFilterInRange": "In Range", - "mapFilterInactive": "Inactive", - "mapFilterNodesTitle": "Filter Nodes", - "mapFilterNodesTooltip": "Filter nodes", - "mapFilterWithGps": "With GPS", - "mapGlobeView": "3D Globe View", - "mapHelp": "Help", - "mapHideConnectionLines": "Hide connection lines", - "mapHideHeatmap": "Hide heatmap", - "mapHidePositionHistory": "Hide position history", - "mapHideRangeCircles": "Hide range circles", - "mapHideTakEntities": "Hide TAK entities", - "mapLastKnown": "• Last known", - "mapLinkBudgetCopied": "Link budget copied to clipboard", - "mapLocationTitle": "Location", - "mapLongPressForActions": "Long-press for actions", - "mapLosAnalysis": "LOS Analysis", - "mapLosAnalysisSubtitle": "Earth curvature + Fresnel zone check", - "mapLosBulgeAndFresnel": "Bulge: {bulge}m · F1: {fresnel}m", - "mapLosVerdict": "LOS: {verdict}", - "mapMaxDistance": "Max Distance", - "mapMeasureDistance": "Measure distance", + "helpCenterScreenNodes": "Узлы", + "helpCenterScreenPresence": "Присутствие", + "helpCenterScreenProfile": "Профиль", + "helpCenterScreenRadioConfig": "Настройка радио", + "helpCenterScreenReachability": "Достижимость", + "helpCenterScreenRegionSelection": "Выбор региона", + "helpCenterScreenRoutes": "Маршруты", + "helpCenterScreenScanner": "Сканер", + "helpCenterScreenSettings": "Настройки", + "helpCenterScreenSignalFeed": "Лента Сигналов", + "helpCenterScreenTakGateway": "TAK Шлюз", + "helpCenterScreenTimeline": "Хронология", + "helpCenterScreenTraceRouteLog": "Журнал трассировки маршрута", + "helpCenterScreenWidgetBuilder": "Конструктор виджетов", + "helpCenterScreenWidgetDashboard": "Панель виджетов", + "helpCenterScreenWidgetMarketplace": "Маркетплейс виджетов", + "helpCenterScreenWorldMesh": "Мировая сеть", + "helpCenterSearchByTitle": "Поиск по названию статьи\nили описанию.", + "helpCenterSearchHint": "Поиск статей", + "helpCenterShowHelpHintsSubtitle": "Показывать мигающие кнопки справки на экранах", + "helpCenterShowHelpHintsTitle": "Показывать подсказки", + "helpCenterTapToLearn": "Нажмите на статью, чтобы узнать о mesh-сетях, настройках радио и многом другом.", + "helpCenterTitle": "Справочный центр", + "helpCenterToursCompletedCount": "{completed} / {total} завершено", + "helpCenterToursDescription": "Пошаговые руководства по функциям приложения. Ico проведёт вас по каждому экрану.", + "helpCenterTryDifferentCategory": "Попробуйте выбрать другую категорию с помощью фильтров выше.", + "incidentActionAssign": "Назначить", + "incidentActionCancel": "Отмена", + "incidentActionClose": "Закрыть", + "incidentActionDeniedTooltip": "Требуется {roleHint}", + "incidentActionEscalate": "Эскалировать", + "incidentActionFailedSnackbar": "Действие не выполнено", + "incidentActionResolve": "Устранить", + "incidentActionSubmit": "Отправить", + "incidentActionSuccessSnackbar": "Инцидент {action}", + "incidentAssignCancelButton": "Отмена", + "incidentAssignConfirmButton": "Назначить", + "incidentAssignSheetTitle": "Назначить инцидент", + "incidentAssignedLabel": "Назначено: {assigneeId}", + "incidentAssigneeHint": "Введите ID пользователя", + "incidentAssigneeLabel": "ID пользователя-исполнителя", + "incidentClassificationComms": "Связь", + "incidentClassificationEnvironmental": "Экологический", + "incidentClassificationLogistics": "Логистика", + "incidentClassificationMedical": "Медицинский", + "incidentClassificationOperational": "Операционный", + "incidentClassificationSafety": "Безопасность", + "incidentClassificationSecurity": "Охрана", + "incidentCreateButtonLabel": "Создать инцидент", + "incidentCreateCaptureLocation": "Захватить местоположение", + "incidentCreateClassificationSection": "Классификация", + "incidentCreateDescriptionHint": "Подробное описание инцидента", + "incidentCreateDescriptionSection": "Описание (необязательно)", + "incidentCreateError": "Ошибка: {error}", + "incidentCreateFailed": "Не удалось создать", + "incidentCreateGettingLocation": "Получение местоположения...", + "incidentCreateLocationError": "Не удалось получить местоположение", + "incidentCreateLocationException": "Ошибка местоположения: {error}", + "incidentCreateLocationSection": "Местоположение (необязательно)", + "incidentCreatePrioritySection": "Приоритет", + "incidentCreateRemoveLocation": "Удалить", + "incidentCreateScreenTitle": "Создать инцидент", + "incidentCreateSubmitButton": "Создать инцидент", + "incidentCreateSubmitting": "Создание...", + "incidentCreateTitleHint": "Краткое название инцидента", + "incidentCreateTitleRequired": "Название обязательно", + "incidentCreateTitleSection": "Название", + "incidentCreateTooltip": "Создать инцидент", + "incidentCreatedSuccess": "Инцидент создан", + "incidentDetailError": "Ошибка: {error}", + "incidentDetailTitle": "Детали инцидента", + "incidentDetailTitleLoading": "Инцидент", + "incidentEmptyStateDescription": "Инциденты отслеживают события от создания до устранения. Создайте один, чтобы начать.", + "incidentEmptyStateTitle": "Инцидентов нет", + "incidentFilterAssignedToMe": "Назначено мне", + "incidentFilterStateAssigned": "Назначен", + "incidentFilterStateCancelled": "Отменён", + "incidentFilterStateClosed": "Закрыт", + "incidentFilterStateDraft": "Черновик", + "incidentFilterStateEscalated": "Эскалирован", + "incidentFilterStateOpen": "Открыт", + "incidentFilterStateResolved": "Устранён", + "incidentListLoadError": "Не удалось загрузить инциденты:\n{error}", + "incidentListTitle": "Инциденты", + "incidentNotFound": "Инцидент не найден", + "incidentNoteContinueButton": "Продолжить", + "incidentNoteHint": "Необязательная заметка для этого перехода", + "incidentNoteLabel": "Заметка", + "incidentNoteSheetTitle": "Заметка — {action} (необязательно)", + "incidentNoteSkipButton": "Пропустить", + "incidentPriorityFlash": "Молниеносный", + "incidentPriorityImmediate": "Немедленный", + "incidentPriorityPriority": "Приоритетный", + "incidentPriorityRoutine": "Плановый", + "incidentRoleHintAssignedOperator": "Назначенный оператор", + "incidentRoleHintOperatorOrAbove": "Оператор или выше", + "incidentRoleHintSupervisorOrAdmin": "Руководитель или администратор", + "incidentStateMachineAssigneeRequired": "assigneeId обязателен при переходе в состояние «назначен»", + "incidentStateMachineCreateDenied": "createIncident запрещено для роли {roleName}", + "incidentStateMachineInvalidTransition": "{fromState} -> {toState} — недопустимый переход", + "incidentStateMachinePermissionDenied": "{permissionName} запрещено для роли {roleName}", + "incidentStateMachineTerminalState": "Невозможно выполнить переход из {stateName}: конечное состояние: {stateName}", + "incidentTerminalStateMessage": "Этот инцидент {state} — дальнейшие действия недоступны.", + "incidentTimelineEmpty": "История переходов отсутствует", + "incidentTimelineFinalState": "Конечное состояние — дальнейшие переходы невозможны", + "incidentTimelineSuperseded": "заменён", + "incidentTimelineUnknownRole": "неизвестно", + "incidentTransitionHistoryHeader": "История переходов", + "incidentTransitionsLoadError": "Не удалось загрузить переходы: {error}", + "legalAcceptanceAgreeButton": "Принимаю", + "legalAcceptanceAgreeSemantics": "Я принимаю Условия использования и Политику конфиденциальности. Нажмите, чтобы подтвердить и продолжить.", + "legalAcceptanceAppIconSemantics": "Значок приложения Socialmesh", + "legalAcceptanceDateFormatApril": "Апрель", + "legalAcceptanceDateFormatAugust": "Август", + "legalAcceptanceDateFormatDecember": "Декабрь", + "legalAcceptanceDateFormatFebruary": "Февраль", + "legalAcceptanceDateFormatJanuary": "Январь", + "legalAcceptanceDateFormatJuly": "Июль", + "legalAcceptanceDateFormatJune": "Июнь", + "legalAcceptanceDateFormatMarch": "Март", + "legalAcceptanceDateFormatMay": "Май", + "legalAcceptanceDateFormatNovember": "Ноябрь", + "legalAcceptanceDateFormatOctober": "Октябрь", + "legalAcceptanceDateFormatSeptember": "Сентябрь", + "legalAcceptanceDeclineBody": "Для использования Socialmesh необходимо принять Условия использования и Политику конфиденциальности. Вы можете ознакомиться с ними и принять в любое время.", + "legalAcceptanceDeclineButton": "Не сейчас", + "legalAcceptanceDeclineSemantics": "Не сейчас. Отклонить и выйти из приложения.", + "legalAcceptanceDeclineTitle": "Необходимо принять условия", + "legalAcceptanceFinePrint": "Нажимая «Принимаю», вы принимаете наши Условия использования и подтверждаете ознакомление с Политикой конфиденциальности.", + "legalAcceptanceFinePrintSemantics": "Нажимая «Принимаю», вы принимаете наши Условия использования и подтверждаете ознакомление с Политикой конфиденциальности.", + "legalAcceptanceGoBackSemantics": "Вернуться для ознакомления с условиями и их принятия", + "legalAcceptanceInformationSemantics": "Информация", + "legalAcceptanceLegalShieldSemantics": "Правовая защита", + "legalAcceptancePrivacyEffective": "Действует с {date}", + "legalAcceptancePrivacyPolicy": "Политика конфиденциальности", + "legalAcceptanceReviewButton": "Ознакомиться с условиями", + "legalAcceptanceSubtitleInitial": "Перед началом работы ознакомьтесь с нашими Условиями использования и Политикой конфиденциальности.", + "legalAcceptanceSubtitleUpdate": "Мы обновили Условия использования. Пожалуйста, ознакомьтесь с изменениями и примите их, чтобы продолжить пользоваться Socialmesh.", + "legalAcceptanceTermsEffective": "Действует с {date}", + "legalAcceptanceTermsOfService": "Условия использования", + "legalAcceptanceTermsSummarySemantics": "Сводка условий", + "legalAcceptanceTitleInitial": "Условия и конфиденциальность", + "legalAcceptanceTitleUpdate": "Обновлённые условия", + "legalAcceptanceViewPrivacySemantics": "Просмотреть Политику конфиденциальности", + "legalAcceptanceViewTermsSemantics": "Просмотреть Условия использования", + "legalEligibilityBody": "Socialmesh предназначен для лиц от 16 лет и старше. Для продолжения необходимо подтвердить, что вам исполнилось 16 лет.", + "legalEligibilityConfirmButton": "Мне 16 лет или больше", + "legalEligibilityConfirmSemantics": "Мне 16 лет или больше. Нажмите для подтверждения и продолжения.", + "legalEligibilityExitBody": "Для использования Socialmesh необходимо подтвердить, что вам исполнилось 16 лет или больше. Вы можете подтвердить в любое время.", + "legalEligibilityExitButton": "Выйти", + "legalEligibilityExitSemantics": "Выйти. Для использования Socialmesh необходимо быть не моложе 16 лет.", + "legalEligibilityExitTitle": "Необходимо подтверждение возраста", + "legalEligibilityGoBackButton": "Назад", + "legalEligibilityGoBackSemantics": "Вернуться для подтверждения возраста", + "legalEligibilityIconSemantics": "Возрастное ограничение", + "legalEligibilityInformationSemantics": "Информация", + "legalEligibilityNoticeSemantics": "Уведомление о возрастном ограничении", + "legalEligibilityPrivacyLink": "Конфиденциальность", + "legalEligibilityTermsLink": "Условия", + "legalEligibilityTitle": "16+", + "legalEligibilityViewPrivacySemantics": "Просмотреть Политику конфиденциальности", + "legalEligibilityViewTermsSemantics": "Просмотреть Условия использования", + "lilygoModelPriceUnavailable": "Цена недоступна", + "linkDeviceBannerLinkButton": "Привязать", + "linkDeviceBannerLinkError": "Не удалось привязать: {error}", + "linkDeviceBannerLinkedSuccess": "Устройство привязано к вашему профилю!", + "linkDeviceBannerSubtitle": "Другие смогут найти вас и подписаться", + "linkDeviceBannerTitle": "Привяжите это устройство к своему профилю", + "mapAgeHours": "{hours} ч назад", + "mapAgeMinutes": "{minutes} мин назад", + "mapAgeSeconds": "{seconds} с назад", + "mapCoordinatesCopied": "Координаты скопированы в буфер обмена", + "mapCopyBothCoordinates": "Координаты точек A и B", + "mapCopyCoordinates": "Копировать координаты", + "mapCopyCoordinatesTooltip": "Копировать координаты", + "mapCopySummary": "Копировать сводку", + "mapDelete": "Удалить", + "mapDismissTooltip": "Закрыть", + "mapDistance10Km": "10 км", + "mapDistance1Km": "1 км", + "mapDistance25Km": "25 км", + "mapDistance5Km": "5 км", + "mapDistanceAll": "Все", + "mapDistanceKilometers": "{km} км", + "mapDistanceKilometersFormal": "{km} км", + "mapDistanceKilometersPrecise": "{km} км", + "mapDistanceKilometersRound": "{km} км", + "mapDistanceMeters": "{meters} м", + "mapDistanceMetersFormal": "{meters} м", + "mapDropWaypoint": "Поставить путевую точку", + "mapEmptyBodyNoNodes": "Узлы появятся на карте, как только\nони передадут свои координаты GPS.", + "mapEmptyBodyWithNodes": "Обнаружено узлов: {totalNodes}, но ни один\nещё не передал координаты GPS.", + "mapEmptyTitle": "Нет узлов с GPS", + "mapEntitiesTitle": "Объекты", + "mapEstimatedPathLoss": "Расчётные потери на трассе: {pathLoss} дБ (в свободном пространстве)", + "mapExitMeasureMode": "Выйти из режима измерения", + "mapExitMeasureModeTooltip": "Выйти из режима измерения", + "mapFilterActive": "Активные", + "mapFilterAll": "Все", + "mapFilterInRange": "В зоне доступа", + "mapFilterInactive": "Неактивные", + "mapFilterNodesTitle": "Фильтр узлов", + "mapFilterNodesTooltip": "Фильтровать узлы", + "mapFilterWithGps": "С GPS", + "mapGlobeView": "Вид глобуса 3D", + "mapHelp": "Справка", + "mapHideConnectionLines": "Скрыть линии соединений", + "mapHideHeatmap": "Скрыть тепловую карту", + "mapHidePositionHistory": "Скрыть историю местоположений", + "mapHideRangeCircles": "Скрыть круги дальности", + "mapHideTakEntities": "Скрыть объекты TAK", + "mapLastKnown": "• Последнее известное", + "mapLinkBudgetCopied": "Бюджет радиолинии скопирован в буфер обмена", + "mapLocationTitle": "Местоположение", + "mapLongPressForActions": "Удерживайте для вызова действий", + "mapLosAnalysis": "Анализ прямой видимости", + "mapLosAnalysisSubtitle": "Проверка кривизны Земли и зоны Френеля", + "mapLosBulgeAndFresnel": "Выпуклость: {bulge} м · F1: {fresnel} м", + "mapLosVerdict": "Прямая видимость: {verdict}", + "mapMaxDistance": "Максимальное расстояние", + "mapMeasureDistance": "Измерить расстояние", "mapMeasureMarkerA": "A", "mapMeasureMarkerB": "B", - "mapMeasureTapPointA": "Tap node or map for point A", - "mapMeasureTapPointB": "Tap node or map for point B", - "mapMeasurementActions": "Measurement Actions", - "mapMeasurementCopied": "Measurement copied to clipboard", - "mapNavigateToTooltip": "Navigate to", - "mapNewMeasurement": "New measurement", - "mapNoEntities": "No entities", - "mapNoMatchingEntities": "No matching entities", - "mapNodeCount": "{count} nodes", - "mapNodesTitle": "Nodes", - "mapOpenInExternalApp": "Open in external map app", - "mapOpenMidpointInMaps": "Open Midpoint in Maps", - "mapPositionBroadcastHint": "Position broadcasts can take up to 15 minutes.\nTap to request immediately.", - "mapRefreshPositions": "Refresh positions", - "mapRefreshing": "Refreshing...", - "mapRequestPositions": "Request Positions", - "mapRequesting": "Requesting...", - "mapReverseDirection": "Reverse measurement direction", - "mapRfLinkBudget": "RF Link Budget", - "mapRfLinkBudgetClipboard": "RF Link Budget (free-space path loss)\nDistance: {distance}\nFrequency: {frequency}\nPath Loss: {pathLoss}\nLink Margin: {linkMargin}", - "mapSaDashboard": "TAK Dashboard", - "mapScreenTitle": "Mesh Map", - "mapSearchEntitiesHint": "Search entities...", - "mapSearchHint": "Try a different search term", - "mapSearchNodesHint": "Search nodes...", - "mapSettings": "Settings", - "mapShare": "Share", - "mapShareDistanceLabel": "Distance: {distance}", - "mapShareLocation": "Share Location", - "mapShareMeasurement": "Share Measurement", - "mapShareMeasurementSubtitle": "Share via system share sheet", - "mapShowConnectionLines": "Show connection lines", - "mapShowHeatmap": "Show heatmap", - "mapShowPositionHistory": "Show position history", - "mapShowRangeCircles": "Show range circles", - "mapShowTakEntities": "Show TAK entities", - "mapStyleTooltip": "Map style", - "mapSwapAB": "Swap A ↔ B", - "mapTakActive": "Active", - "mapTakActiveBadge": "ACTIVE", - "mapTakEntityCount": "• {count} entities", - "mapTakStale": "Stale", - "mapTakStaleBadge": "STALE", - "mapTakTrack": "Track", - "mapTakTracked": "Tracked", - "mapWaypointDefaultLabel": "WP {number}", - "mapYouBadge": "YOU", - "mesh3dAutoRotate": "Auto Rotate", - "mesh3dChangeViewTooltip": "Change View", - "mesh3dFilteredNodeCount": "{filtered}/{total} nodes", - "mesh3dHelp": "Help", - "mesh3dHideConnections": "Hide Connections", - "mesh3dLegendActive": "Active", - "mesh3dLegendActiveNow": "Active now", - "mesh3dLegendActivePeer": "Active peer", - "mesh3dLegendFading": "Fading", - "mesh3dLegendFadingPeer": "Fading peer", - "mesh3dLegendFairSignal": "Fair signal", - "mesh3dLegendGoodSignal": "Good signal", - "mesh3dLegendHighAltitude": "High altitude", - "mesh3dLegendLowAltitude": "Low altitude", - "mesh3dLegendOffline": "Offline", - "mesh3dLegendPoorSignal": "Poor signal", - "mesh3dLegendSnrBar": "SNR bar", - "mesh3dLegendStaleIdle": "Stale / idle", - "mesh3dLegendYourNode": "Your node", - "mesh3dMyNodeBadge": "ME", - "mesh3dNodeCount": "{count} nodes", - "mesh3dNodesDrawerTitle": "Nodes", - "mesh3dShowConnections": "Show Connections", - "mesh3dStatActive": "Active", - "mesh3dStatChUtil": "Ch Util", + "mapMeasureTapPointA": "Нажмите на узел или карту для точки A", + "mapMeasureTapPointB": "Нажмите на узел или карту для точки B", + "mapMeasurementActions": "Действия с измерением", + "mapMeasurementCopied": "Результат измерения скопирован в буфер обмена", + "mapNavigateToTooltip": "Проложить маршрут", + "mapNewMeasurement": "Новое измерение", + "mapNoEntities": "Нет объектов", + "mapNoMatchingEntities": "Подходящих объектов не найдено", + "mapNodeCount": "Узлов: {count}", + "mapNodesTitle": "Узлы", + "mapOpenInExternalApp": "Открыть во внешнем картографическом приложении", + "mapOpenMidpointInMaps": "Открыть среднюю точку в Картах", + "mapPositionBroadcastHint": "Трансляция местоположения может занимать до 15 минут.\nНажмите, чтобы запросить немедленно.", + "mapRefreshPositions": "Обновить местоположения", + "mapRefreshing": "Обновление...", + "mapRequestPositions": "Запросить местоположения", + "mapRequesting": "Запрос...", + "mapReverseDirection": "Изменить направление измерения на обратное", + "mapRfLinkBudget": "Бюджет радиолинии", + "mapRfLinkBudgetClipboard": "Бюджет радиолинии (потери в свободном пространстве)\nРасстояние: {distance}\nЧастота: {frequency}\nПотери на трассе: {pathLoss}\nЗапас линии: {linkMargin}", + "mapSaDashboard": "Панель TAK", + "mapScreenTitle": "Карта сети Mesh", + "mapSearchEntitiesHint": "Поиск объектов...", + "mapSearchHint": "Попробуйте другой поисковый запрос", + "mapSearchNodesHint": "Поиск узлов...", + "mapSettings": "Настройки", + "mapShare": "Поделиться", + "mapShareDistanceLabel": "Расстояние: {distance}", + "mapShareLocation": "Поделиться местоположением", + "mapShareMeasurement": "Поделиться измерением", + "mapShareMeasurementSubtitle": "Поделиться через системный диалог", + "mapShowConnectionLines": "Показать линии соединений", + "mapShowHeatmap": "Показать тепловую карту", + "mapShowPositionHistory": "Показать историю местоположений", + "mapShowRangeCircles": "Показать круги дальности", + "mapShowTakEntities": "Показать объекты TAK", + "mapStyleTooltip": "Стиль карты", + "mapSwapAB": "Поменять A ↔ B", + "mapTakActive": "Активен", + "mapTakActiveBadge": "АКТИВЕН", + "mapTakEntityCount": "• Объектов: {count}", + "mapTakStale": "Устарел", + "mapTakStaleBadge": "УСТАРЕЛ", + "mapTakTrack": "Трек", + "mapTakTracked": "Отслеживается", + "mapWaypointDefaultLabel": "ТЧ {number}", + "mapYouBadge": "ВЫ", + "mesh3dAutoRotate": "Автовращение", + "mesh3dChangeViewTooltip": "Изменить вид", + "mesh3dFilteredNodeCount": "{filtered}/{total} узлов", + "mesh3dHelp": "Справка", + "mesh3dHideConnections": "Скрыть соединения", + "mesh3dLegendActive": "Активный", + "mesh3dLegendActiveNow": "Активен сейчас", + "mesh3dLegendActivePeer": "Активный узел", + "mesh3dLegendFading": "Затухающий", + "mesh3dLegendFadingPeer": "Затухающий узел", + "mesh3dLegendFairSignal": "Удовлетворительный сигнал", + "mesh3dLegendGoodSignal": "Хороший сигнал", + "mesh3dLegendHighAltitude": "Большая высота", + "mesh3dLegendLowAltitude": "Малая высота", + "mesh3dLegendOffline": "Офлайн", + "mesh3dLegendPoorSignal": "Слабый сигнал", + "mesh3dLegendSnrBar": "Шкала SNR", + "mesh3dLegendStaleIdle": "Устаревший / неактивный", + "mesh3dLegendYourNode": "Ваш узел", + "mesh3dMyNodeBadge": "Я", + "mesh3dNodeCount": "{count} узлов", + "mesh3dNodesDrawerTitle": "Узлы", + "mesh3dShowConnections": "Показать соединения", + "mesh3dStatActive": "Активных", + "mesh3dStatChUtil": "Загр. кан.", "mesh3dStatGps": "GPS", "mesh3dStatSnr": "SNR", - "mesh3dStatTotal": "Total", - "mesh3dStopRotation": "Stop Rotation", - "mesh3dViewModeTitle": "View Mode", - "meshHealthActiveNodesPackets": "{activeNodeCount} active nodes • {totalPackets} packets", - "meshHealthBatteryUsageSubtitle": "Mesh Health monitoring uses extra battery. Pause when not needed.", - "meshHealthBatteryUsageTitle": "Battery usage", - "meshHealthChannelUtilization": "Channel Utilization", - "meshHealthCriticalIssues": "Critical Issues Detected", - "meshHealthDetectedIssues": "Detected Issues", - "meshHealthDontRemindAgain": "Don't remind me again", - "meshHealthFloodBadge": "FLOOD", - "meshHealthHealthy": "Mesh Healthy", - "meshHealthIndicatorLabel": "Health", - "meshHealthIssueCount": "{count} issues", - "meshHealthIssuesDetected": "Issues Detected", - "meshHealthKeepRunning": "Keep Running", - "meshHealthMonitoringActiveTitle": "Monitoring is still active", - "meshHealthMonitoringBatteryWarning": "Mesh Health monitoring uses extra battery while running in the background.", - "meshHealthMonitoringPaused": "Monitoring Paused", - "meshHealthNoDataYet": "No data yet", - "meshHealthNoIssuesDetected": "No issues detected", - "meshHealthNoNodesDetected": "No nodes detected", - "meshHealthNodePrefix": "Node: {nodeId}", - "meshHealthNormal": "Normal", - "meshHealthOfAirtime": "of airtime", - "meshHealthPacketsAirtime": "{packetCount} packets • {airtimeMs}ms airtime", - "meshHealthPauseAndLeave": "Pause & Leave", - "meshHealthPauseTooltip": "Pause", - "meshHealthReliability": "Reliability", - "meshHealthReliabilityFair": "Fair", - "meshHealthReliabilityGood": "Good", - "meshHealthReliabilityPoor": "Poor", - "meshHealthResetDataTooltip": "Reset Data", - "meshHealthResumeTooltip": "Resume", - "meshHealthSaturated": "SATURATED", - "meshHealthSpamBadge": "SPAM", - "meshHealthThresholdLabel": "50% threshold", - "meshHealthTitle": "Mesh Health", - "meshHealthTopContributors": "Top Contributors", - "meshHealthUtilization": "Utilization", - "meshcoreAbout": "About", - "meshcoreAboutDescription": "SocialMesh is a mesh radio companion app supporting Meshtastic and MeshCore devices.", - "meshcoreAboutSocialMesh": "About SocialMesh", - "meshcoreActions": "Actions", - "meshcoreActiveLabel": "Active", - "meshcoreAdd": "Add", - "meshcoreAddContact": "Add Contact", - "meshcoreAddContactButton": "Add Contact", - "meshcoreAdvertisementSent": "Advertisement sent", - "meshcoreAdvertisementSentTools": "Advertisement sent", - "meshcoreAnalysis": "Analysis", - "meshcoreBandwidthLabel": "Bandwidth", - "meshcoreBasedOnLiPoVoltage": "Based on LiPo voltage range (3.0V - 4.2V)", - "meshcoreBatteryAndStorage": "Battery & Storage", - "meshcoreBatteryInfoNotAvailable": "Battery info not available", - "meshcoreBatteryLabel": "Battery", - "meshcoreBatteryStatus": "Battery Status", - "meshcoreBatteryStatusLabel": "Battery", - "meshcoreBatteryUnknown": "Unknown", - "meshcoreBroadcastPresenceToMesh": "Broadcast your presence to the mesh", - "meshcoreBroadcastYourPresence": "Broadcast your presence", - "meshcoreCancel": "Cancel", - "meshcoreCenter": "Center", - "meshcoreChannelAlreadyExists": "{channelName} is already in your channels", - "meshcoreChannelCodeCopied": "Channel code copied", - "meshcoreChannelCreated": "Channel \"{channelName}\" created", - "meshcoreChannelNameHint": "Channel name", + "mesh3dStatTotal": "Всего", + "mesh3dStopRotation": "Остановить вращение", + "mesh3dViewModeTitle": "Режим отображения", + "meshHealthActiveNodesPackets": "{activeNodeCount} активных узлов • {totalPackets} пакетов", + "meshHealthBatteryUsageSubtitle": "Мониторинг работоспособности сети потребляет дополнительный заряд. Приостановите при отсутствии необходимости.", + "meshHealthBatteryUsageTitle": "Расход аккумулятора", + "meshHealthChannelUtilization": "Загрузка канала", + "meshHealthCriticalIssues": "Обнаружены критические проблемы", + "meshHealthDetectedIssues": "Обнаруженные проблемы", + "meshHealthDontRemindAgain": "Больше не напоминать", + "meshHealthFloodBadge": "ФЛУД", + "meshHealthHealthy": "Сеть в норме", + "meshHealthIndicatorLabel": "Состояние", + "meshHealthIssueCount": "{count} проблем", + "meshHealthIssuesDetected": "Проблемы обнаружены", + "meshHealthKeepRunning": "Продолжить работу", + "meshHealthMonitoringActiveTitle": "Мониторинг всё ещё активен", + "meshHealthMonitoringBatteryWarning": "Мониторинг работоспособности сети потребляет дополнительный заряд в фоновом режиме.", + "meshHealthMonitoringPaused": "Мониторинг приостановлен", + "meshHealthNoDataYet": "Данных пока нет", + "meshHealthNoIssuesDetected": "Проблем не обнаружено", + "meshHealthNoNodesDetected": "Узлы не обнаружены", + "meshHealthNodePrefix": "Узел: {nodeId}", + "meshHealthNormal": "Норма", + "meshHealthOfAirtime": "эфирного времени", + "meshHealthPacketsAirtime": "{packetCount} пакетов • {airtimeMs} мс эфирного времени", + "meshHealthPauseAndLeave": "Пауза и выход", + "meshHealthPauseTooltip": "Пауза", + "meshHealthReliability": "Надёжность", + "meshHealthReliabilityFair": "Удовлетворительно", + "meshHealthReliabilityGood": "Хорошо", + "meshHealthReliabilityPoor": "Плохо", + "meshHealthResetDataTooltip": "Сбросить данные", + "meshHealthResumeTooltip": "Возобновить", + "meshHealthSaturated": "ПЕРЕГРУЖЕН", + "meshHealthSpamBadge": "СПАМ", + "meshHealthThresholdLabel": "Порог 50%", + "meshHealthTitle": "Работоспособность сети", + "meshHealthTopContributors": "Наиболее активные участники", + "meshHealthUtilization": "Загрузка", + "meshcoreAbout": "О приложении", + "meshcoreAboutDescription": "SocialMesh — приложение-компаньон для mesh-радио, поддерживающее устройства Meshtastic и MeshCore.", + "meshcoreAboutSocialMesh": "О SocialMesh", + "meshcoreActions": "Действия", + "meshcoreActiveLabel": "Активен", + "meshcoreAdd": "Добавить", + "meshcoreAddContact": "Добавить контакт", + "meshcoreAddContactButton": "Добавить контакт", + "meshcoreAdvertisementSent": "Объявление отправлено", + "meshcoreAdvertisementSentTools": "Объявление отправлено", + "meshcoreAnalysis": "Анализ", + "meshcoreBandwidthLabel": "Полоса пропускания", + "meshcoreBasedOnLiPoVoltage": "На основе диапазона напряжения LiPo (3,0 В — 4,2 В)", + "meshcoreBatteryAndStorage": "Батарея и хранилище", + "meshcoreBatteryInfoNotAvailable": "Информация о батарее недоступна", + "meshcoreBatteryLabel": "Батарея", + "meshcoreBatteryStatus": "Состояние батареи", + "meshcoreBatteryStatusLabel": "Батарея", + "meshcoreBatteryUnknown": "Неизвестно", + "meshcoreBroadcastPresenceToMesh": "Транслировать своё присутствие в сеть", + "meshcoreBroadcastYourPresence": "Транслировать присутствие", + "meshcoreCancel": "Отмена", + "meshcoreCenter": "Центр", + "meshcoreChannelAlreadyExists": "{channelName} уже есть в ваших каналах", + "meshcoreChannelCodeCopied": "Код канала скопирован", + "meshcoreChannelCreated": "Канал \"{channelName}\" создан", + "meshcoreChannelNameHint": "Название канала", "meshcoreChannelNameHintGeneral": "general", - "meshcoreChannelNameHintHashtag": "e.g. general", - "meshcoreChannelNameLabel": "Channel Name", - "meshcoreChannelPskCopied": "Channel PSK copied", - "meshcoreChannelsCreateChannel": "Create Channel", - "meshcoreChannelsJoinChannel": "Join Channel", - "meshcoreChannelsLabel": "Channels", - "meshcoreChannelsRefreshChannels": "Refresh Channels", - "meshcoreChannelsTitle": "Channels", - "meshcoreChatNode": "Chat Node", - "meshcoreClear": "Clear", - "meshcoreClose": "Close", - "meshcoreCodingRateLabel": "Coding Rate", - "meshcoreConnected": "Connected", - "meshcoreConnectedTo": "Connected to {deviceName}", - "meshcoreConsoleCaptureCleared": "Capture cleared", - "meshcoreConsoleClear": "Clear", - "meshcoreConsoleCopyHex": "Copy Hex", + "meshcoreChannelNameHintHashtag": "например, general", + "meshcoreChannelNameLabel": "Название канала", + "meshcoreChannelPskCopied": "PSK канала скопирован", + "meshcoreChannelsCreateChannel": "Создать канал", + "meshcoreChannelsJoinChannel": "Вступить в канал", + "meshcoreChannelsLabel": "Каналы", + "meshcoreChannelsRefreshChannels": "Обновить каналы", + "meshcoreChannelsTitle": "Каналы", + "meshcoreChatNode": "Узел чата", + "meshcoreClear": "Очистить", + "meshcoreClose": "Закрыть", + "meshcoreCodingRateLabel": "Скорость кодирования", + "meshcoreConnected": "Подключено", + "meshcoreConnectedTo": "Подключено к {deviceName}", + "meshcoreConsoleCaptureCleared": "Захват очищен", + "meshcoreConsoleClear": "Очистить", + "meshcoreConsoleCopyHex": "Скопировать Hex", "meshcoreConsoleDevBadge": "DEV", - "meshcoreConsoleFramesCaptured": "{count} frames captured", - "meshcoreConsoleHexCopied": "Hex log copied to clipboard", - "meshcoreConsoleNoFrames": "No frames captured yet", - "meshcoreConsoleRefresh": "Refresh", - "meshcoreConsoleTitle": "MeshCore Console", - "meshcoreContactAdded": "{contactName} added", - "meshcoreContactAddedToContacts": "{contactName} added to contacts", - "meshcoreContactAlreadyExists": "{contactName} is already in your contacts", - "meshcoreContactCodeCopied": "Contact code copied", - "meshcoreContactCount": "{count} contact", - "meshcoreContactCountPlural": "{count} contacts", - "meshcoreContactRemoved": "{contactName} removed", - "meshcoreContactsLabel": "Contacts", - "meshcoreContactsTitle": "Contacts", - "meshcoreControlAdvertVisibility": "Control advertisement visibility", - "meshcoreCoordinatesCopied": "Coordinates copied to clipboard", - "meshcoreCopy": "Copy", - "meshcoreCopyChannelCode": "Copy Channel Code", - "meshcoreCopyCoordinates": "Copy Coordinates", - "meshcoreCopyCoordinatesSubtitle": "Both A and B coordinates", - "meshcoreCopyPublicKey": "Copy Public Key", - "meshcoreCopySummary": "Copy Summary", - "meshcoreCreate": "Create", - "meshcoreCreateChannelButton": "Create Channel", - "meshcoreCreateChannelDialogTitle": "Create Channel", - "meshcoreDebug": "Debug", - "meshcoreDeviceInfo": "Device Info", - "meshcoreDeviceInfoCopied": "Device info copied", - "meshcoreDeviceInfoNotAvailable": "Device info not available", - "meshcoreDeviceInfoTool": "Device Info", - "meshcoreDeviceInformation": "Device Information", - "meshcoreDiagnostics": "Diagnostics", - "meshcoreDisconnect": "Disconnect", - "meshcoreDisconnectedChannelsDescription": "Connect to a MeshCore device to view channels", - "meshcoreDisconnectedContactsDescription": "Connect to a MeshCore device to view contacts", - "meshcoreDisconnectedMapDescription": "Connect to a MeshCore device to view the map", - "meshcoreDisconnectedMapTitle": "MeshCore Disconnected", - "meshcoreDisconnectedMessagesWillQueue": "Disconnected - Messages will queue", - "meshcoreDisconnectedStatus": "Disconnected", - "meshcoreDisconnectedTitle": "MeshCore Disconnected", - "meshcoreDisconnectedToolsDescription": "Connect to a MeshCore device to access tools", - "meshcoreDisconnectedToolsTitle": "MeshCore Disconnected", - "meshcoreDiscovery": "Discovery", - "meshcoreDone": "Done", - "meshcoreEditNodeName": "Edit Node Name", - "meshcoreEnterChannelCode": "Enter Channel Code", - "meshcoreEnterChannelCodeSubtitle": "Paste a channel invite code", - "meshcoreEnterCodeManually": "Enter Code Manually", - "meshcoreEnterContactCode": "Enter Contact Code", - "meshcoreEnterNodeNameHint": "Enter node name...", - "meshcoreErrorEnterChannelCode": "Please enter a channel code", - "meshcoreErrorEnterChannelName": "Please enter a channel name", - "meshcoreExitMeasureMode": "Exit measure mode", - "meshcoreFailedToRebootDevice": "Failed to reboot device", - "meshcoreFailedToSendAdTools": "Failed to send advertisement", - "meshcoreFailedToSendAdvertisement": "Failed to send advertisement", - "meshcoreFailedToSendMessage": "Failed to send message", - "meshcoreFailedToSetName": "Failed to set name", - "meshcoreFailedToSyncTime": "Failed to sync time", - "meshcoreFilterChatNodes": "Chat Nodes", - "meshcoreFilterMap": "Filter Map", - "meshcoreFilterOtherNodes": "Other Nodes", - "meshcoreFilterRepeaters": "Repeaters", - "meshcoreFilterTooltip": "Filter", - "meshcoreFramesLabel": "Frames", - "meshcoreFrequencyLabel": "Frequency", - "meshcoreInvalidChannelCodeFormat": "Invalid channel code format (expected: name:pskHex)", - "meshcoreInvalidContactCode": "Invalid contact code", - "meshcoreInvalidQrCodeFormat": "Invalid QR code format", - "meshcoreJoin": "Join", - "meshcoreJoinButton": "Join", - "meshcoreJoinHashtagChannel": "Join Hashtag Channel", - "meshcoreJoinHashtagChannelSubtitle": "Enter channel name (e.g. #general)", - "meshcoreJoinedChannel": "Joined {channelName}", - "meshcoreJoinedHashtagChannel": "Joined #{name}", - "meshcoreJustNow": "Just now", - "meshcoreLeave": "Leave", - "meshcoreLeaveChannel": "Leave Channel", - "meshcoreLeaveChannelMessage": "Are you sure you want to leave {channelName}?", - "meshcoreLeaveChannelTitle": "Leave Channel?", - "meshcoreLeftChannel": "Left {channelName}", - "meshcoreLegendChat": "Chat", - "meshcoreLegendRepeater": "Repeater", - "meshcoreLegendRoom": "Room", - "meshcoreLegendSensor": "Sensor", - "meshcoreLoadingChannels": "Loading channels...", - "meshcoreLoadingContacts": "Loading contacts...", - "meshcoreLoadingMessages": "Loading messages...", - "meshcoreLocationComingSoon": "Location settings coming soon.\n\nThis will allow you to manually set your node position or use GPS.", - "meshcoreLocationInfoLabel": "Location", - "meshcoreLocationSetting": "Location", - "meshcoreLongPressForActions": "Long-press for actions", - "meshcoreMapTitle": "Map", - "meshcoreMaxTxPowerLabel": "Max TX Power", - "meshcoreMeasurementActions": "Measurement Actions", - "meshcoreMeasurementCopied": "Measurement copied to clipboard", - "meshcoreMeshCoreDevice": "MeshCore Device", - "meshcoreMessageButton": "Message", - "meshcoreMonitorPowerStorage": "Monitor power and storage status", - "meshcoreMyContactCode": "My Contact Code", - "meshcoreNameLabel": "Name", - "meshcoreNewMeasurement": "New measurement", - "meshcoreNoChannels": "No Channels", - "meshcoreNoChannelsDescription": "Channels are shared spaces for group communication.\n\nCreate a new channel or join an existing one.", - "meshcoreNoContacts": "No Contacts", - "meshcoreNoContactsDescription": "Contacts will appear here when discovered via advertisements.\n\nYou can also add contacts manually using their contact code.", - "meshcoreNoContactsForTrace": "No contacts available for trace", - "meshcoreNoContactsWithLocation": "No Contacts with Location", - "meshcoreNoContactsWithLocationDescription": "Contacts with GPS coordinates will appear on the map.\nMake sure your contacts have location sharing enabled.", - "meshcoreNoMessagesYet": "No messages yet", - "meshcoreNodeNameLabel": "Node Name", - "meshcoreNodeNameSetting": "Node Name", - "meshcoreNodeNameUpdated": "Node name updated", - "meshcoreNodeSettings": "Node Settings", - "meshcoreNotConnected": "Not connected", - "meshcoreNotConnectedToDevice": "Not connected to MeshCore device", - "meshcoreNotConnectedTools": "Not connected", - "meshcoreNotSet": "Not set", - "meshcoreNotValidChannelQr": "Not a valid MeshCore channel QR code", - "meshcoreNotValidContactQr": "Not a valid MeshCore contact QR code", - "meshcoreNotYetImplemented": "Not yet implemented", - "meshcoreOpenChannel": "Open Channel", - "meshcoreOpenInExternalMapApp": "Open in external map app", - "meshcoreOpenMidpointInMaps": "Open Midpoint in Maps", - "meshcorePasteChannelCodeHint": "Paste channel code here...", - "meshcorePasteContactCodeHint": "Paste contact code here...", - "meshcorePointCameraAtChannelQr": "Point your camera at a MeshCore channel QR code", - "meshcorePointCameraAtContactQr": "Point your camera at a MeshCore contact QR code", - "meshcorePrivacyComingSoon": "Privacy settings coming soon.\n\nThis will control whether your node broadcasts advertisements.", - "meshcorePrivacyMode": "Privacy Mode", - "meshcorePrivacyModeDialogTitle": "Privacy Mode", - "meshcorePrivate": "Private", - "meshcorePrivateChannel": "Private Channel", - "meshcoreProtocolCapture": "Protocol Capture", - "meshcoreProtocolCaptureDialogTitle": "Protocol Capture", - "meshcorePskDerivedFromName": "PSK derived from name (discoverable)", - "meshcorePublic": "Public", - "meshcorePublicChannel": "Public Channel", - "meshcorePublicHashtagChannel": "Public Hashtag Channel", - "meshcorePublicKeyCopied": "Public key copied", - "meshcorePublicKeyCopiedSettings": "Public key copied", - "meshcorePublicKeySettingsLabel": "Public Key", - "meshcoreRadioConfiguredOnFirmware": "Radio settings are configured on the device firmware.", - "meshcoreRadioSettings": "Radio Settings", - "meshcoreRadioSettingsDialogTitle": "Radio Settings", - "meshcoreRadioSettingsNotAvailable": "Radio settings not available", - "meshcoreRadioSettingsSubtitle": "Frequency, TX power, bandwidth", - "meshcoreRadioSettingsTitle": "Radio Settings", - "meshcoreRadioSettingsTool": "Radio Settings", - "meshcoreRandomPskPrivate": "Random PSK (private)", - "meshcoreReboot": "Reboot", - "meshcoreRebootCommandSent": "Reboot command sent", - "meshcoreRebootDevice": "Reboot Device", - "meshcoreRebootDeviceMessage": "Are you sure you want to reboot the MeshCore device?", - "meshcoreRebootDeviceTitle": "Reboot Device", - "meshcoreRefresh": "Refresh", - "meshcoreRefreshButton": "Refresh", - "meshcoreRefreshContacts": "Refresh Contacts", - "meshcoreRefreshContactsSetting": "Refresh Contacts", - "meshcoreRefreshing": "Refreshing...", - "meshcoreRefreshingContacts": "Refreshing contacts...", - "meshcoreReloadContactsFromDevice": "Reload contacts from device", - "meshcoreRemove": "Remove", - "meshcoreRemoveContact": "Remove Contact", - "meshcoreRemoveContactMessage": "Are you sure you want to remove {contactName}?", - "meshcoreRemoveContactTitle": "Remove Contact?", - "meshcoreRepeaterNode": "Repeater Node", - "meshcoreRestartMeshCoreDevice": "Restart the MeshCore device", - "meshcoreReverseMeasurementDirection": "Reverse measurement direction", - "meshcoreRoomNode": "Room Node", - "meshcoreSave": "Save", - "meshcoreScanChannelQrSubtitle": "Scan a channel QR code", - "meshcoreScanChannelQrTitle": "Scan Channel QR", - "meshcoreScanContactQrSubtitle": "Scan a contact's QR code", - "meshcoreScanContactQrTitle": "Scan Contact QR", - "meshcoreScanQrCode": "Scan QR Code", - "meshcoreScanQrToJoinChannel": "Scan this QR code to join the channel", - "meshcoreScanToAddMeSubtitle": "Scan this code to add me as a contact", - "meshcoreSearchContactsHint": "Search contacts...", - "meshcoreSelectContactToTrace": "Select a contact to trace the route through the mesh.", - "meshcoreSelfInfoNotAvailable": "Self info not available", - "meshcoreSendAdvertisement": "Send Advertisement", - "meshcoreSendAdvertisementTool": "Send Advertisement", - "meshcoreSendMessage": "Send Message", - "meshcoreSendMessageToStart": "Send a message to start the conversation", - "meshcoreSending": "Sending...", - "meshcoreSessionNotActive": "MeshCore session not active", - "meshcoreSetLocation": "Set Location", - "meshcoreSetNodePosition": "Set node position", - "meshcoreSettingsTitle": "Settings", + "meshcoreConsoleFramesCaptured": "Захвачено кадров: {count}", + "meshcoreConsoleHexCopied": "Hex-лог скопирован в буфер обмена", + "meshcoreConsoleNoFrames": "Кадры ещё не захвачены", + "meshcoreConsoleRefresh": "Обновить", + "meshcoreConsoleTitle": "Консоль MeshCore", + "meshcoreContactAdded": "{contactName} добавлен", + "meshcoreContactAddedToContacts": "{contactName} добавлен в контакты", + "meshcoreContactAlreadyExists": "{contactName} уже есть в ваших контактах", + "meshcoreContactCodeCopied": "Код контакта скопирован", + "meshcoreContactCount": "{count} контакт", + "meshcoreContactCountPlural": "{count} контактов", + "meshcoreContactRemoved": "{contactName} удалён", + "meshcoreContactsLabel": "Контакты", + "meshcoreContactsTitle": "Контакты", + "meshcoreControlAdvertVisibility": "Управлять видимостью объявлений", + "meshcoreCoordinatesCopied": "Координаты скопированы в буфер обмена", + "meshcoreCopy": "Копировать", + "meshcoreCopyChannelCode": "Копировать код канала", + "meshcoreCopyCoordinates": "Копировать координаты", + "meshcoreCopyCoordinatesSubtitle": "Координаты A и B", + "meshcoreCopyPublicKey": "Копировать публичный ключ", + "meshcoreCopySummary": "Копировать сводку", + "meshcoreCreate": "Создать", + "meshcoreCreateChannelButton": "Создать канал", + "meshcoreCreateChannelDialogTitle": "Создать канал", + "meshcoreDebug": "Отладка", + "meshcoreDeviceInfo": "Информация об устройстве", + "meshcoreDeviceInfoCopied": "Информация об устройстве скопирована", + "meshcoreDeviceInfoNotAvailable": "Информация об устройстве недоступна", + "meshcoreDeviceInfoTool": "Информация об устройстве", + "meshcoreDeviceInformation": "Информация об устройстве", + "meshcoreDiagnostics": "Диагностика", + "meshcoreDisconnect": "Отключиться", + "meshcoreDisconnectedChannelsDescription": "Подключитесь к устройству MeshCore для просмотра каналов", + "meshcoreDisconnectedContactsDescription": "Подключитесь к устройству MeshCore для просмотра контактов", + "meshcoreDisconnectedMapDescription": "Подключитесь к устройству MeshCore для просмотра карты", + "meshcoreDisconnectedMapTitle": "MeshCore отключён", + "meshcoreDisconnectedMessagesWillQueue": "Отключено — сообщения будут поставлены в очередь", + "meshcoreDisconnectedStatus": "Отключено", + "meshcoreDisconnectedTitle": "MeshCore отключён", + "meshcoreDisconnectedToolsDescription": "Подключитесь к устройству MeshCore для доступа к инструментам", + "meshcoreDisconnectedToolsTitle": "MeshCore отключён", + "meshcoreDiscovery": "Обнаружение", + "meshcoreDone": "Готово", + "meshcoreEditNodeName": "Изменить имя узла", + "meshcoreEnterChannelCode": "Введите код канала", + "meshcoreEnterChannelCodeSubtitle": "Вставьте код приглашения в канал", + "meshcoreEnterCodeManually": "Ввести код вручную", + "meshcoreEnterContactCode": "Введите код контакта", + "meshcoreEnterNodeNameHint": "Введите имя узла...", + "meshcoreErrorEnterChannelCode": "Пожалуйста, введите код канала", + "meshcoreErrorEnterChannelName": "Пожалуйста, введите название канала", + "meshcoreExitMeasureMode": "Выйти из режима измерения", + "meshcoreFailedToRebootDevice": "Не удалось перезагрузить устройство", + "meshcoreFailedToSendAdTools": "Не удалось отправить объявление", + "meshcoreFailedToSendAdvertisement": "Не удалось отправить объявление", + "meshcoreFailedToSendMessage": "Не удалось отправить сообщение", + "meshcoreFailedToSetName": "Не удалось задать имя", + "meshcoreFailedToSyncTime": "Не удалось синхронизировать время", + "meshcoreFilterChatNodes": "Узлы чата", + "meshcoreFilterMap": "Фильтр карты", + "meshcoreFilterOtherNodes": "Другие узлы", + "meshcoreFilterRepeaters": "Ретрансляторы", + "meshcoreFilterTooltip": "Фильтр", + "meshcoreFramesLabel": "Кадры", + "meshcoreFrequencyLabel": "Частота", + "meshcoreInvalidChannelCodeFormat": "Неверный формат кода канала (ожидается: name:pskHex)", + "meshcoreInvalidContactCode": "Неверный код контакта", + "meshcoreInvalidQrCodeFormat": "Неверный формат QR-кода", + "meshcoreJoin": "Вступить", + "meshcoreJoinButton": "Вступить", + "meshcoreJoinHashtagChannel": "Вступить в канал с хэштегом", + "meshcoreJoinHashtagChannelSubtitle": "Введите название канала (например, #general)", + "meshcoreJoinedChannel": "Вы вступили в {channelName}", + "meshcoreJoinedHashtagChannel": "Вы вступили в #{name}", + "meshcoreJustNow": "Только что", + "meshcoreLeave": "Покинуть", + "meshcoreLeaveChannel": "Покинуть канал", + "meshcoreLeaveChannelMessage": "Вы уверены, что хотите покинуть {channelName}?", + "meshcoreLeaveChannelTitle": "Покинуть канал?", + "meshcoreLeftChannel": "Вы покинули {channelName}", + "meshcoreLegendChat": "Чат", + "meshcoreLegendRepeater": "Ретранслятор", + "meshcoreLegendRoom": "Комната", + "meshcoreLegendSensor": "Датчик", + "meshcoreLoadingChannels": "Загрузка каналов...", + "meshcoreLoadingContacts": "Загрузка контактов...", + "meshcoreLoadingMessages": "Загрузка сообщений...", + "meshcoreLocationComingSoon": "Настройки местоположения появятся в ближайшее время.\n\nЭто позволит вам вручную задать положение узла или использовать GPS.", + "meshcoreLocationInfoLabel": "Местоположение", + "meshcoreLocationSetting": "Местоположение", + "meshcoreLongPressForActions": "Удерживайте для действий", + "meshcoreMapTitle": "Карта", + "meshcoreMaxTxPowerLabel": "Макс. мощность TX", + "meshcoreMeasurementActions": "Действия с измерением", + "meshcoreMeasurementCopied": "Измерение скопировано в буфер обмена", + "meshcoreMeshCoreDevice": "Устройство MeshCore", + "meshcoreMessageButton": "Сообщение", + "meshcoreMonitorPowerStorage": "Мониторинг питания и состояния хранилища", + "meshcoreMyContactCode": "Мой код контакта", + "meshcoreNameLabel": "Имя", + "meshcoreNewMeasurement": "Новое измерение", + "meshcoreNoChannels": "Нет каналов", + "meshcoreNoChannelsDescription": "Каналы — это общие пространства для групповой связи.\n\nСоздайте новый канал или вступите в существующий.", + "meshcoreNoContacts": "Нет контактов", + "meshcoreNoContactsDescription": "Контакты будут появляться здесь по мере обнаружения через объявления.\n\nВы также можете добавить контакты вручную, используя их код контакта.", + "meshcoreNoContactsForTrace": "Нет контактов для трассировки", + "meshcoreNoContactsWithLocation": "Нет контактов с местоположением", + "meshcoreNoContactsWithLocationDescription": "Контакты с координатами GPS будут отображены на карте.\nУбедитесь, что у ваших контактов включена передача местоположения.", + "meshcoreNoMessagesYet": "Сообщений пока нет", + "meshcoreNodeNameLabel": "Имя узла", + "meshcoreNodeNameSetting": "Имя узла", + "meshcoreNodeNameUpdated": "Имя узла обновлено", + "meshcoreNodeSettings": "Настройки узла", + "meshcoreNotConnected": "Нет подключения", + "meshcoreNotConnectedToDevice": "Нет подключения к устройству MeshCore", + "meshcoreNotConnectedTools": "Нет подключения", + "meshcoreNotSet": "Не задано", + "meshcoreNotValidChannelQr": "Недействительный QR-код канала MeshCore", + "meshcoreNotValidContactQr": "Недействительный QR-код контакта MeshCore", + "meshcoreNotYetImplemented": "Ещё не реализовано", + "meshcoreOpenChannel": "Открыть канал", + "meshcoreOpenInExternalMapApp": "Открыть во внешнем картографическом приложении", + "meshcoreOpenMidpointInMaps": "Открыть среднюю точку на карте", + "meshcorePasteChannelCodeHint": "Вставьте код канала здесь...", + "meshcorePasteContactCodeHint": "Вставьте код контакта здесь...", + "meshcorePointCameraAtChannelQr": "Наведите камеру на QR-код канала MeshCore", + "meshcorePointCameraAtContactQr": "Наведите камеру на QR-код контакта MeshCore", + "meshcorePrivacyComingSoon": "Настройки конфиденциальности появятся в ближайшее время.\n\nЭто позволит управлять тем, транслирует ли ваш узел объявления.", + "meshcorePrivacyMode": "Режим конфиденциальности", + "meshcorePrivacyModeDialogTitle": "Режим конфиденциальности", + "meshcorePrivate": "Приватный", + "meshcorePrivateChannel": "Приватный канал", + "meshcoreProtocolCapture": "Захват протокола", + "meshcoreProtocolCaptureDialogTitle": "Захват протокола", + "meshcorePskDerivedFromName": "PSK получен из имени (обнаруживаемый)", + "meshcorePublic": "Публичный", + "meshcorePublicChannel": "Публичный канал", + "meshcorePublicHashtagChannel": "Публичный канал с хэштегом", + "meshcorePublicKeyCopied": "Публичный ключ скопирован", + "meshcorePublicKeyCopiedSettings": "Публичный ключ скопирован", + "meshcorePublicKeySettingsLabel": "Публичный ключ", + "meshcoreRadioConfiguredOnFirmware": "Настройки радио задаются в прошивке устройства.", + "meshcoreRadioSettings": "Настройки радио", + "meshcoreRadioSettingsDialogTitle": "Настройки радио", + "meshcoreRadioSettingsNotAvailable": "Настройки радио недоступны", + "meshcoreRadioSettingsSubtitle": "Частота, мощность TX, полоса пропускания", + "meshcoreRadioSettingsTitle": "Настройки радио", + "meshcoreRadioSettingsTool": "Настройки радио", + "meshcoreRandomPskPrivate": "Случайный PSK (приватный)", + "meshcoreReboot": "Перезагрузить", + "meshcoreRebootCommandSent": "Команда перезагрузки отправлена", + "meshcoreRebootDevice": "Перезагрузить устройство", + "meshcoreRebootDeviceMessage": "Вы уверены, что хотите перезагрузить устройство MeshCore?", + "meshcoreRebootDeviceTitle": "Перезагрузить устройство", + "meshcoreRefresh": "Обновить", + "meshcoreRefreshButton": "Обновить", + "meshcoreRefreshContacts": "Обновить контакты", + "meshcoreRefreshContactsSetting": "Обновить контакты", + "meshcoreRefreshing": "Обновление...", + "meshcoreRefreshingContacts": "Обновление контактов...", + "meshcoreReloadContactsFromDevice": "Перезагрузить контакты с устройства", + "meshcoreRemove": "Удалить", + "meshcoreRemoveContact": "Удалить контакт", + "meshcoreRemoveContactMessage": "Вы уверены, что хотите удалить {contactName}?", + "meshcoreRemoveContactTitle": "Удалить контакт?", + "meshcoreRepeaterNode": "Узел-ретранслятор", + "meshcoreRestartMeshCoreDevice": "Перезапустить устройство MeshCore", + "meshcoreReverseMeasurementDirection": "Поменять направление измерения", + "meshcoreRoomNode": "Узел-комната", + "meshcoreSave": "Сохранить", + "meshcoreScanChannelQrSubtitle": "Сканировать QR-код канала", + "meshcoreScanChannelQrTitle": "Сканировать QR канала", + "meshcoreScanContactQrSubtitle": "Сканировать QR-код контакта", + "meshcoreScanContactQrTitle": "Сканировать QR контакта", + "meshcoreScanQrCode": "Сканировать QR-код", + "meshcoreScanQrToJoinChannel": "Сканируйте этот QR-код, чтобы вступить в канал", + "meshcoreScanToAddMeSubtitle": "Сканируйте этот код, чтобы добавить меня в контакты", + "meshcoreSearchContactsHint": "Поиск контактов...", + "meshcoreSelectContactToTrace": "Выберите контакт для трассировки маршрута через сеть.", + "meshcoreSelfInfoNotAvailable": "Информация о себе недоступна", + "meshcoreSendAdvertisement": "Отправить объявление", + "meshcoreSendAdvertisementTool": "Отправить объявление", + "meshcoreSendMessage": "Отправить сообщение", + "meshcoreSendMessageToStart": "Отправьте сообщение, чтобы начать переписку", + "meshcoreSending": "Отправка...", + "meshcoreSessionNotActive": "Сессия MeshCore не активна", + "meshcoreSetLocation": "Задать местоположение", + "meshcoreSetNodePosition": "Задать положение узла", + "meshcoreSettingsTitle": "Настройки", "meshcoreSfCrLabel": "SF/CR", - "meshcoreShare": "Share", - "meshcoreShareChannel": "Share Channel", - "meshcoreShareContact": "Share Contact", - "meshcoreShareContactCodeInfo": "Share your contact code so others can message you", - "meshcoreShellAddChannelHint": "Use the menu to create or join a channel", - "meshcoreShellAddContactHint": "Use the + button to add a contact", - "meshcoreShellAddContactSubtitle": "Scan QR or enter contact code", - "meshcoreShellAdvertisementSent": "Advertisement sent - listen for responses", - "meshcoreShellAdvertisementSentListening": "Advertisement sent - listening for responses", - "meshcoreShellAppSettings": "App Settings", - "meshcoreShellAppSettingsSubtitle": "Notifications, theme, preferences", - "meshcoreShellConnectedTo": "Connected to {deviceName}", + "meshcoreShare": "Поделиться", + "meshcoreShareChannel": "Поделиться каналом", + "meshcoreShareContact": "Поделиться контактом", + "meshcoreShareContactCodeInfo": "Поделитесь своим кодом контакта, чтобы другие могли написать вам", + "meshcoreShellAddChannelHint": "Используйте меню для создания или вступления в канал", + "meshcoreShellAddContactHint": "Используйте кнопку + для добавления контакта", + "meshcoreShellAddContactSubtitle": "Сканировать QR или ввести код контакта", + "meshcoreShellAdvertisementSent": "Объявление отправлено — ждите ответов", + "meshcoreShellAdvertisementSentListening": "Объявление отправлено — ожидание ответов", + "meshcoreShellAppSettings": "Настройки приложения", + "meshcoreShellAppSettingsSubtitle": "Уведомления, тема, параметры", + "meshcoreShellConnectedTo": "Подключено к {deviceName}", "meshcoreShellDefaultDeviceName": "MeshCore", - "meshcoreShellDefaultDeviceNameFull": "MeshCore Device", + "meshcoreShellDefaultDeviceNameFull": "Устройство MeshCore", "meshcoreShellDefaultInitials": "MC", - "meshcoreShellDeviceInfoNotAvailable": "Device info not available", - "meshcoreShellDeviceTooltip": "Device", - "meshcoreShellDisconnect": "Disconnect", - "meshcoreShellDisconnectConfirmMessage": "Are you sure you want to disconnect from this MeshCore device?", - "meshcoreShellDisconnectedFrom": "Disconnected from {deviceName}", - "meshcoreShellDisconnecting": "Disconnecting...", - "meshcoreShellDiscoverSubtitle": "Send advertisement to find nearby nodes", - "meshcoreShellDrawerAddChannel": "Add Channel", - "meshcoreShellDrawerAddContact": "Add Contact", - "meshcoreShellDrawerDisconnect": "Disconnect", - "meshcoreShellDrawerDiscoverContacts": "Discover Contacts", - "meshcoreShellDrawerMyContactCode": "My Contact Code", + "meshcoreShellDeviceInfoNotAvailable": "Информация об устройстве недоступна", + "meshcoreShellDeviceTooltip": "Устройство", + "meshcoreShellDisconnect": "Отключиться", + "meshcoreShellDisconnectConfirmMessage": "Вы уверены, что хотите отключиться от этого устройства MeshCore?", + "meshcoreShellDisconnectedFrom": "Отключено от {deviceName}", + "meshcoreShellDisconnecting": "Отключение...", + "meshcoreShellDiscoverSubtitle": "Отправить объявление для поиска ближайших узлов", + "meshcoreShellDrawerAddChannel": "Добавить канал", + "meshcoreShellDrawerAddContact": "Добавить контакт", + "meshcoreShellDrawerDisconnect": "Отключиться", + "meshcoreShellDrawerDiscoverContacts": "Найти контакты", + "meshcoreShellDrawerMyContactCode": "Мой код контакта", "meshcoreShellDrawerSectionHeader": "MESHCORE", - "meshcoreShellDrawerSettings": "Settings", - "meshcoreShellInfoNodeId": "Node ID", - "meshcoreShellInfoNodeName": "Node Name", - "meshcoreShellInfoProtocol": "Protocol", + "meshcoreShellDrawerSettings": "Настройки", + "meshcoreShellInfoNodeId": "ID узла", + "meshcoreShellInfoNodeName": "Имя узла", + "meshcoreShellInfoProtocol": "Протокол", "meshcoreShellInfoProtocolValue": "MeshCore", - "meshcoreShellInfoPublicKey": "Public Key", - "meshcoreShellInfoStatus": "Status", - "meshcoreShellJoinChannel": "Join Channel", - "meshcoreShellJoinChannelHint": "Use the menu to join a channel", - "meshcoreShellJoinChannelSubtitle": "Scan QR or enter channel code", - "meshcoreShellMenuTooltip": "Menu", - "meshcoreShellNavChannels": "Channels", - "meshcoreShellNavContacts": "Contacts", - "meshcoreShellNavMap": "Map", - "meshcoreShellNavTools": "Tools", - "meshcoreShellNoSavedDevice": "No saved device to reconnect to", - "meshcoreShellNotConnected": "Not connected", - "meshcoreShellReconnectButton": "Reconnect", - "meshcoreShellReconnectFailed": "Reconnect failed: {error}", - "meshcoreShellReconnecting": "Reconnecting to {deviceName}...", - "meshcoreShellScanToAddContact": "Scan to add as contact", - "meshcoreShellSectionConnection": "Connection", - "meshcoreShellSectionDeviceInfo": "Device Information", - "meshcoreShellSectionQuickActions": "Quick Actions", - "meshcoreShellShareContactInfo": "Share your contact code so others can message you", - "meshcoreShellShareContactSubtitle": "Share your contact info", - "meshcoreShellStatusConnected": "Connected", - "meshcoreShellStatusConnecting": "Connecting...", - "meshcoreShellStatusDisconnected": "Disconnected", - "meshcoreShellStatusOffline": "Offline", - "meshcoreShellStatusOnline": "Online", - "meshcoreShellUnknown": "Unknown", - "meshcoreShellUnnamedNode": "Unnamed Node", - "meshcoreSlotIndex": "Slot {index}", - "meshcoreSpreadingFactorLabel": "Spreading Factor", - "meshcoreStatusLabel": "Status", - "meshcoreSwapAB": "Swap A ↔ B", - "meshcoreSyncTime": "Sync Time", - "meshcoreSyncing": "Syncing...", - "meshcoreTapForPointA": "Tap node or map for point A", - "meshcoreTapForPointB": "Tap node or map for point B", - "meshcoreTimeAgoDays": "{count}d ago", - "meshcoreTimeAgoHours": "{count}h ago", - "meshcoreTimeAgoMinutes": "{count}m ago", - "meshcoreTimeSynchronized": "Time synchronized", - "meshcoreToolsTitle": "Tools", - "meshcoreTracePacketRoutes": "Trace packet routes through the mesh", - "meshcoreTracePath": "Trace Path", - "meshcoreTracePathInitiated": "Trace path to {name} initiated", - "meshcoreTracePathTitle": "Trace Path", - "meshcoreTxPowerLabel": "TX Power", - "meshcoreTxPowerStatusLabel": "TX Power", - "meshcoreTypeContactCode": "Type a contact code", - "meshcoreTypeLabel": "Type", - "meshcoreTypeMessageHint": "Type a message...", - "meshcoreUnknown": "Unknown", - "meshcoreUpdateDeviceClock": "Update device clock", - "meshcoreVersion": "Version {version}", - "meshcoreViewDeviceInfo": "View detailed device information", - "meshcoreViewFrameLogs": "View MeshCore frame logs", - "meshcoreViewLoRaConfig": "View LoRa radio configuration", - "messageContextMenuCopy": "Copy", - "messageContextMenuMessageCopied": "Message copied", - "messageContextMenuMessageDetails": "Message Details", - "messageContextMenuNoRecents": "No Recents", - "messageContextMenuReply": "Reply", - "messageContextMenuSearchEmoji": "Search emoji…", - "messageContextMenuStatusDelivered": "Delivered ✔️", - "messageContextMenuStatusFailed": "Failed: {error}", - "messageContextMenuStatusSending": "Sending…", - "messageContextMenuStatusSent": "Sent", - "messageContextMenuTapbackFailed": "Failed to send tapback", - "messageContextMenuTapbackSent": "Tapback sent", - "messagesAddChannelNotConnected": "Connect to a device to add channels", - "messagesChannelsTab": "Channels", - "messagesContactsTab": "Contacts", - "messagesContainerTitle": "Messages", - "messagesScanChannelNotConnected": "Connect to a device to scan channels", - "messagingAddChannel": "Add channel", - "messagingAdvancedResetNodeDatabase": "Advanced: Reset Node Database", - "messagingChannelSettings": "Channel Settings", - "messagingChannelSubtitle": "Channel", - "messagingClearSearch": "Clear search", - "messagingCloseSearch": "Close Search", - "messagingConfigureQuickResponses": "Configure quick responses in Settings", - "messagingContactsDiscoveredHint": "Discovered nodes will appear here", - "messagingContactsTitle": "Contacts", - "messagingContactsTitleWithCount": "Contacts ({count})", - "messagingDeleteMessageConfirmation": "Are you sure you want to delete this message? This only removes it locally.", - "messagingDeleteMessageTitle": "Delete Message", - "messagingDirectMessageSubtitle": "Direct Message", - "messagingEncryptionKeyIssueSubtitle": "Direct message to {name} failed", - "messagingEncryptionKeyIssueTitle": "Encryption Key Issue", - "messagingEncryptionKeyWarning": "The encryption keys may be out of sync. This can happen when a node has been reset or rolled out of the mesh database.", - "messagingFailedToSend": "Failed to send", - "messagingFilterActive": "Active", - "messagingFilterAll": "All", - "messagingFilterFavorites": "Favorites", - "messagingFilterMessaged": "Messaged", - "messagingFilterUnread": "Unread", - "messagingFindMessageHint": "Find a message", - "messagingHelp": "Help", - "messagingMessageDeleted": "Message deleted", - "messagingMessageHint": "Message", - "messagingSendTooltip": "Send (Ctrl/Cmd+Enter)", - "messagingMessageQueuedOffline": "Message queued - will send when connected", - "messagingNoContactsMatchSearch": "No contacts match \"{query}\"", - "messagingNoContactsYet": "No contacts yet", - "messagingNoFilteredContacts": "No {filter} contacts", - "messagingNoMessagesInChannel": "No messages in this channel", - "messagingNoMessagesMatchSearch": "No messages match your search", - "messagingNoQuickResponsesConfigured": "No quick responses configured.\nAdd some in Settings → Quick responses.", - "messagingOriginalMessage": "Original message", - "messagingQuickResponses": "Quick Responses", - "messagingReplyingTo": "Replying to {name}", - "messagingRequestUserInfo": "Request User Info", - "messagingRequestUserInfoFailed": "Failed to request info: {error}", - "messagingRequestUserInfoSuccess": "Requested fresh info from {name}", - "messagingRetryMessage": "Retry Message", - "messagingScanQrCode": "Scan QR code", - "messagingSearchContactsHint": "Search contacts", - "messagingSearchMessages": "Search Messages", - "messagingSectionActive": "Active", - "messagingSectionFavorites": "Favorites", - "messagingSectionInactive": "Inactive", - "messagingSectionUnread": "Unread", - "messagingSettings": "Settings", - "messagingSourceAutomation": "Automation", - "messagingSourceNotification": "Notification", - "messagingSourceShortcut": "Shortcut", - "messagingSourceTapback": "Tapback", - "messagingStartConversation": "Start the conversation", - "messagingUnknownNode": "Unknown Node", + "meshcoreShellInfoPublicKey": "Публичный ключ", + "meshcoreShellInfoStatus": "Статус", + "meshcoreShellJoinChannel": "Вступить в канал", + "meshcoreShellJoinChannelHint": "Используйте меню для вступления в канал", + "meshcoreShellJoinChannelSubtitle": "Сканировать QR или ввести код канала", + "meshcoreShellMenuTooltip": "Меню", + "meshcoreShellNavChannels": "Каналы", + "meshcoreShellNavContacts": "Контакты", + "meshcoreShellNavMap": "Карта", + "meshcoreShellNavTools": "Инструменты", + "meshcoreShellNoSavedDevice": "Нет сохранённого устройства для повторного подключения", + "meshcoreShellNotConnected": "Нет подключения", + "meshcoreShellReconnectButton": "Переподключиться", + "meshcoreShellReconnectFailed": "Переподключение не удалось: {error}", + "meshcoreShellReconnecting": "Переподключение к {deviceName}...", + "meshcoreShellScanToAddContact": "Сканировать для добавления в контакты", + "meshcoreShellSectionConnection": "Подключение", + "meshcoreShellSectionDeviceInfo": "Информация об устройстве", + "meshcoreShellSectionQuickActions": "Быстрые действия", + "meshcoreShellShareContactInfo": "Поделитесь своим кодом контакта, чтобы другие могли написать вам", + "meshcoreShellShareContactSubtitle": "Поделиться данными контакта", + "meshcoreShellStatusConnected": "Подключено", + "meshcoreShellStatusConnecting": "Подключение...", + "meshcoreShellStatusDisconnected": "Отключено", + "meshcoreShellStatusOffline": "Не в сети", + "meshcoreShellStatusOnline": "В сети", + "meshcoreShellUnknown": "Неизвестно", + "meshcoreShellUnnamedNode": "Безымянный узел", + "meshcoreSlotIndex": "Слот {index}", + "meshcoreSpreadingFactorLabel": "Коэффициент расширения", + "meshcoreStatusLabel": "Статус", + "meshcoreSwapAB": "Поменять A ↔ B", + "meshcoreSyncTime": "Синхронизировать время", + "meshcoreSyncing": "Синхронизация...", + "meshcoreTapForPointA": "Нажмите на узел или карту для точки A", + "meshcoreTapForPointB": "Нажмите на узел или карту для точки B", + "meshcoreTimeAgoDays": "{count}д назад", + "meshcoreTimeAgoHours": "{count}ч назад", + "meshcoreTimeAgoMinutes": "{count}м назад", + "meshcoreTimeSynchronized": "Время синхронизировано", + "meshcoreToolsTitle": "Инструменты", + "meshcoreTracePacketRoutes": "Трассировка маршрутов пакетов через сеть", + "meshcoreTracePath": "Трассировка маршрута", + "meshcoreTracePathInitiated": "Трассировка маршрута до {name} запущена", + "meshcoreTracePathTitle": "Трассировка маршрута", + "meshcoreTxPowerLabel": "Мощность TX", + "meshcoreTxPowerStatusLabel": "Мощность TX", + "meshcoreTypeContactCode": "Введите код контакта", + "meshcoreTypeLabel": "Тип", + "meshcoreTypeMessageHint": "Введите сообщение...", + "meshcoreUnknown": "Неизвестно", + "meshcoreUpdateDeviceClock": "Обновить часы устройства", + "meshcoreVersion": "Версия {version}", + "meshcoreViewDeviceInfo": "Просмотр подробной информации об устройстве", + "meshcoreViewFrameLogs": "Просмотр журнала кадров MeshCore", + "meshcoreViewLoRaConfig": "Просмотр конфигурации LoRa-радио", + "messageContextMenuCopy": "Копировать", + "messageContextMenuMessageCopied": "Сообщение скопировано", + "messageContextMenuMessageDetails": "Сведения о сообщении", + "messageContextMenuNoRecents": "Нет последних", + "messageContextMenuReply": "Ответить", + "messageContextMenuSearchEmoji": "Поиск эмодзи…", + "messageContextMenuStatusDelivered": "Доставлено ✔️", + "messageContextMenuStatusFailed": "Ошибка: {error}", + "messageContextMenuStatusSending": "Отправка…", + "messageContextMenuStatusSent": "Отправлено", + "messageContextMenuTapbackFailed": "Не удалось отправить реакцию", + "messageContextMenuTapbackSent": "Реакция отправлена", + "messagesAddChannelNotConnected": "Подключитесь к устройству, чтобы добавить каналы", + "messagesChannelsTab": "Каналы", + "messagesContactsTab": "Контакты", + "messagesContainerTitle": "Сообщения", + "messagesScanChannelNotConnected": "Подключитесь к устройству для сканирования каналов", + "messagingAddChannel": "Добавить канал", + "messagingAdvancedResetNodeDatabase": "Дополнительно: сбросить базу данных узлов", + "messagingChannelSettings": "Настройки канала", + "messagingChannelSubtitle": "Канал", + "messagingClearSearch": "Очистить поиск", + "messagingCloseSearch": "Закрыть поиск", + "messagingConfigureQuickResponses": "Настройте быстрые ответы в Настройках", + "messagingContactsDiscoveredHint": "Здесь появятся обнаруженные узлы", + "messagingContactsTitle": "Контакты", + "messagingContactsTitleWithCount": "Контакты ({count})", + "messagingDeleteMessageConfirmation": "Вы уверены, что хотите удалить это сообщение? Оно будет удалено только локально.", + "messagingDeleteMessageTitle": "Удалить сообщение", + "messagingDirectMessageSubtitle": "Личное сообщение", + "messagingEncryptionKeyIssueSubtitle": "Личное сообщение для {name} не доставлено", + "messagingEncryptionKeyIssueTitle": "Проблема с ключом шифрования", + "messagingEncryptionKeyWarning": "Ключи шифрования могут быть рассинхронизированы. Это может произойти, если узел был сброшен или исключён из базы данных сети.", + "messagingFailedToSend": "Не удалось отправить", + "messagingFilterActive": "Активные", + "messagingFilterAll": "Все", + "messagingFilterFavorites": "Избранные", + "messagingFilterMessaged": "С перепиской", + "messagingFilterUnread": "Непрочитанные", + "messagingFindMessageHint": "Найти сообщение", + "messagingHelp": "Справка", + "messagingMessageDeleted": "Сообщение удалено", + "messagingMessageHint": "Сообщение", + "messagingSendTooltip": "Отправить (Ctrl/Cmd+Enter)", + "messagingMessageQueuedOffline": "Сообщение в очереди — будет отправлено при подключении", + "messagingNoContactsMatchSearch": "Контакты по запросу «{query}» не найдены", + "messagingNoContactsYet": "Контактов пока нет", + "messagingNoFilteredContacts": "Нет контактов: {filter}", + "messagingNoMessagesInChannel": "В этом канале нет сообщений", + "messagingNoMessagesMatchSearch": "Сообщения по вашему запросу не найдены", + "messagingNoQuickResponsesConfigured": "Быстрые ответы не настроены.\nДобавьте их в Настройках → Быстрые ответы.", + "messagingOriginalMessage": "Исходное сообщение", + "messagingQuickResponses": "Быстрые ответы", + "messagingReplyingTo": "Ответ для {name}", + "messagingRequestUserInfo": "Запросить данные пользователя", + "messagingRequestUserInfoFailed": "Не удалось запросить данные: {error}", + "messagingRequestUserInfoSuccess": "Запрошены актуальные данные от {name}", + "messagingRetryMessage": "Повторить отправку", + "messagingScanQrCode": "Сканировать QR-код", + "messagingSearchContactsHint": "Поиск контактов", + "messagingSearchMessages": "Поиск сообщений", + "messagingSectionActive": "Активные", + "messagingSectionFavorites": "Избранные", + "messagingSectionInactive": "Неактивные", + "messagingSectionUnread": "Непрочитанные", + "messagingSettings": "Настройки", + "messagingSourceAutomation": "Автоматизация", + "messagingSourceNotification": "Уведомление", + "messagingSourceShortcut": "Ярлык", + "messagingSourceTapback": "Реакция", + "messagingStartConversation": "Начните разговор", + "messagingUnknownNode": "Неизвестный узел", "navigationActivity": "Активность", "navigationAether": "Aether", "navigationAutomations": "Автоматизации", @@ -2402,7 +2402,7 @@ "navigationRingtonePack": "Пакет рингтонов", "navigationRoutes": "Маршруты", "navigationSectionAccount": "АККАУНТ", - "navigationSectionMesh": "MESH", + "navigationSectionMesh": "СЕТЬ", "navigationSectionPremium": "ПРЕМИУМ", "navigationSectionSocial": "СОЦИАЛЬНОЕ", "navigationSignals": "Сигналы", @@ -2417,779 +2417,779 @@ "navigationViewProfile": "Просмотр профиля", "navigationWidgets": "Виджеты", "navigationWorldMap": "Карта мира", - "nodeAnalyticsAddFavoriteTooltip": "Add to favorites", - "nodeAnalyticsAddedToFavorites": "Added to favorites", - "nodeAnalyticsAirTimeTx": "Air Time TX", - "nodeAnalyticsAltitude": "{meters}m", - "nodeAnalyticsAltitudeRowLabel": "Altitude", - "nodeAnalyticsAvgBattery": "Avg Battery", - "nodeAnalyticsBadgeLive": "LIVE", - "nodeAnalyticsBattery": "Battery", - "nodeAnalyticsChannelUtilization": "Channel Utilization", - "nodeAnalyticsCharging": "Charging", - "nodeAnalyticsClear": "Clear", - "nodeAnalyticsClearConfirm": "Clear", - "nodeAnalyticsClearHistoryMessage": "This will delete all historical data for this node. This action cannot be undone.", - "nodeAnalyticsClearHistoryTitle": "Clear History", - "nodeAnalyticsCsvShared": "CSV data shared", - "nodeAnalyticsDataUpdated": "Node data updated", - "nodeAnalyticsDirectNeighbors": "Direct Neighbors ({count})", - "nodeAnalyticsExport": "Export", + "nodeAnalyticsAddFavoriteTooltip": "Добавить в избранное", + "nodeAnalyticsAddedToFavorites": "Добавлено в избранное", + "nodeAnalyticsAirTimeTx": "Время передачи TX", + "nodeAnalyticsAltitude": "{meters}м", + "nodeAnalyticsAltitudeRowLabel": "Высота", + "nodeAnalyticsAvgBattery": "Средний заряд", + "nodeAnalyticsBadgeLive": "ПРЯМО СЕЙЧАС", + "nodeAnalyticsBattery": "Аккумулятор", + "nodeAnalyticsChannelUtilization": "Утилизация канала", + "nodeAnalyticsCharging": "Зарядка", + "nodeAnalyticsClear": "Очистить", + "nodeAnalyticsClearConfirm": "Очистить", + "nodeAnalyticsClearHistoryMessage": "Это удалит все исторические данные для этого узла. Действие невозможно отменить.", + "nodeAnalyticsClearHistoryTitle": "Очистить историю", + "nodeAnalyticsCsvShared": "CSV-данные переданы", + "nodeAnalyticsDataUpdated": "Данные узла обновлены", + "nodeAnalyticsDirectNeighbors": "Прямые соседи ({count})", + "nodeAnalyticsExport": "Экспорт", "nodeAnalyticsExportCsv": "CSV", - "nodeAnalyticsExportCsvSubject": "Node {name} History (CSV)", - "nodeAnalyticsExportHistoryTitle": "Export History", + "nodeAnalyticsExportCsvSubject": "История узла {name} (CSV)", + "nodeAnalyticsExportHistoryTitle": "Экспорт истории", "nodeAnalyticsExportJson": "JSON", - "nodeAnalyticsExportJsonSubject": "Node {name} History (JSON)", - "nodeAnalyticsExportRecordCount": "{count} records", - "nodeAnalyticsFirstSeen": "First seen", - "nodeAnalyticsHardware": "Hardware", - "nodeAnalyticsHistoryCleared": "History cleared", - "nodeAnalyticsJsonShared": "JSON data shared", - "nodeAnalyticsLastUpdate": "Last update", - "nodeAnalyticsLatitude": "Latitude", - "nodeAnalyticsLiveWatchDisabled": "Live watching disabled", - "nodeAnalyticsLiveWatchEnabled": "Live watching enabled (updates every 30s)", - "nodeAnalyticsLongName": "Long Name", - "nodeAnalyticsLongitude": "Longitude", - "nodeAnalyticsNoGatewayData": "No gateway data available", - "nodeAnalyticsNoHistoryToExport": "No history data to export", - "nodeAnalyticsNoHistoryYet": "No historical data yet", - "nodeAnalyticsNoNeighborData": "No neighbor data available", - "nodeAnalyticsNodeIdCopied": "Node ID copied", - "nodeAnalyticsNodeNotFound": "Node not found in mesh", - "nodeAnalyticsRecords": "Records", - "nodeAnalyticsRefreshFailed": "Failed to refresh: {error}", - "nodeAnalyticsRefreshNow": "Refresh Now", - "nodeAnalyticsRefreshing": "Refreshing...", - "nodeAnalyticsRemoveFavoriteTooltip": "Remove from favorites", - "nodeAnalyticsRemovedFromFavorites": "Removed from favorites", - "nodeAnalyticsRole": "Role", - "nodeAnalyticsSectionDeviceInfo": "Device Info", - "nodeAnalyticsSectionDeviceMetrics": "Device Metrics", - "nodeAnalyticsSectionHistory": "History", - "nodeAnalyticsSectionNetwork": "Network", - "nodeAnalyticsSectionTrends": "Trends", - "nodeAnalyticsSeenByGateways": "Seen by Gateways ({count})", - "nodeAnalyticsShareDetailBatteryCharging": "Battery: Charging", - "nodeAnalyticsShareDetailBatteryLevel": "Battery: {level}%", - "nodeAnalyticsShareDetailGateways": "Gateways: {count}", - "nodeAnalyticsShareDetailHardware": "Hardware: {hardware}", - "nodeAnalyticsShareDetailHeader": "🛰️ Mesh Node: {name}", + "nodeAnalyticsExportJsonSubject": "История узла {name} (JSON)", + "nodeAnalyticsExportRecordCount": "{count} записей", + "nodeAnalyticsFirstSeen": "Впервые замечен", + "nodeAnalyticsHardware": "Оборудование", + "nodeAnalyticsHistoryCleared": "История очищена", + "nodeAnalyticsJsonShared": "JSON-данные переданы", + "nodeAnalyticsLastUpdate": "Последнее обновление", + "nodeAnalyticsLatitude": "Широта", + "nodeAnalyticsLiveWatchDisabled": "Слежение в реальном времени отключено", + "nodeAnalyticsLiveWatchEnabled": "Слежение в реальном времени включено (обновление каждые 30с)", + "nodeAnalyticsLongName": "Полное имя", + "nodeAnalyticsLongitude": "Долгота", + "nodeAnalyticsNoGatewayData": "Нет данных шлюза", + "nodeAnalyticsNoHistoryToExport": "Нет данных истории для экспорта", + "nodeAnalyticsNoHistoryYet": "Исторических данных пока нет", + "nodeAnalyticsNoNeighborData": "Нет данных о соседях", + "nodeAnalyticsNodeIdCopied": "ID узла скопирован", + "nodeAnalyticsNodeNotFound": "Узел не найден в сети", + "nodeAnalyticsRecords": "Записи", + "nodeAnalyticsRefreshFailed": "Ошибка обновления: {error}", + "nodeAnalyticsRefreshNow": "Обновить сейчас", + "nodeAnalyticsRefreshing": "Обновление...", + "nodeAnalyticsRemoveFavoriteTooltip": "Удалить из избранного", + "nodeAnalyticsRemovedFromFavorites": "Удалено из избранного", + "nodeAnalyticsRole": "Роль", + "nodeAnalyticsSectionDeviceInfo": "Информация об устройстве", + "nodeAnalyticsSectionDeviceMetrics": "Метрики устройства", + "nodeAnalyticsSectionHistory": "История", + "nodeAnalyticsSectionNetwork": "Сеть", + "nodeAnalyticsSectionTrends": "Тенденции", + "nodeAnalyticsSeenByGateways": "Замечен шлюзами ({count})", + "nodeAnalyticsShareDetailBatteryCharging": "Аккумулятор: Зарядка", + "nodeAnalyticsShareDetailBatteryLevel": "Аккумулятор: {level}%", + "nodeAnalyticsShareDetailGateways": "Шлюзы: {count}", + "nodeAnalyticsShareDetailHardware": "Оборудование: {hardware}", + "nodeAnalyticsShareDetailHeader": "🛰️ Узел Mesh: {name}", "nodeAnalyticsShareDetailId": "ID: !{nodeId}", - "nodeAnalyticsShareDetailLocation": "Location: {location}", - "nodeAnalyticsShareDetailNeighbors": "Neighbors: {count}", - "nodeAnalyticsShareDetailRole": "Role: {role}", - "nodeAnalyticsShareDetailStatus": "Status: {status}", - "nodeAnalyticsShareDetails": "Share Details", - "nodeAnalyticsShareDetailsSubtitle": "Full technical info as text", - "nodeAnalyticsShareFailed": "Failed to share node: {error}", - "nodeAnalyticsShareLink": "Share Link", - "nodeAnalyticsShareLinkSubtitle": "Rich preview in iMessage, Slack, etc.", - "nodeAnalyticsShareNodeTitle": "Share Node", - "nodeAnalyticsShareSubject": "Mesh Node: {name}", - "nodeAnalyticsShareText": "Check out {name} on Socialmesh!\n{url}", - "nodeAnalyticsShareTooltip": "Share node info", - "nodeAnalyticsShortName": "Short Name", - "nodeAnalyticsShowOnMap": "Show on Map", - "nodeAnalyticsSignIn": "Sign In", - "nodeAnalyticsSignInToShare": "Sign in to share nodes", - "nodeAnalyticsStopWatching": "Stop watching", - "nodeAnalyticsTimeDaysAgo": "{days}d ago", - "nodeAnalyticsTimeHoursAgo": "{hours}h ago", - "nodeAnalyticsTimeJustNow": "Just now", - "nodeAnalyticsTimeMinutesAgo": "{minutes}m ago", - "nodeAnalyticsUnknown": "Unknown", - "nodeAnalyticsUptime": "Uptime", - "nodeAnalyticsUptimeStat": "Uptime", - "nodeAnalyticsVisitAgain": "Visit this node again to build history", - "nodeAnalyticsVoltage": "Voltage", - "nodeAnalyticsWatchLive": "Watch live", - "nodeComparisonCharging": "Charging", - "nodeComparisonNo": "No", + "nodeAnalyticsShareDetailLocation": "Местоположение: {location}", + "nodeAnalyticsShareDetailNeighbors": "Соседи: {count}", + "nodeAnalyticsShareDetailRole": "Роль: {role}", + "nodeAnalyticsShareDetailStatus": "Статус: {status}", + "nodeAnalyticsShareDetails": "Поделиться подробностями", + "nodeAnalyticsShareDetailsSubtitle": "Полная техническая информация в виде текста", + "nodeAnalyticsShareFailed": "Ошибка при передаче узла: {error}", + "nodeAnalyticsShareLink": "Поделиться ссылкой", + "nodeAnalyticsShareLinkSubtitle": "Красивый предпросмотр в iMessage, Slack и др.", + "nodeAnalyticsShareNodeTitle": "Поделиться узлом", + "nodeAnalyticsShareSubject": "Узел Mesh: {name}", + "nodeAnalyticsShareText": "Посмотрите на {name} в Socialmesh!\n{url}", + "nodeAnalyticsShareTooltip": "Поделиться информацией об узле", + "nodeAnalyticsShortName": "Краткое имя", + "nodeAnalyticsShowOnMap": "Показать на карте", + "nodeAnalyticsSignIn": "Войти", + "nodeAnalyticsSignInToShare": "Войдите, чтобы делиться узлами", + "nodeAnalyticsStopWatching": "Остановить слежение", + "nodeAnalyticsTimeDaysAgo": "{days}д назад", + "nodeAnalyticsTimeHoursAgo": "{hours}ч назад", + "nodeAnalyticsTimeJustNow": "Только что", + "nodeAnalyticsTimeMinutesAgo": "{minutes}мин назад", + "nodeAnalyticsUnknown": "Неизвестно", + "nodeAnalyticsUptime": "Время работы", + "nodeAnalyticsUptimeStat": "Время работы", + "nodeAnalyticsVisitAgain": "Посетите этот узел ещё раз, чтобы накопить историю", + "nodeAnalyticsVoltage": "Напряжение", + "nodeAnalyticsWatchLive": "Следить в реальном времени", + "nodeComparisonCharging": "Зарядка", + "nodeComparisonNo": "Нет", "nodeComparisonNoData": "--", - "nodeComparisonNodeIdCopied": "Node ID copied", - "nodeComparisonRowAirTimeTx": "Air Time TX", - "nodeComparisonRowBattery": "Battery", - "nodeComparisonRowChannelUtil": "Channel Util", - "nodeComparisonRowFirmware": "Firmware", - "nodeComparisonRowGateways": "Gateways", - "nodeComparisonRowHardware": "Hardware", - "nodeComparisonRowHasLocation": "Has Location", - "nodeComparisonRowNeighbors": "Neighbors", - "nodeComparisonRowRegion": "Region", - "nodeComparisonRowRole": "Role", - "nodeComparisonRowStatus": "Status", - "nodeComparisonRowUptime": "Uptime", - "nodeComparisonRowVoltage": "Voltage", - "nodeComparisonSectionDeviceInfo": "Device Info", - "nodeComparisonSectionMetrics": "Metrics", - "nodeComparisonSectionNetwork": "Network", - "nodeComparisonSectionStatus": "Status", - "nodeComparisonTitle": "Compare Nodes", - "nodeComparisonUnknown": "Unknown", + "nodeComparisonNodeIdCopied": "ID узла скопирован", + "nodeComparisonRowAirTimeTx": "Время передачи TX", + "nodeComparisonRowBattery": "Аккумулятор", + "nodeComparisonRowChannelUtil": "Утилизация канала", + "nodeComparisonRowFirmware": "Прошивка", + "nodeComparisonRowGateways": "Шлюзы", + "nodeComparisonRowHardware": "Оборудование", + "nodeComparisonRowHasLocation": "Есть местоположение", + "nodeComparisonRowNeighbors": "Соседи", + "nodeComparisonRowRegion": "Регион", + "nodeComparisonRowRole": "Роль", + "nodeComparisonRowStatus": "Статус", + "nodeComparisonRowUptime": "Время работы", + "nodeComparisonRowVoltage": "Напряжение", + "nodeComparisonSectionDeviceInfo": "Информация об устройстве", + "nodeComparisonSectionMetrics": "Метрики", + "nodeComparisonSectionNetwork": "Сеть", + "nodeComparisonSectionStatus": "Статус", + "nodeComparisonTitle": "Сравнение узлов", + "nodeComparisonUnknown": "Неизвестно", "nodeComparisonVs": "VS", - "nodeComparisonYes": "Yes", - "nodeDetailAddToFavoritesTooltip": "Add to favorites", - "nodeDetailAddedToFavorites": "{name} added to favorites", - "nodeDetailAppBarTitle": "Node Details", - "nodeDetailBatteryCharging": "Charging", + "nodeComparisonYes": "Да", + "nodeDetailAddToFavoritesTooltip": "Добавить в избранное", + "nodeDetailAddedToFavorites": "{name} добавлен в избранное", + "nodeDetailAppBarTitle": "Сведения об узле", + "nodeDetailBatteryCharging": "Зарядка", "nodeDetailBatteryPercent": "{level}%", - "nodeDetailDistanceKilometers": "{km} km", - "nodeDetailDistanceMeters": "{meters} m", - "nodeDetailFavoriteBadge": "Favorite", - "nodeDetailFavoriteError": "Failed to update favorite: {error}", - "nodeDetailFixedPositionError": "Failed to set fixed position: {error}", - "nodeDetailFixedPositionSet": "Fixed position set to {name}'s location", - "nodeDetailLabelAirUtilTx": "Air Util TX", - "nodeDetailLabelAltitude": "Altitude", - "nodeDetailLabelBadPackets": "Bad Packets", - "nodeDetailLabelBattery": "Battery", - "nodeDetailLabelCacheHits": "Cache Hits", - "nodeDetailLabelChannelUtil": "Channel Util", - "nodeDetailLabelDistance": "Distance", - "nodeDetailLabelEncryption": "Encryption", - "nodeDetailLabelFirmware": "Firmware", - "nodeDetailLabelHardware": "Hardware", - "nodeDetailLabelHopExhausted": "Hop Exhausted", - "nodeDetailLabelHopsPreserved": "Hops Preserved", - "nodeDetailLabelInspected": "Inspected", - "nodeDetailLabelNoiseFloor": "Noise Floor", - "nodeDetailLabelOnlineNodes": "Online Nodes", - "nodeDetailLabelPacketsRx": "Packets RX", - "nodeDetailLabelPacketsTx": "Packets TX", - "nodeDetailLabelPosition": "Position", - "nodeDetailLabelPositionDedup": "Position Dedup", - "nodeDetailLabelRateLimitDrops": "Rate Limit Drops", + "nodeDetailDistanceKilometers": "{km} км", + "nodeDetailDistanceMeters": "{meters} м", + "nodeDetailFavoriteBadge": "Избранное", + "nodeDetailFavoriteError": "Ошибка обновления избранного: {error}", + "nodeDetailFixedPositionError": "Ошибка установки фиксированной позиции: {error}", + "nodeDetailFixedPositionSet": "Фиксированная позиция установлена по местоположению {name}", + "nodeDetailLabelAirUtilTx": "Утилизация TX", + "nodeDetailLabelAltitude": "Высота", + "nodeDetailLabelBadPackets": "Плохие пакеты", + "nodeDetailLabelBattery": "Аккумулятор", + "nodeDetailLabelCacheHits": "Попадания в кэш", + "nodeDetailLabelChannelUtil": "Утилизация канала", + "nodeDetailLabelDistance": "Расстояние", + "nodeDetailLabelEncryption": "Шифрование", + "nodeDetailLabelFirmware": "Прошивка", + "nodeDetailLabelHardware": "Оборудование", + "nodeDetailLabelHopExhausted": "Хопы исчерпаны", + "nodeDetailLabelHopsPreserved": "Хопы сохранены", + "nodeDetailLabelInspected": "Проверено", + "nodeDetailLabelNoiseFloor": "Уровень шума", + "nodeDetailLabelOnlineNodes": "Узлы онлайн", + "nodeDetailLabelPacketsRx": "Пакеты RX", + "nodeDetailLabelPacketsTx": "Пакеты TX", + "nodeDetailLabelPosition": "Позиция", + "nodeDetailLabelPositionDedup": "Дедупликация позиции", + "nodeDetailLabelRateLimitDrops": "Сброс по лимиту скорости", "nodeDetailLabelRssi": "RSSI", "nodeDetailLabelSnr": "SNR", - "nodeDetailLabelStatus": "Status", - "nodeDetailLabelTotalNodes": "Total Nodes", - "nodeDetailLabelTxDropped": "TX Dropped", - "nodeDetailLabelUnknownDrops": "Unknown Drops", - "nodeDetailLabelUptime": "Uptime", - "nodeDetailLabelUserId": "User ID", - "nodeDetailLabelVoltage": "Voltage", - "nodeDetailLastHeardDaysAgo": "{days}d ago", - "nodeDetailLastHeardHoursAgo": "{hours}h ago", - "nodeDetailLastHeardJustNow": "Just now", - "nodeDetailLastHeardMinutesAgo": "{minutes}m ago", - "nodeDetailLastHeardNever": "Never", - "nodeDetailLastHeardTimestamp": "Last heard {timestamp}", - "nodeDetailMenuAdminSettings": "Admin Settings", - "nodeDetailMenuAdminSubtitle": "Configure this node remotely", - "nodeDetailMenuExchangePositions": "Exchange Positions", - "nodeDetailMenuQrCode": "QR Code", - "nodeDetailMenuRemoveNode": "Remove Node", - "nodeDetailMenuRequestUserInfo": "Request User Info", - "nodeDetailMenuSetFixedPosition": "Set as Fixed Position", - "nodeDetailMenuShowOnMap": "Show on Map", - "nodeDetailMenuTracerouteHistory": "Traceroute History", - "nodeDetailMessageButton": "Message", - "nodeDetailMuteError": "Failed to update mute status: {error}", - "nodeDetailMuteNotConnected": "Cannot change mute status: Device not connected", - "nodeDetailMuteTooltip": "Mute node", - "nodeDetailMuted": "{name} muted", - "nodeDetailMutedBadge": "Muted", - "nodeDetailNoPkiBadge": "No PKI", - "nodeDetailNoPositionData": "Node has no position data", + "nodeDetailLabelStatus": "Статус", + "nodeDetailLabelTotalNodes": "Всего узлов", + "nodeDetailLabelTxDropped": "TX сброшено", + "nodeDetailLabelUnknownDrops": "Неизвестные сбросы", + "nodeDetailLabelUptime": "Время работы", + "nodeDetailLabelUserId": "ID пользователя", + "nodeDetailLabelVoltage": "Напряжение", + "nodeDetailLastHeardDaysAgo": "{days}д назад", + "nodeDetailLastHeardHoursAgo": "{hours}ч назад", + "nodeDetailLastHeardJustNow": "Только что", + "nodeDetailLastHeardMinutesAgo": "{minutes}мин назад", + "nodeDetailLastHeardNever": "Никогда", + "nodeDetailLastHeardTimestamp": "Последний сигнал {timestamp}", + "nodeDetailMenuAdminSettings": "Настройки администратора", + "nodeDetailMenuAdminSubtitle": "Настроить этот узел удалённо", + "nodeDetailMenuExchangePositions": "Обменяться позициями", + "nodeDetailMenuQrCode": "QR-код", + "nodeDetailMenuRemoveNode": "Удалить узел", + "nodeDetailMenuRequestUserInfo": "Запросить информацию о пользователе", + "nodeDetailMenuSetFixedPosition": "Установить фиксированную позицию", + "nodeDetailMenuShowOnMap": "Показать на карте", + "nodeDetailMenuTracerouteHistory": "История traceroute", + "nodeDetailMessageButton": "Сообщение", + "nodeDetailMuteError": "Ошибка изменения статуса отключения звука: {error}", + "nodeDetailMuteNotConnected": "Невозможно изменить статус отключения звука: устройство не подключено", + "nodeDetailMuteTooltip": "Отключить звук узла", + "nodeDetailMuted": "{name} отключён", + "nodeDetailMutedBadge": "Без звука", + "nodeDetailNoPkiBadge": "Нет PKI", + "nodeDetailNoPositionData": "У узла нет данных о позиции", "nodeDetailPkiBadge": "PKI", - "nodeDetailPositionError": "Failed to request position: {error}", - "nodeDetailPositionRequested": "Position requested from {name}", - "nodeDetailQrInfoText": "Node ID: {nodeId}", - "nodeDetailQrSubtitle": "Scan to add this node", - "nodeDetailRebootButton": "Reboot", - "nodeDetailRebootConfirm": "Reboot", - "nodeDetailRebootError": "Failed to reboot: {error}", - "nodeDetailRebootMessage": "This will reboot your Meshtastic device. The app will automatically reconnect once the device restarts.", - "nodeDetailRebootNotConnected": "Cannot reboot: Device not connected", - "nodeDetailRebootTitle": "Reboot Device", - "nodeDetailRebootingSnackbar": "Device is rebooting...", - "nodeDetailRemoveConfirm": "Remove", - "nodeDetailRemoveError": "Failed to remove node: {error}", - "nodeDetailRemoveFromFavoritesTooltip": "Remove from favorites", - "nodeDetailRemoveMessage": "Remove {name} from the node database? This will remove the node from your local device.", - "nodeDetailRemoveTitle": "Remove Node", - "nodeDetailRemovedFromFavorites": "{name} removed from favorites", - "nodeDetailRemovedSnackbar": "{name} removed", - "nodeDetailSectionDeviceMetrics": "Device Metrics", - "nodeDetailSectionIdentity": "Identity", - "nodeDetailSectionNetwork": "Network", - "nodeDetailSectionRadio": "Radio", - "nodeDetailSectionTraffic": "Traffic Management", - "nodeDetailShutdownButton": "Shutdown", - "nodeDetailShutdownConfirm": "Shutdown", - "nodeDetailShutdownError": "Failed to shutdown: {error}", - "nodeDetailShutdownMessage": "This will turn off your Meshtastic device. You will need to physically power it back on to reconnect.", - "nodeDetailShutdownNotConnected": "Cannot shutdown: Device not connected", - "nodeDetailShutdownTitle": "Shutdown Device", - "nodeDetailShuttingDownSnackbar": "Device is shutting down...", - "nodeDetailSigilCardTooltip": "Sigil Card", - "nodeDetailSignalExcellent": "Excellent", - "nodeDetailSignalFair": "Fair", - "nodeDetailSignalGood": "Good", - "nodeDetailSignalUnknown": "Unknown", - "nodeDetailSignalVeryWeak": "Very Weak", - "nodeDetailSignalWeak": "Weak", - "nodeDetailTracerouteCooldownTooltip": "Traceroute cooldown: {seconds}s", - "nodeDetailTracerouteError": "Failed to send traceroute: {error}", - "nodeDetailTracerouteNotConnected": "Cannot send traceroute: Device not connected", - "nodeDetailTracerouteSent": "Traceroute sent to {name} — check Traceroute History for results", + "nodeDetailPositionError": "Ошибка запроса позиции: {error}", + "nodeDetailPositionRequested": "Позиция запрошена от {name}", + "nodeDetailQrInfoText": "ID узла: {nodeId}", + "nodeDetailQrSubtitle": "Отсканируйте, чтобы добавить этот узел", + "nodeDetailRebootButton": "Перезагрузить", + "nodeDetailRebootConfirm": "Перезагрузить", + "nodeDetailRebootError": "Ошибка перезагрузки: {error}", + "nodeDetailRebootMessage": "Будет выполнена перезагрузка устройства Meshtastic. Приложение автоматически переподключится после перезапуска устройства.", + "nodeDetailRebootNotConnected": "Невозможно перезагрузить: устройство не подключено", + "nodeDetailRebootTitle": "Перезагрузка устройства", + "nodeDetailRebootingSnackbar": "Устройство перезагружается...", + "nodeDetailRemoveConfirm": "Удалить", + "nodeDetailRemoveError": "Ошибка удаления узла: {error}", + "nodeDetailRemoveFromFavoritesTooltip": "Удалить из избранного", + "nodeDetailRemoveMessage": "Удалить {name} из базы данных узлов? Узел будет удалён с вашего локального устройства.", + "nodeDetailRemoveTitle": "Удалить узел", + "nodeDetailRemovedFromFavorites": "{name} удалён из избранного", + "nodeDetailRemovedSnackbar": "{name} удалён", + "nodeDetailSectionDeviceMetrics": "Метрики устройства", + "nodeDetailSectionIdentity": "Идентификация", + "nodeDetailSectionNetwork": "Сеть", + "nodeDetailSectionRadio": "Радио", + "nodeDetailSectionTraffic": "Управление трафиком", + "nodeDetailShutdownButton": "Выключить", + "nodeDetailShutdownConfirm": "Выключить", + "nodeDetailShutdownError": "Ошибка выключения: {error}", + "nodeDetailShutdownMessage": "Устройство Meshtastic будет выключено. Для повторного подключения потребуется физически включить его.", + "nodeDetailShutdownNotConnected": "Невозможно выключить: устройство не подключено", + "nodeDetailShutdownTitle": "Выключение устройства", + "nodeDetailShuttingDownSnackbar": "Устройство выключается...", + "nodeDetailSigilCardTooltip": "Карточка Sigil", + "nodeDetailSignalExcellent": "Отличный", + "nodeDetailSignalFair": "Удовлетворительный", + "nodeDetailSignalGood": "Хороший", + "nodeDetailSignalUnknown": "Неизвестно", + "nodeDetailSignalVeryWeak": "Очень слабый", + "nodeDetailSignalWeak": "Слабый", + "nodeDetailTracerouteCooldownTooltip": "Ожидание traceroute: {seconds}с", + "nodeDetailTracerouteError": "Ошибка отправки traceroute: {error}", + "nodeDetailTracerouteNotConnected": "Невозможно отправить traceroute: устройство не подключено", + "nodeDetailTracerouteSent": "Traceroute отправлен на {name} — проверьте историю traceroute для результатов", "nodeDetailTracerouteTooltip": "Traceroute", - "nodeDetailUnmuteTooltip": "Unmute node", - "nodeDetailUnmuted": "{name} unmuted", - "nodeDetailUserInfoError": "Failed to request user info: {error}", - "nodeDetailUserInfoRequested": "User info requested from {name}", - "nodeDetailValueAltitude": "{altitude} m", - "nodeDetailValueNoPublicKey": "No Public Key", + "nodeDetailUnmuteTooltip": "Включить звук узла", + "nodeDetailUnmuted": "{name} включён", + "nodeDetailUserInfoError": "Ошибка запроса информации о пользователе: {error}", + "nodeDetailUserInfoRequested": "Информация о пользователе запрошена от {name}", + "nodeDetailValueAltitude": "{altitude} м", + "nodeDetailValueNoPublicKey": "Нет открытого ключа", "nodeDetailValueNoiseFloor": "{noiseFloor} dBm", "nodeDetailValuePercent": "{value}%", - "nodeDetailValuePkiEnabled": "PKI Enabled", + "nodeDetailValuePkiEnabled": "PKI включён", "nodeDetailValueRssi": "{rssi} dBm", "nodeDetailValueSnr": "{snr} dB", - "nodeDetailValueVoltage": "{voltage} V", - "nodeDetailYouBadge": "YOU", - "nodeHistoryDataPointCount": "{current}/{required} data points", - "nodeHistoryMetricBattery": "Battery", - "nodeHistoryMetricChannelUtil": "Channel Util", - "nodeHistoryMetricConnectivity": "Connectivity", - "nodeHistoryNeedMoreData": "Need more data for charts", - "nodeHistoryNoMetricData": "No {metric} data", - "nodeIntelligenceActivityActive": "Active", - "nodeIntelligenceActivityCold": "Cold", - "nodeIntelligenceActivityHot": "Hot", - "nodeIntelligenceActivityQuiet": "Quiet", - "nodeIntelligenceChannelUtil": "Channel Utilization", - "nodeIntelligenceConnectivity": "Connectivity", - "nodeIntelligenceDerivedBadge": "DERIVED", - "nodeIntelligenceGatewayCount": "{count} gateways", - "nodeIntelligenceHealth": "Health", - "nodeIntelligenceMobilityElevated": "Elevated", - "nodeIntelligenceMobilityInfra": "Infrastructure", - "nodeIntelligenceMobilityMobile": "Mobile", - "nodeIntelligenceMobilityStationary": "Stationary", - "nodeIntelligenceMobilityTracker": "Tracker", - "nodeIntelligenceNeighborCount": "{count} neighbors", - "nodeIntelligenceTapHint": "Tap for deep analytics", - "nodeIntelligenceTitle": "Mesh Insights", - "nodeIntelligenceUnknown": "Unknown", - "nodedexActiveDaysOf14": "{count}/14 days", - "nodedexActiveNow": "active now", - "nodedexActivityTimelineTitle": "Activity Timeline", - "nodedexAddToAppleWallet": "Add to Apple Wallet", - "nodedexAdditionalTraits": "Additional Traits", - "nodedexAgeDiscoveredDaysAgo": "discovered {days}d ago", - "nodedexAgeDiscoveredMonthsAgo": "discovered {months}mo ago", - "nodedexAgeDiscoveredWeeksAgo": "discovered {weeks}w ago", - "nodedexAgeDiscoveredYearsAgo": "discovered {years}y ago", - "nodedexAgeDiscoveredYesterday": "discovered yesterday", - "nodedexAgeNewToday": "new today", + "nodeDetailValueVoltage": "{voltage} В", + "nodeDetailYouBadge": "ВЫ", + "nodeHistoryDataPointCount": "{current}/{required} точек данных", + "nodeHistoryMetricBattery": "Аккумулятор", + "nodeHistoryMetricChannelUtil": "Утилизация канала", + "nodeHistoryMetricConnectivity": "Подключение", + "nodeHistoryNeedMoreData": "Недостаточно данных для графиков", + "nodeHistoryNoMetricData": "Нет данных {metric}", + "nodeIntelligenceActivityActive": "Активный", + "nodeIntelligenceActivityCold": "Холодный", + "nodeIntelligenceActivityHot": "Горячий", + "nodeIntelligenceActivityQuiet": "Тихий", + "nodeIntelligenceChannelUtil": "Утилизация канала", + "nodeIntelligenceConnectivity": "Подключение", + "nodeIntelligenceDerivedBadge": "РАСЧЁТНЫЙ", + "nodeIntelligenceGatewayCount": "{count, plural, =1{1 шлюз} few{{count} шлюза} many{{count} шлюзов} other{{count} шлюза}}", + "nodeIntelligenceHealth": "Состояние", + "nodeIntelligenceMobilityElevated": "Повышенная", + "nodeIntelligenceMobilityInfra": "Инфраструктура", + "nodeIntelligenceMobilityMobile": "Мобильный", + "nodeIntelligenceMobilityStationary": "Стационарный", + "nodeIntelligenceMobilityTracker": "Трекер", + "nodeIntelligenceNeighborCount": "{count, plural, =1{1 сосед} few{{count} соседа} many{{count} соседей} other{{count} соседа}}", + "nodeIntelligenceTapHint": "Нажмите для детальной аналитики", + "nodeIntelligenceTitle": "Аналитика Mesh", + "nodeIntelligenceUnknown": "Неизвестно", + "nodedexActiveDaysOf14": "{count}/14 дней", + "nodedexActiveNow": "активен сейчас", + "nodedexActivityTimelineTitle": "Хронология активности", + "nodedexAddToAppleWallet": "Добавить в Apple Wallet", + "nodedexAdditionalTraits": "Дополнительные характеристики", + "nodedexAgeDiscoveredDaysAgo": "обнаружен {days} д. назад", + "nodedexAgeDiscoveredMonthsAgo": "обнаружен {months} мес. назад", + "nodedexAgeDiscoveredWeeksAgo": "обнаружен {weeks} нед. назад", + "nodedexAgeDiscoveredYearsAgo": "обнаружен {years} л. назад", + "nodedexAgeDiscoveredYesterday": "обнаружен вчера", + "nodedexAgeNewToday": "новый сегодня", "nodedexAirUtilTxLabel": "Air Util TX", - "nodedexBatteryLabel": "Battery", - "nodedexBestRssi": "Best RSSI", - "nodedexBestSnr": "Best SNR", - "nodedexBestSnrStatLabel": "Best SNR", - "nodedexBusiestDay": "Busiest {day}", + "nodedexBatteryLabel": "Батарея", + "nodedexBestRssi": "Лучший RSSI", + "nodedexBestSnr": "Лучший SNR", + "nodedexBestSnrStatLabel": "Лучший SNR", + "nodedexBusiestDay": "Самый активный: {day}", "nodedexCardBrandSocialmesh": "SOCIALMESH", - "nodedexCardDeviceFirmware": "FIRMWARE", - "nodedexCardDeviceHardware": "HARDWARE", - "nodedexCardDeviceRole": "ROLE", - "nodedexCardRarity100plus": "100+ encounters", - "nodedexCardRarity20to49": "20 - 49 encounters", - "nodedexCardRarity50to99": "50 - 99 encounters", - "nodedexCardRarity5to19": "5 - 19 encounters", - "nodedexCardRarityEpic": "EPIC", - "nodedexCardRarityInfoDescription": "A card's rarity reflects how often you've encountered this node on the mesh. The more you cross paths, the rarer the card becomes.", - "nodedexCardRarityInfoTitle": "Card Rarity", - "nodedexCardRarityLegendary": "LEGENDARY", - "nodedexCardRarityRare": "RARE", - "nodedexCardRarityStandard": "STANDARD", - "nodedexCardRarityUncommon": "UNCOMMON", - "nodedexCardRarityUnder5": "Under 5 encounters", - "nodedexChannelUtilLabel": "Channel Util", - "nodedexClassificationChange": "Change", - "nodedexClassificationClassify": "Classify", - "nodedexClassificationLabel": "CLASSIFICATION", - "nodedexClassificationTitle": "Classification", - "nodedexClassifyNodeDescription": "Assign a personal classification to this node. This is only visible to you.", - "nodedexClassifyNodeTitle": "Classify Node", - "nodedexClearFilter": "Clear", - "nodedexCloseGallerySemanticLabel": "Close gallery", - "nodedexCoSeenCompactLabel": "Co-seen", - "nodedexCoSeenDescription": "Nodes frequently seen in the same session", - "nodedexCoSeenLinksTitle": "Co-Seen Links", - "nodedexCoSeenRelationshipDetails": "Co-seen relationship details", - "nodedexCollectedCount": "{count} collected", - "nodedexConfidenceLabel": "Confidence", - "nodedexConfidenceTooltip": "Confidence: {percentage}%", - "nodedexConstellationCloseSearch": "Close search", - "nodedexConstellationEmptySubtitle": "Discover more nodes to see how they connect.\nNodes seen together form constellation links.", - "nodedexConstellationEmptyTitle": "No Constellation Yet", - "nodedexConstellationLinkCount": "{count} links", - "nodedexConstellationLinkTitle": "Constellation Link", - "nodedexConstellationNodeCount": "{count} nodes", - "nodedexConstellationProfile": "Profile", - "nodedexConstellationSearchHint": "Search by name or node ID…", - "nodedexConstellationSearchNodes": "Search nodes", - "nodedexConstellationTitle": "Constellation", - "nodedexDayFri": "Fri", - "nodedexDayFriday": "Friday", - "nodedexDayMon": "Mon", - "nodedexDayMonday": "Monday", - "nodedexDaySat": "Sat", - "nodedexDaySaturday": "Saturday", - "nodedexDaySun": "Sun", - "nodedexDaySunday": "Sunday", - "nodedexDayThu": "Thu", - "nodedexDayThursday": "Thursday", - "nodedexDayTue": "Tue", - "nodedexDayTuesday": "Tuesday", - "nodedexDayWed": "Wed", - "nodedexDayWednesday": "Wednesday", - "nodedexDaysCompactLabel": "Days", - "nodedexDensityAll": "All", - "nodedexDensityDense": "Dense", - "nodedexDensityNormal": "Normal", - "nodedexDensitySparse": "Sparse", - "nodedexDensityStars": "Stars", - "nodedexDetailNotFoundSubtitle": "This node has not been discovered yet.", - "nodedexDetailNotFoundTitle": "Node not found in NodeDex", - "nodedexDeviceTitle": "Device", - "nodedexDiscoveryTitle": "Discovery", - "nodedexDistanceKilometers": "{distance} km", - "nodedexDistanceMeters": "{distance} m", - "nodedexDistanceUnknown": "unknown range", - "nodedexDurationDays": "{days} d", - "nodedexDurationHours": "{hours} hr", - "nodedexDurationMinutes": "{minutes} min", - "nodedexDurationMonths": "{months} mo", - "nodedexDurationMonthsDays": "{months} mo {days} d", - "nodedexDurationYears": "{years} yr", - "nodedexDurationYearsMonths": "{years} yr {months} mo", - "nodedexEdgeDensityAll": "All", - "nodedexEdgeDensityDense": "Dense", - "nodedexEdgeDensityNormal": "Normal", - "nodedexEdgeDensitySparse": "Sparse", - "nodedexEdgeDensityTooltip": "Edge density: {label}", - "nodedexEmptyAlbumDescription": "Connect to a mesh device and discover nodes\nto start building your collection", - "nodedexEmptyAlbumHintMove": "Move around", - "nodedexEmptyAlbumHintScan": "Scan for devices", - "nodedexEmptyAlbumTitle": "No cards yet", - "nodedexEmptyAllSubtitle": "Connect to a Meshtastic device and nodes will appear here as they are discovered on the mesh.", - "nodedexEmptyAllTitle": "No nodes discovered yet", - "nodedexEmptyBeaconsSubtitle": "Beacons are nodes with very high activity and frequent encounters. They take time to classify.", - "nodedexEmptyBeaconsTitle": "No beacons found", - "nodedexEmptyContactSubtitle": "Nodes you classify as Contact will appear here. Long-press a node to assign this tag.", - "nodedexEmptyContactTitle": "No contacts", - "nodedexEmptyFrequentPeerSubtitle": "Nodes you classify as Frequent Peer will appear here. Long-press a node to assign this tag.", - "nodedexEmptyFrequentPeerTitle": "No frequent peers", - "nodedexEmptyGalleryDescription": "Discover nodes to fill your collection", - "nodedexEmptyGalleryTitle": "No cards to display", - "nodedexEmptyGhostsSubtitle": "Ghosts are nodes that appear rarely relative to how long they have been known.", - "nodedexEmptyGhostsTitle": "No ghosts found", - "nodedexEmptyKnownRelaySubtitle": "Nodes you classify as Known Relay will appear here. Long-press a node to assign this tag.", - "nodedexEmptyKnownRelayTitle": "No known relays", - "nodedexEmptyRecentSubtitle": "Nodes discovered in the last 24 hours will appear here.", - "nodedexEmptyRecentTitle": "No recent discoveries", - "nodedexEmptyRelaysSubtitle": "Relays are nodes with router roles and active traffic forwarding.", - "nodedexEmptyRelaysTitle": "No relays found", - "nodedexEmptySentinelsSubtitle": "Sentinels are long-lived, fixed-position nodes with reliable presence.", - "nodedexEmptySentinelsTitle": "No sentinels found", - "nodedexEmptyTaggedSubtitle": "Long-press a node in the list to assign a social tag like Contact, Trusted Node, or Known Relay.", - "nodedexEmptyTaggedTitle": "No tagged nodes", - "nodedexEmptyTagline1": "No nodes discovered yet.\nConnect to a mesh device to start building your field journal.", - "nodedexEmptyTagline2": "NodeDex catalogs every node you encounter.\nEach one gets a unique procedural identity.", - "nodedexEmptyTagline3": "Discover wanderers, sentinels, and ghosts.\nPersonality traits emerge from behavior patterns.", - "nodedexEmptyTagline4": "Tag nodes as contacts or trusted relays.\nBuild your mesh community over time.", + "nodedexCardDeviceFirmware": "ПРОШИВКА", + "nodedexCardDeviceHardware": "ЖЕЛЕЗО", + "nodedexCardDeviceRole": "РОЛЬ", + "nodedexCardRarity100plus": "100+ встреч", + "nodedexCardRarity20to49": "20 - 49 встреч", + "nodedexCardRarity50to99": "50 - 99 встреч", + "nodedexCardRarity5to19": "5 - 19 встреч", + "nodedexCardRarityEpic": "ЭПИЧЕСКАЯ", + "nodedexCardRarityInfoDescription": "Редкость карточки отражает, как часто вы встречали этот узел в сети. Чем больше пересечений, тем редкостнее становится карточка.", + "nodedexCardRarityInfoTitle": "Редкость карточки", + "nodedexCardRarityLegendary": "ЛЕГЕНДАРНАЯ", + "nodedexCardRarityRare": "РЕДКАЯ", + "nodedexCardRarityStandard": "СТАНДАРТНАЯ", + "nodedexCardRarityUncommon": "НЕОБЫЧНАЯ", + "nodedexCardRarityUnder5": "Менее 5 встреч", + "nodedexChannelUtilLabel": "Загрузка канала", + "nodedexClassificationChange": "Изменить", + "nodedexClassificationClassify": "Классифицировать", + "nodedexClassificationLabel": "КЛАССИФИКАЦИЯ", + "nodedexClassificationTitle": "Классификация", + "nodedexClassifyNodeDescription": "Назначьте личную классификацию этому узлу. Она видна только вам.", + "nodedexClassifyNodeTitle": "Классифицировать узел", + "nodedexClearFilter": "Очистить", + "nodedexCloseGallerySemanticLabel": "Закрыть галерею", + "nodedexCoSeenCompactLabel": "Вместе", + "nodedexCoSeenDescription": "Узлы, часто встречаемые в одном сеансе", + "nodedexCoSeenLinksTitle": "Связи совместных наблюдений", + "nodedexCoSeenRelationshipDetails": "Детали совместного наблюдения", + "nodedexCollectedCount": "{count} собрано", + "nodedexConfidenceLabel": "Уверенность", + "nodedexConfidenceTooltip": "Уверенность: {percentage}%", + "nodedexConstellationCloseSearch": "Закрыть поиск", + "nodedexConstellationEmptySubtitle": "Откройте больше узлов, чтобы увидеть их связи.\nУзлы, встреченные вместе, образуют связи созвездия.", + "nodedexConstellationEmptyTitle": "Созвездие ещё не создано", + "nodedexConstellationLinkCount": "{count} связей", + "nodedexConstellationLinkTitle": "Связь созвездия", + "nodedexConstellationNodeCount": "{count} узлов", + "nodedexConstellationProfile": "Профиль", + "nodedexConstellationSearchHint": "Поиск по имени или ID узла…", + "nodedexConstellationSearchNodes": "Поиск узлов", + "nodedexConstellationTitle": "Созвездие", + "nodedexDayFri": "Пт", + "nodedexDayFriday": "Пятница", + "nodedexDayMon": "Пн", + "nodedexDayMonday": "Понедельник", + "nodedexDaySat": "Сб", + "nodedexDaySaturday": "Суббота", + "nodedexDaySun": "Вс", + "nodedexDaySunday": "Воскресенье", + "nodedexDayThu": "Чт", + "nodedexDayThursday": "Четверг", + "nodedexDayTue": "Вт", + "nodedexDayTuesday": "Вторник", + "nodedexDayWed": "Ср", + "nodedexDayWednesday": "Среда", + "nodedexDaysCompactLabel": "Дни", + "nodedexDensityAll": "Все", + "nodedexDensityDense": "Плотная", + "nodedexDensityNormal": "Обычная", + "nodedexDensitySparse": "Разреженная", + "nodedexDensityStars": "Звёзды", + "nodedexDetailNotFoundSubtitle": "Этот узел ещё не был обнаружен.", + "nodedexDetailNotFoundTitle": "Узел не найден в NodeDex", + "nodedexDeviceTitle": "Устройство", + "nodedexDiscoveryTitle": "Обнаружение", + "nodedexDistanceKilometers": "{distance} км", + "nodedexDistanceMeters": "{distance} м", + "nodedexDistanceUnknown": "расстояние неизвестно", + "nodedexDurationDays": "{days} д", + "nodedexDurationHours": "{hours} ч", + "nodedexDurationMinutes": "{minutes} мин", + "nodedexDurationMonths": "{months} мес", + "nodedexDurationMonthsDays": "{months} мес {days} д", + "nodedexDurationYears": "{years} г", + "nodedexDurationYearsMonths": "{years} г {months} мес", + "nodedexEdgeDensityAll": "Все", + "nodedexEdgeDensityDense": "Плотная", + "nodedexEdgeDensityNormal": "Обычная", + "nodedexEdgeDensitySparse": "Разреженная", + "nodedexEdgeDensityTooltip": "Плотность рёбер: {label}", + "nodedexEmptyAlbumDescription": "Подключитесь к сетевому устройству и обнаруживайте узлы,\nчтобы начать формировать коллекцию", + "nodedexEmptyAlbumHintMove": "Перемещайтесь", + "nodedexEmptyAlbumHintScan": "Сканировать устройства", + "nodedexEmptyAlbumTitle": "Карточек пока нет", + "nodedexEmptyAllSubtitle": "Подключитесь к устройству Meshtastic, и узлы будут появляться здесь по мере их обнаружения в сети.", + "nodedexEmptyAllTitle": "Узлы ещё не обнаружены", + "nodedexEmptyBeaconsSubtitle": "Маяки — это узлы с очень высокой активностью и частыми встречами. Для их классификации требуется время.", + "nodedexEmptyBeaconsTitle": "Маяки не найдены", + "nodedexEmptyContactSubtitle": "Узлы, классифицированные вами как Контакт, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", + "nodedexEmptyContactTitle": "Контакты отсутствуют", + "nodedexEmptyFrequentPeerSubtitle": "Узлы, классифицированные вами как Частый партнёр, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", + "nodedexEmptyFrequentPeerTitle": "Частые партнёры отсутствуют", + "nodedexEmptyGalleryDescription": "Обнаруживайте узлы, чтобы наполнить коллекцию", + "nodedexEmptyGalleryTitle": "Нет карточек для отображения", + "nodedexEmptyGhostsSubtitle": "Призраки — это узлы, которые появляются редко относительно времени, в течение которого они известны.", + "nodedexEmptyGhostsTitle": "Призраки не найдены", + "nodedexEmptyKnownRelaySubtitle": "Узлы, классифицированные вами как Известный ретранслятор, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", + "nodedexEmptyKnownRelayTitle": "Известные ретрансляторы отсутствуют", + "nodedexEmptyRecentSubtitle": "Узлы, обнаруженные за последние 24 часа, появятся здесь.", + "nodedexEmptyRecentTitle": "Недавних открытий нет", + "nodedexEmptyRelaysSubtitle": "Ретрансляторы — это узлы с ролью маршрутизатора и активной переадресацией трафика.", + "nodedexEmptyRelaysTitle": "Ретрансляторы не найдены", + "nodedexEmptySentinelsSubtitle": "Часовые — это долгоживущие узлы с фиксированным положением и стабильным присутствием.", + "nodedexEmptySentinelsTitle": "Часовые не найдены", + "nodedexEmptyTaggedSubtitle": "Удерживайте узел в списке, чтобы назначить социальную метку: Контакт, Доверенный узел или Известный ретранслятор.", + "nodedexEmptyTaggedTitle": "Узлов с метками нет", + "nodedexEmptyTagline1": "Узлы ещё не обнаружены.\nПодключитесь к сетевому устройству, чтобы начать вести полевой журнал.", + "nodedexEmptyTagline2": "NodeDex каталогизирует каждый обнаруженный узел.\nКаждый получает уникальную процедурную идентичность.", + "nodedexEmptyTagline3": "Открывайте странников, часовых и призраков.\nЧерты личности формируются из поведенческих паттернов.", + "nodedexEmptyTagline4": "Отмечайте узлы как контакты или доверенные ретрансляторы.\nСтройте своё сетевое сообщество со временем.", "nodedexEmptyTitleKeyword": "NodeDex", - "nodedexEmptyTitlePrefix": "Your ", - "nodedexEmptyTitleSuffix": " is empty", - "nodedexEmptyTrustedNodeSubtitle": "Nodes you classify as Trusted Node will appear here. Long-press a node to assign this tag.", - "nodedexEmptyTrustedNodeTitle": "No trusted nodes", - "nodedexEmptyWanderersSubtitle": "Wanderers are nodes seen across multiple locations. They emerge over time as position data accumulates.", - "nodedexEmptyWanderersTitle": "No wanderers found", - "nodedexEncounterActivityTitle": "Encounter Activity", - "nodedexEncounterCountLabel": "{count} encounters", - "nodedexEncounterLogLabel": "ENCOUNTER LOG", - "nodedexEncountersCount": "{count} encounters", - "nodedexEncountersLabel": "Encounters", - "nodedexEncountersStatLabel": "Encounters", - "nodedexEvidenceActiveLastHour": "Active within the last hour", - "nodedexEvidenceAirtimeTx": "Airtime TX {percent}%", - "nodedexEvidenceChannelUtilization": "Channel utilization {percent}%", - "nodedexEvidenceCoSeenWith": "Co-seen with {count} nodes", - "nodedexEvidenceDistinctPositions": "Observed at {count} distinct positions", - "nodedexEvidenceEncounterRate": "{rate} encounters/day", - "nodedexEvidenceEncounterRateLow": "Encounter rate {rate}/day", - "nodedexEvidenceEncountersReliable": "{count} encounters (reliable)", - "nodedexEvidenceFewEncountersOverDays": "Only {encounters} encounters over {days} days", - "nodedexEvidenceFixedLocation": "Fixed location", - "nodedexEvidenceFixedPosition": "Fixed position (single location)", - "nodedexEvidenceHighEncounterCount": "High encounter count (20+)", - "nodedexEvidenceInsufficientData": "Insufficient data to classify", - "nodedexEvidenceIrregularTiming": "Irregular timing (CV {cv})", - "nodedexEvidenceKnownForDays": "Known for {days} days", - "nodedexEvidenceLastSeenDaysAgo": "Last seen {days}d ago", - "nodedexEvidenceMaxRange": "Max range {km}km", - "nodedexEvidenceMessagesExchanged": "{count} messages exchanged", - "nodedexEvidenceMessagesPerEncounter": "{ratio} messages per encounter", - "nodedexEvidenceMobileWithMessaging": "Mobile with active messaging", - "nodedexEvidenceModerateEncounterRate": "Moderate encounter rate ({rate}/day)", - "nodedexEvidencePersistentPresence": "Persistent presence ({days} days)", - "nodedexEvidencePositionsObserved": "{count} positions observed", - "nodedexEvidenceRoleIs": "Role is {role}", - "nodedexEvidenceSeenAcrossRegions": "Seen across {count} regions", - "nodedexEvidenceSomewhatIrregularTiming": "Somewhat irregular timing (CV {cv})", - "nodedexEvidenceTotalEncounters": "{count} total encounters", - "nodedexEvidenceUptime": "Uptime {days}d", - "nodedexExportFailed": "Export failed: {error}", - "nodedexExportNothingToExport": "Nothing to export — NodeDex is empty", - "nodedexExportShareSubject": "Socialmesh NodeDex Export", - "nodedexFieldNoteAnchor0": "Hub node. Co-seen with {coSeen} other nodes.", - "nodedexFieldNoteAnchor1": "Social center of local mesh. Many connections.", - "nodedexFieldNoteAnchor2": "Persistent hub. {coSeen} nodes observed in proximity.", - "nodedexFieldNoteAnchor3": "Anchor point for nearby nodes. Fixed and well-connected.", - "nodedexFieldNoteAnchor4": "Central to local topology. High co-seen density.", - "nodedexFieldNoteAnchor5": "Gravitational center. Other nodes cluster around this one.", - "nodedexFieldNoteAnchor6": "Infrastructure anchor. {coSeen} peers linked.", - "nodedexFieldNoteAnchor7": "Mesh nexus. Stable presence with broad connectivity.", - "nodedexFieldNoteBeacon0": "Steady signal. {rate} sightings per day.", - "nodedexFieldNoteBeacon1": "Persistent presence on the mesh. Always broadcasting.", - "nodedexFieldNoteBeacon2": "Reliable and consistent. Last heard {lastSeen}.", - "nodedexFieldNoteBeacon3": "High availability. {encounters} encounters recorded.", - "nodedexFieldNoteBeacon4": "Continuous operation confirmed. Signal rarely drops.", - "nodedexFieldNoteBeacon5": "Always-on presence. Dependable reference point.", - "nodedexFieldNoteBeacon6": "Broadcasting consistently. {rate} daily observations.", - "nodedexFieldNoteBeacon7": "Fixed rhythm. Predictable timing across sessions.", - "nodedexFieldNoteCourier0": "High message volume. {messages} messages across {encounters} encounters.", - "nodedexFieldNoteCourier1": "Data carrier. Message-to-encounter ratio elevated.", - "nodedexFieldNoteCourier2": "Active in message exchange. Courier behavior likely.", - "nodedexFieldNoteCourier3": "Carries data between mesh segments. {messages} messages logged.", - "nodedexFieldNoteCourier4": "Message density suggests deliberate data transport.", - "nodedexFieldNoteCourier5": "Communication-heavy node. {messages} exchanges recorded.", - "nodedexFieldNoteCourier6": "Frequent messenger. Moves data across the network.", - "nodedexFieldNoteCourier7": "Delivery pattern observed. Messages outpace encounters.", - "nodedexFieldNoteDrifter0": "Timing unpredictable. Appears and fades without pattern.", - "nodedexFieldNoteDrifter1": "Irregular intervals between sightings.", - "nodedexFieldNoteDrifter2": "No consistent schedule. Drift behavior confirmed.", - "nodedexFieldNoteDrifter3": "Appears sporadically but not rarely. Timing erratic.", - "nodedexFieldNoteDrifter4": "Signal comes and goes. No rhythm detected.", - "nodedexFieldNoteDrifter5": "Present but unreliable. Intervals vary widely.", - "nodedexFieldNoteDrifter6": "Observation timing scattered. No periodicity found.", - "nodedexFieldNoteDrifter7": "Intermittent but active. Schedule defies prediction.", - "nodedexFieldNoteGhost0": "Rarely observed. Last confirmed sighting {lastSeen}.", - "nodedexFieldNoteGhost1": "Elusive. {encounters} encounters over {age} days.", - "nodedexFieldNoteGhost2": "Signal appears briefly then vanishes. Pattern unknown.", - "nodedexFieldNoteGhost3": "Intermittent trace only. Insufficient data for profile.", - "nodedexFieldNoteGhost4": "Faint and sporadic. Presence cannot be relied upon.", - "nodedexFieldNoteGhost5": "Appears without warning. Disappears without trace.", - "nodedexFieldNoteGhost6": "Low encounter density. Behavior difficult to classify.", - "nodedexFieldNoteGhost7": "Detected at the margins. Observation window narrow.", - "nodedexFieldNoteLabel": "Field Note", - "nodedexFieldNoteRelay0": "Forwarding traffic. Router role confirmed.", - "nodedexFieldNoteRelay1": "Active relay node. Channel utilization elevated.", - "nodedexFieldNoteRelay2": "Infrastructure role: traffic forwarding observed.", - "nodedexFieldNoteRelay3": "Router signature detected. High airtime usage.", - "nodedexFieldNoteRelay4": "Mesh backbone element. Facilitates connectivity.", - "nodedexFieldNoteRelay5": "Relay behavior consistent across {encounters} sessions.", - "nodedexFieldNoteRelay6": "Traffic handler. Forwarding pattern stable.", - "nodedexFieldNoteRelay7": "Network infrastructure. Routing confirmed by role.", - "nodedexFieldNoteSentinel0": "Fixed position. Monitoring for {age} days.", - "nodedexFieldNoteSentinel1": "Stationary installation. Signal consistent and strong.", - "nodedexFieldNoteSentinel2": "Guardian presence. {encounters} observations from one location.", - "nodedexFieldNoteSentinel3": "Long-lived post. First observed {firstSeen}.", - "nodedexFieldNoteSentinel4": "No position variance. Infrastructure signature confirmed.", - "nodedexFieldNoteSentinel5": "Holding position. Reliable since first contact.", - "nodedexFieldNoteSentinel6": "Static deployment. Best signal {snr} dB SNR.", - "nodedexFieldNoteSentinel7": "Permanent fixture. Observed continuously for {age} days.", - "nodedexFieldNoteUnknown0": "Recently discovered. Observation in progress.", - "nodedexFieldNoteUnknown1": "New contact. Insufficient data for classification.", - "nodedexFieldNoteUnknown2": "First logged {firstSeen}. Awaiting further signals.", - "nodedexFieldNoteUnknown3": "Identity recorded. Behavioral profile pending.", - "nodedexFieldNoteUnknown4": "Initial entry. More encounters needed for assessment.", - "nodedexFieldNoteUnknown5": "Cataloged. No behavioral pattern yet established.", - "nodedexFieldNoteUnknown6": "Signal acknowledged. Classification deferred.", - "nodedexFieldNoteUnknown7": "Entry created. Monitoring initiated.", - "nodedexFieldNoteWanderer0": "Recorded across {regions} regions. No fixed bearing.", - "nodedexFieldNoteWanderer1": "Passes through without settling. {positions} positions logged.", - "nodedexFieldNoteWanderer2": "Transient signal. Observed moving through {regions} zones.", - "nodedexFieldNoteWanderer3": "Migratory pattern suspected. Range up to {distance}.", - "nodedexFieldNoteWanderer4": "Appears at different coordinates each session.", - "nodedexFieldNoteWanderer5": "No anchor point detected. Drift confirmed across {regions} regions.", - "nodedexFieldNoteWanderer6": "Logged at {positions} positions. Path unclear.", - "nodedexFieldNoteWanderer7": "Signal origin shifts between sessions.", - "nodedexFilterAll": "All", - "nodedexFilterByDateHelp": "Filter encounters by date", - "nodedexFilterRecent": "Recent", - "nodedexFilterTagged": "Tagged", - "nodedexFirmwareLabel": "Firmware", - "nodedexFirstDiscovered": "First Discovered", - "nodedexFirstSeenStatLabel": "First Seen", - "nodedexFirstSighting": "First Sighting", - "nodedexGalleryHint": "Tap card to flip • Swipe to browse", + "nodedexEmptyTitlePrefix": "Ваш ", + "nodedexEmptyTitleSuffix": " пуст", + "nodedexEmptyTrustedNodeSubtitle": "Узлы, классифицированные вами как Доверенный узел, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", + "nodedexEmptyTrustedNodeTitle": "Доверенных узлов нет", + "nodedexEmptyWanderersSubtitle": "Странники — это узлы, замеченные в нескольких местах. Они появляются со временем по мере накопления данных о положении.", + "nodedexEmptyWanderersTitle": "Странники не найдены", + "nodedexEncounterActivityTitle": "Активность встреч", + "nodedexEncounterCountLabel": "{count} встреч", + "nodedexEncounterLogLabel": "ЖУРНАЛ ВСТРЕЧ", + "nodedexEncountersCount": "{count} встреч", + "nodedexEncountersLabel": "Встречи", + "nodedexEncountersStatLabel": "Встречи", + "nodedexEvidenceActiveLastHour": "Активен в течение последнего часа", + "nodedexEvidenceAirtimeTx": "Время в эфире TX {percent}%", + "nodedexEvidenceChannelUtilization": "Загрузка канала {percent}%", + "nodedexEvidenceCoSeenWith": "Замечен вместе с {count} узлами", + "nodedexEvidenceDistinctPositions": "Наблюдался в {count} различных позициях", + "nodedexEvidenceEncounterRate": "{rate} встреч/день", + "nodedexEvidenceEncounterRateLow": "Частота встреч {rate}/день", + "nodedexEvidenceEncountersReliable": "{count} встреч (надёжных)", + "nodedexEvidenceFewEncountersOverDays": "Всего {encounters} встреч за {days} дней", + "nodedexEvidenceFixedLocation": "Фиксированное местоположение", + "nodedexEvidenceFixedPosition": "Фиксированная позиция (одно место)", + "nodedexEvidenceHighEncounterCount": "Высокое число встреч (20+)", + "nodedexEvidenceInsufficientData": "Недостаточно данных для классификации", + "nodedexEvidenceIrregularTiming": "Нерегулярный интервал (CV {cv})", + "nodedexEvidenceKnownForDays": "Известен {days} дней", + "nodedexEvidenceLastSeenDaysAgo": "Последний раз замечен {days} д. назад", + "nodedexEvidenceMaxRange": "Максимальная дальность {km} км", + "nodedexEvidenceMessagesExchanged": "{count} сообщений обменяно", + "nodedexEvidenceMessagesPerEncounter": "{ratio} сообщений на встречу", + "nodedexEvidenceMobileWithMessaging": "Мобильный с активным обменом сообщениями", + "nodedexEvidenceModerateEncounterRate": "Умеренная частота встреч ({rate}/день)", + "nodedexEvidencePersistentPresence": "Постоянное присутствие ({days} дней)", + "nodedexEvidencePositionsObserved": "{count} позиций зафиксировано", + "nodedexEvidenceRoleIs": "Роль: {role}", + "nodedexEvidenceSeenAcrossRegions": "Замечен в {count} регионах", + "nodedexEvidenceSomewhatIrregularTiming": "Несколько нерегулярный интервал (CV {cv})", + "nodedexEvidenceTotalEncounters": "{count} встреч всего", + "nodedexEvidenceUptime": "Время работы {days} д", + "nodedexExportFailed": "Экспорт не удался: {error}", + "nodedexExportNothingToExport": "Нечего экспортировать — NodeDex пуст", + "nodedexExportShareSubject": "Экспорт Socialmesh NodeDex", + "nodedexFieldNoteAnchor0": "Узел-хаб. Замечен вместе с {coSeen} другими узлами.", + "nodedexFieldNoteAnchor1": "Социальный центр локальной сети. Множество связей.", + "nodedexFieldNoteAnchor2": "Постоянный хаб. {coSeen} узлов в непосредственной близости.", + "nodedexFieldNoteAnchor3": "Якорная точка для соседних узлов. Фиксирован и хорошо связан.", + "nodedexFieldNoteAnchor4": "Центральный узел локальной топологии. Высокая плотность совместных наблюдений.", + "nodedexFieldNoteAnchor5": "Гравитационный центр. Другие узлы группируются вокруг него.", + "nodedexFieldNoteAnchor6": "Инфраструктурный якорь. {coSeen} связанных партнёров.", + "nodedexFieldNoteAnchor7": "Сетевой нексус. Стабильное присутствие с широкими связями.", + "nodedexFieldNoteBeacon0": "Устойчивый сигнал. {rate} наблюдений в день.", + "nodedexFieldNoteBeacon1": "Постоянное присутствие в сети. Всегда транслирует.", + "nodedexFieldNoteBeacon2": "Надёжный и стабильный. Последний раз слышан {lastSeen}.", + "nodedexFieldNoteBeacon3": "Высокая доступность. Зафиксировано {encounters} встреч.", + "nodedexFieldNoteBeacon4": "Непрерывная работа подтверждена. Сигнал почти не пропадает.", + "nodedexFieldNoteBeacon5": "Постоянно активен. Надёжная точка отсчёта.", + "nodedexFieldNoteBeacon6": "Стабильная трансляция. {rate} наблюдений в день.", + "nodedexFieldNoteBeacon7": "Чёткий ритм. Предсказуемые интервалы между сеансами.", + "nodedexFieldNoteCourier0": "Большой объём сообщений. {messages} сообщений за {encounters} встреч.", + "nodedexFieldNoteCourier1": "Носитель данных. Повышенное соотношение сообщений к встречам.", + "nodedexFieldNoteCourier2": "Активный обмен сообщениями. Поведение курьера вероятно.", + "nodedexFieldNoteCourier3": "Переносит данные между сегментами сети. Зарегистрировано {messages} сообщений.", + "nodedexFieldNoteCourier4": "Высокая плотность сообщений указывает на целенаправленную передачу данных.", + "nodedexFieldNoteCourier5": "Узел с интенсивной коммуникацией. Зафиксировано {messages} обменов.", + "nodedexFieldNoteCourier6": "Частый посредник. Передаёт данные по сети.", + "nodedexFieldNoteCourier7": "Зафиксирован паттерн доставки. Сообщений больше, чем встреч.", + "nodedexFieldNoteDrifter0": "Время появления непредсказуемо. Появляется и исчезает без закономерности.", + "nodedexFieldNoteDrifter1": "Нерегулярные интервалы между наблюдениями.", + "nodedexFieldNoteDrifter2": "Нет стабильного расписания. Поведение дрейфера подтверждено.", + "nodedexFieldNoteDrifter3": "Появляется спорадически, но не редко. Время непредсказуемо.", + "nodedexFieldNoteDrifter4": "Сигнал то появляется, то пропадает. Ритм не обнаружен.", + "nodedexFieldNoteDrifter5": "Присутствует, но ненадёжен. Интервалы сильно варьируются.", + "nodedexFieldNoteDrifter6": "Время наблюдений хаотично. Периодичность не найдена.", + "nodedexFieldNoteDrifter7": "Непостоянен, но активен. Расписание не поддаётся предсказанию.", + "nodedexFieldNoteGhost0": "Наблюдается редко. Последнее подтверждённое обнаружение: {lastSeen}.", + "nodedexFieldNoteGhost1": "Неуловимый. {encounters} встреч за {age} дней.", + "nodedexFieldNoteGhost2": "Сигнал появляется ненадолго и исчезает. Паттерн неизвестен.", + "nodedexFieldNoteGhost3": "Только слабый след. Недостаточно данных для профиля.", + "nodedexFieldNoteGhost4": "Слабый и спорадический. Присутствие ненадёжно.", + "nodedexFieldNoteGhost5": "Появляется без предупреждения. Исчезает бесследно.", + "nodedexFieldNoteGhost6": "Низкая плотность встреч. Поведение сложно классифицировать.", + "nodedexFieldNoteGhost7": "Обнаружен на периферии. Окно наблюдения узкое.", + "nodedexFieldNoteLabel": "Полевая заметка", + "nodedexFieldNoteRelay0": "Переадресация трафика. Роль маршрутизатора подтверждена.", + "nodedexFieldNoteRelay1": "Активный ретранслятор. Загрузка канала повышена.", + "nodedexFieldNoteRelay2": "Инфраструктурная роль: наблюдается переадресация трафика.", + "nodedexFieldNoteRelay3": "Обнаружена сигнатура маршрутизатора. Высокое использование эфирного времени.", + "nodedexFieldNoteRelay4": "Элемент магистрали сети. Обеспечивает связность.", + "nodedexFieldNoteRelay5": "Поведение ретранслятора стабильно на протяжении {encounters} сеансов.", + "nodedexFieldNoteRelay6": "Обработчик трафика. Паттерн переадресации стабилен.", + "nodedexFieldNoteRelay7": "Сетевая инфраструктура. Маршрутизация подтверждена ролью.", + "nodedexFieldNoteSentinel0": "Фиксированная позиция. Мониторинг ведётся {age} дней.", + "nodedexFieldNoteSentinel1": "Стационарная установка. Сигнал стабильный и сильный.", + "nodedexFieldNoteSentinel2": "Присутствие часового. {encounters} наблюдений из одной точки.", + "nodedexFieldNoteSentinel3": "Долгосрочный пост. Первое наблюдение: {firstSeen}.", + "nodedexFieldNoteSentinel4": "Нет отклонений позиции. Инфраструктурная сигнатура подтверждена.", + "nodedexFieldNoteSentinel5": "Удерживает позицию. Надёжен с момента первого контакта.", + "nodedexFieldNoteSentinel6": "Стационарное развёртывание. Лучший сигнал {snr} dB SNR.", + "nodedexFieldNoteSentinel7": "Постоянный объект. Непрерывно наблюдается в течение {age} дней.", + "nodedexFieldNoteUnknown0": "Недавно обнаружен. Наблюдение ведётся.", + "nodedexFieldNoteUnknown1": "Новый контакт. Недостаточно данных для классификации.", + "nodedexFieldNoteUnknown2": "Первая запись: {firstSeen}. Ожидаются дальнейшие сигналы.", + "nodedexFieldNoteUnknown3": "Личность зафиксирована. Поведенческий профиль формируется.", + "nodedexFieldNoteUnknown4": "Первичная запись. Для оценки необходимо больше встреч.", + "nodedexFieldNoteUnknown5": "Каталогизирован. Поведенческий паттерн ещё не установлен.", + "nodedexFieldNoteUnknown6": "Сигнал принят. Классификация отложена.", + "nodedexFieldNoteUnknown7": "Запись создана. Мониторинг инициирован.", + "nodedexFieldNoteWanderer0": "Зафиксирован в {regions} регионах. Постоянного направления нет.", + "nodedexFieldNoteWanderer1": "Проходит, не задерживаясь. Зафиксировано {positions} позиций.", + "nodedexFieldNoteWanderer2": "Переходящий сигнал. Наблюдался в движении через {regions} зоны.", + "nodedexFieldNoteWanderer3": "Предполагается миграционный паттерн. Дальность до {distance}.", + "nodedexFieldNoteWanderer4": "Появляется в разных координатах в каждом сеансе.", + "nodedexFieldNoteWanderer5": "Якорная точка не обнаружена. Дрейф подтверждён в {regions} регионах.", + "nodedexFieldNoteWanderer6": "Зарегистрирован в {positions} позициях. Маршрут неясен.", + "nodedexFieldNoteWanderer7": "Источник сигнала меняется между сеансами.", + "nodedexFilterAll": "Все", + "nodedexFilterByDateHelp": "Фильтровать встречи по дате", + "nodedexFilterRecent": "Недавние", + "nodedexFilterTagged": "С метками", + "nodedexFirmwareLabel": "Прошивка", + "nodedexFirstDiscovered": "Первое обнаружение", + "nodedexFirstSeenStatLabel": "Впервые замечен", + "nodedexFirstSighting": "Первое наблюдение", + "nodedexGalleryHint": "Нажмите, чтобы перевернуть • Проведите для просмотра", "nodedexGalleryPositionCounter": "{current} / {total}", - "nodedexGotIt": "Got it", - "nodedexGroupByLabel": "GROUP BY", - "nodedexGroupByRarity": "Rarity", - "nodedexGroupByRegion": "Region", - "nodedexGroupByTrait": "Trait", - "nodedexHardwareLabel": "Hardware", - "nodedexHelpActivityTimeline": "Activity Timeline", - "nodedexHelpClassification": "Classification", - "nodedexHelpConstellationLinks": "Constellation Links", - "nodedexHelpDeviceInfo": "Device Info", - "nodedexHelpDiscoveryStats": "Discovery Stats", - "nodedexHelpInfoDefault": "Info", - "nodedexHelpNote": "Note", - "nodedexHelpPersonalityTrait": "Personality Trait", - "nodedexHelpRecentEncounters": "Recent Encounters", - "nodedexHelpRegionHistory": "Region History", + "nodedexGotIt": "Понятно", + "nodedexGroupByLabel": "ГРУППИРОВАТЬ ПО", + "nodedexGroupByRarity": "Редкости", + "nodedexGroupByRegion": "Региону", + "nodedexGroupByTrait": "Характеристике", + "nodedexHardwareLabel": "Оборудование", + "nodedexHelpActivityTimeline": "Хронология активности", + "nodedexHelpClassification": "Классификация", + "nodedexHelpConstellationLinks": "Связи созвездия", + "nodedexHelpDeviceInfo": "Информация об устройстве", + "nodedexHelpDiscoveryStats": "Статистика обнаружений", + "nodedexHelpInfoDefault": "Информация", + "nodedexHelpNote": "Заметка", + "nodedexHelpPersonalityTrait": "Характеристика личности", + "nodedexHelpRecentEncounters": "Недавние встречи", + "nodedexHelpRegionHistory": "История регионов", "nodedexHelpSigil": "Sigil", - "nodedexHelpSignalRecords": "Signal Records", - "nodedexImportButtonLabelPlural": "Import {count} entries", - "nodedexImportButtonLabelSingular": "Import {count} entry", - "nodedexImportClassificationConflictPlural": "{count} classification conflicts", - "nodedexImportClassificationConflictSingular": "{count} classification conflict", - "nodedexImportConflictingDataMessage": "Some entries have conflicting data", - "nodedexImportConflictingEntriesLabel": "Conflicting Entries", - "nodedexImportConflictsFallback": "Conflicts detected in user-owned fields.", - "nodedexImportConflictsResolveBelow": "{details}. Choose how to resolve below.", - "nodedexImportEntriesInFile": "{count} entries in file", - "nodedexImportFailed": "Import failed: {error}", - "nodedexImportFailedToReadFile": "Failed to read file", - "nodedexImportFieldClassification": "Classification", - "nodedexImportFieldNote": "Note", - "nodedexImportHideDetails": "Hide details", - "nodedexImportImportLabel": "Import", - "nodedexImportImportingLabel": "Importing...", - "nodedexImportLocalLabel": "Local", - "nodedexImportMergeStrategyLabel": "Merge Strategy", - "nodedexImportNoValidEntries": "No valid NodeDex entries found in file", - "nodedexImportNoneValue": "None", - "nodedexImportNoteConflictPlural": "{count} note conflicts", - "nodedexImportNoteConflictSingular": "{count} note conflict", - "nodedexImportNothingNewToImport": "Nothing new to import", - "nodedexImportNothingToImportDescription": "The file contains no valid NodeDex entries.", - "nodedexImportNothingToImportTitle": "Nothing to import", - "nodedexImportPreviewSubtitle": "Review before applying", - "nodedexImportPreviewTitle": "Import Preview", - "nodedexImportShowDetails": "Show details", - "nodedexImportStrategyKeepLocalDescription": "Your classifications and notes stay unchanged", - "nodedexImportStrategyKeepLocalTitle": "Keep Local", - "nodedexImportStrategyPreferImportDescription": "Use imported classifications and notes where different", - "nodedexImportStrategyPreferImportTitle": "Prefer Import", - "nodedexImportStrategyReviewEachDescription": "Decide per conflict which value to keep", - "nodedexImportStrategyReviewEachTitle": "Review Each", - "nodedexImportSuccessPlural": "Imported {count} entries", - "nodedexImportSuccessSingular": "Imported {count} entry", - "nodedexImportSummaryConflicts": "Conflicts", - "nodedexImportSummaryMerge": "Merge", - "nodedexImportSummaryNew": "New", - "nodedexKnownFor": "Known For", - "nodedexKnownForDaysAgo": "{days} days ago", - "nodedexKnownForHoursAgo": "{hours}h ago", - "nodedexKnownForOneDayAgo": "1 day ago", - "nodedexLastLogged": "Last Logged", - "nodedexLastReadings": "Last {count} readings", - "nodedexLastRelative": "last {relative}", - "nodedexLastSeen": "Last Seen", - "nodedexLastSeenStatLabel": "Last Seen", - "nodedexLastSeenAtTime": "{date} at {time}", - "nodedexLegendFair": "Fair", - "nodedexLegendNoData": "No data", - "nodedexLegendStrong": "Strong", - "nodedexLegendWeak": "Weak", - "nodedexLinkCountPlural": "{count} links", - "nodedexLinkCountSingular": "{count} link", - "nodedexLinkStrengthLabel": "Link Strength", - "nodedexLinkedForDuration": "Linked for {duration}", - "nodedexMaxDistanceStatLabel": "Max Distance", - "nodedexMaxRange": "Max range: {distance}", - "nodedexMaxRangeLabel": "Max Range", - "nodedexMessageActivity": "Message Activity", - "nodedexMessagesExchangedCoPresent": "{count} messages exchanged while co-present", - "nodedexMessagesLabel": "Messages", - "nodedexMessagesStatLabel": "Messages", - "nodedexNicknameHint": "Nickname", - "nodedexNoClassification": "No classification assigned. Tap \"Classify\" to add one.", - "nodedexNoEncountersOnDate": "No encounters on this date", - "nodedexNoEncountersRecorded": "No encounters recorded", - "nodedexNoNoteYet": "No note yet. Tap \"Add Note\" to write one.", - "nodedexNoRelationshipDataDescription": "These nodes have not been observed together.", - "nodedexNoRelationshipDataTitle": "No relationship data", - "nodedexNodeCountPlural": "{count} nodes", - "nodedexNodeCountSingular": "{count} node", - "nodedexNoteAdd": "Add Note", - "nodedexNoteCancel": "Cancel", - "nodedexNoteEdit": "Edit", - "nodedexNoteHint": "Write a note about this node...", - "nodedexNoteSave": "Save", - "nodedexNoteTitle": "Note", - "nodedexObservationTimelineTitle": "Observation Timeline", - "nodedexObservedDate": "Observed {date}", - "nodedexPaletteColorPrimary": "Primary", - "nodedexPaletteColorSecondary": "Secondary", - "nodedexPaletteColorTertiary": "Tertiary", - "nodedexPatinaAxisEncounters": "Encounters", - "nodedexPatinaAxisEncountersDescription": "Number of distinct observations", - "nodedexPatinaAxisReach": "Reach", - "nodedexPatinaAxisReachDescription": "Geographic spread across regions", - "nodedexPatinaAxisRecency": "Recency", - "nodedexPatinaAxisRecencyDescription": "How recently this node was active", - "nodedexPatinaAxisSignalDepth": "Signal Depth", - "nodedexPatinaAxisSignalDepthDescription": "Quality of signal records collected", - "nodedexPatinaAxisSocial": "Social", - "nodedexPatinaAxisSocialDescription": "Co-seen relationships and messages", - "nodedexPatinaAxisTenure": "Tenure", - "nodedexPatinaAxisTenureDescription": "How long this node has been known", - "nodedexPatinaBreakdownSubtitle": "Accumulated history across six dimensions", - "nodedexPatinaBreakdownTitle": "Patina Breakdown", - "nodedexPatinaEncounters": "Encounters", - "nodedexPatinaLabel": "PATINA", - "nodedexPatinaReach": "Reach", - "nodedexPatinaRecency": "Recency", - "nodedexPatinaSignal": "Signal", - "nodedexPatinaSocial": "Social", - "nodedexPatinaStampArchival": "Archival", - "nodedexPatinaStampCanonical": "Canonical", - "nodedexPatinaStampEtched": "Etched", - "nodedexPatinaStampFaint": "Faint", - "nodedexPatinaStampInked": "Inked", - "nodedexPatinaStampLogged": "Logged", - "nodedexPatinaStampNoted": "Noted", - "nodedexPatinaStampTrace": "Trace", - "nodedexPatinaTenure": "Tenure", - "nodedexPerDay": "/day", - "nodedexPositionsLabel": "Positions", - "nodedexPresenceActive": "Active", - "nodedexPresenceFading": "Fading", - "nodedexPresenceStale": "Stale", - "nodedexPresenceUnknown": "Unknown", - "nodedexProfileButton": "Profile", - "nodedexRarityCardsPageTitle": "{rarityLabel} Cards", - "nodedexRecentLabel": "RECENT", - "nodedexRegionEncounterCount": "{count} encounters", - "nodedexRegionsCompactLabel": "Regions", - "nodedexRegionsLabel": "Regions", - "nodedexRelationshipTimeline": "Relationship Timeline", - "nodedexRelativeDaysAgo": "{days}d ago", - "nodedexRelativeHoursAgo": "{hours}h ago", - "nodedexRelativeJustNow": "just now", - "nodedexRelativeMinutesAgo": "{minutes}m ago", - "nodedexRelativeMonthsAgo": "{months}mo ago", - "nodedexRelativeTimeDaysAgo": "{days}d ago", - "nodedexRelativeTimeHoursAgo": "{hours}h ago", - "nodedexRelativeTimeMinutesAgo": "{minutes}m ago", - "nodedexRelativeTimeMomentsAgo": "moments ago", - "nodedexRelativeTimeMonthsAgo": "{months} months ago", - "nodedexRelativeTimeOneMonthAgo": "1 month ago", - "nodedexRelativeTimeYesterday": "yesterday", - "nodedexRemoveClassification": "Remove Classification", - "nodedexResetViewTooltip": "Reset view", + "nodedexHelpSignalRecords": "Записи сигнала", + "nodedexImportButtonLabelPlural": "Импортировать {count} записей", + "nodedexImportButtonLabelSingular": "Импортировать {count} запись", + "nodedexImportClassificationConflictPlural": "{count} конфликтов классификации", + "nodedexImportClassificationConflictSingular": "{count} конфликт классификации", + "nodedexImportConflictingDataMessage": "Некоторые записи содержат конфликтующие данные", + "nodedexImportConflictingEntriesLabel": "Конфликтующие записи", + "nodedexImportConflictsFallback": "Обнаружены конфликты в полях пользователя.", + "nodedexImportConflictsResolveBelow": "{details}. Выберите способ разрешения ниже.", + "nodedexImportEntriesInFile": "{count} записей в файле", + "nodedexImportFailed": "Импорт не удался: {error}", + "nodedexImportFailedToReadFile": "Не удалось прочитать файл", + "nodedexImportFieldClassification": "Классификация", + "nodedexImportFieldNote": "Заметка", + "nodedexImportHideDetails": "Скрыть подробности", + "nodedexImportImportLabel": "Импорт", + "nodedexImportImportingLabel": "Импорт...", + "nodedexImportLocalLabel": "Локальные", + "nodedexImportMergeStrategyLabel": "Стратегия слияния", + "nodedexImportNoValidEntries": "В файле не найдено допустимых записей NodeDex", + "nodedexImportNoneValue": "Нет", + "nodedexImportNoteConflictPlural": "{count} конфликтов заметок", + "nodedexImportNoteConflictSingular": "{count} конфликт заметки", + "nodedexImportNothingNewToImport": "Нет ничего нового для импорта", + "nodedexImportNothingToImportDescription": "Файл не содержит допустимых записей NodeDex.", + "nodedexImportNothingToImportTitle": "Нечего импортировать", + "nodedexImportPreviewSubtitle": "Проверьте перед применением", + "nodedexImportPreviewTitle": "Предварительный просмотр импорта", + "nodedexImportShowDetails": "Показать подробности", + "nodedexImportStrategyKeepLocalDescription": "Ваши классификации и заметки останутся без изменений", + "nodedexImportStrategyKeepLocalTitle": "Сохранить локальные", + "nodedexImportStrategyPreferImportDescription": "Использовать импортированные классификации и заметки там, где они отличаются", + "nodedexImportStrategyPreferImportTitle": "Предпочесть импорт", + "nodedexImportStrategyReviewEachDescription": "Выбирать для каждого конфликта, какое значение сохранить", + "nodedexImportStrategyReviewEachTitle": "Проверять каждый", + "nodedexImportSuccessPlural": "Импортировано {count} записей", + "nodedexImportSuccessSingular": "Импортирована {count} запись", + "nodedexImportSummaryConflicts": "Конфликты", + "nodedexImportSummaryMerge": "Слияние", + "nodedexImportSummaryNew": "Новые", + "nodedexKnownFor": "Известен с", + "nodedexKnownForDaysAgo": "{days} дней назад", + "nodedexKnownForHoursAgo": "{hours} ч назад", + "nodedexKnownForOneDayAgo": "1 день назад", + "nodedexLastLogged": "Последняя запись", + "nodedexLastReadings": "Последние {count} показаний", + "nodedexLastRelative": "{relative} назад", + "nodedexLastSeen": "Последний раз в сети", + "nodedexLastSeenStatLabel": "Последний раз в сети", + "nodedexLastSeenAtTime": "{date} в {time}", + "nodedexLegendFair": "Среднее", + "nodedexLegendNoData": "Нет данных", + "nodedexLegendStrong": "Сильный", + "nodedexLegendWeak": "Слабый", + "nodedexLinkCountPlural": "{count} связей", + "nodedexLinkCountSingular": "{count} связь", + "nodedexLinkStrengthLabel": "Сила связи", + "nodedexLinkedForDuration": "Связь {duration}", + "nodedexMaxDistanceStatLabel": "Макс. расстояние", + "nodedexMaxRange": "Макс. дальность: {distance}", + "nodedexMaxRangeLabel": "Макс. дальность", + "nodedexMessageActivity": "Активность сообщений", + "nodedexMessagesExchangedCoPresent": "{count} сообщений обменяно в присутствии друг друга", + "nodedexMessagesLabel": "Сообщения", + "nodedexMessagesStatLabel": "Сообщения", + "nodedexNicknameHint": "Никнейм", + "nodedexNoClassification": "Классификация не назначена. Нажмите «Классифицировать», чтобы добавить.", + "nodedexNoEncountersOnDate": "Встреч в эту дату нет", + "nodedexNoEncountersRecorded": "Встречи не зафиксированы", + "nodedexNoNoteYet": "Заметок нет. Нажмите «Добавить заметку», чтобы написать.", + "nodedexNoRelationshipDataDescription": "Эти узлы не наблюдались вместе.", + "nodedexNoRelationshipDataTitle": "Нет данных о связи", + "nodedexNodeCountPlural": "{count} узлов", + "nodedexNodeCountSingular": "{count} узел", + "nodedexNoteAdd": "Добавить заметку", + "nodedexNoteCancel": "Отмена", + "nodedexNoteEdit": "Редактировать", + "nodedexNoteHint": "Напишите заметку об этом узле...", + "nodedexNoteSave": "Сохранить", + "nodedexNoteTitle": "Заметка", + "nodedexObservationTimelineTitle": "Хронология наблюдений", + "nodedexObservedDate": "Наблюдался {date}", + "nodedexPaletteColorPrimary": "Основной", + "nodedexPaletteColorSecondary": "Дополнительный", + "nodedexPaletteColorTertiary": "Третичный", + "nodedexPatinaAxisEncounters": "Встречи", + "nodedexPatinaAxisEncountersDescription": "Количество отдельных наблюдений", + "nodedexPatinaAxisReach": "Охват", + "nodedexPatinaAxisReachDescription": "Географический охват по регионам", + "nodedexPatinaAxisRecency": "Давность", + "nodedexPatinaAxisRecencyDescription": "Насколько недавно этот узел был активен", + "nodedexPatinaAxisSignalDepth": "Глубина сигнала", + "nodedexPatinaAxisSignalDepthDescription": "Качество собранных записей сигнала", + "nodedexPatinaAxisSocial": "Социальный", + "nodedexPatinaAxisSocialDescription": "Совместные наблюдения и сообщения", + "nodedexPatinaAxisTenure": "Стаж", + "nodedexPatinaAxisTenureDescription": "Как давно известен этот узел", + "nodedexPatinaBreakdownSubtitle": "Накопленная история по шести измерениям", + "nodedexPatinaBreakdownTitle": "Детали патины", + "nodedexPatinaEncounters": "Встречи", + "nodedexPatinaLabel": "ПАТИНА", + "nodedexPatinaReach": "Охват", + "nodedexPatinaRecency": "Давность", + "nodedexPatinaSignal": "Сигнал", + "nodedexPatinaSocial": "Социальный", + "nodedexPatinaStampArchival": "Архивный", + "nodedexPatinaStampCanonical": "Канонический", + "nodedexPatinaStampEtched": "Гравированный", + "nodedexPatinaStampFaint": "Слабый", + "nodedexPatinaStampInked": "Отпечатанный", + "nodedexPatinaStampLogged": "Записанный", + "nodedexPatinaStampNoted": "Отмеченный", + "nodedexPatinaStampTrace": "След", + "nodedexPatinaTenure": "Стаж", + "nodedexPerDay": "/день", + "nodedexPositionsLabel": "Позиции", + "nodedexPresenceActive": "Активен", + "nodedexPresenceFading": "Затухает", + "nodedexPresenceStale": "Устарел", + "nodedexPresenceUnknown": "Неизвестно", + "nodedexProfileButton": "Профиль", + "nodedexRarityCardsPageTitle": "Карточки {rarityLabel}", + "nodedexRecentLabel": "НЕДАВНИЕ", + "nodedexRegionEncounterCount": "{count} встреч", + "nodedexRegionsCompactLabel": "Регионы", + "nodedexRegionsLabel": "Регионы", + "nodedexRelationshipTimeline": "Хронология отношений", + "nodedexRelativeDaysAgo": "{days}д назад", + "nodedexRelativeHoursAgo": "{hours}ч назад", + "nodedexRelativeJustNow": "только что", + "nodedexRelativeMinutesAgo": "{minutes}м назад", + "nodedexRelativeMonthsAgo": "{months}мес назад", + "nodedexRelativeTimeDaysAgo": "{days}д назад", + "nodedexRelativeTimeHoursAgo": "{hours}ч назад", + "nodedexRelativeTimeMinutesAgo": "{minutes}м назад", + "nodedexRelativeTimeMomentsAgo": "только что", + "nodedexRelativeTimeMonthsAgo": "{months} месяцев назад", + "nodedexRelativeTimeOneMonthAgo": "1 месяц назад", + "nodedexRelativeTimeYesterday": "вчера", + "nodedexRemoveClassification": "Удалить классификацию", + "nodedexResetViewTooltip": "Сбросить вид", "nodedexRngLabel": "RNG", "nodedexRssiDbmValue": "{value} dBm", "nodedexRssiLabel": "RSSI", - "nodedexSearchHint": "Find a node", - "nodedexSectionDiscoveredNodes": "Discovered Nodes", - "nodedexSectionYourDevice": "Your Device", - "nodedexSeenTogetherCount": "Seen together {count} times", - "nodedexSelectedLinksCount": "{count} links", - "nodedexSetNickname": "Set nickname", - "nodedexSettingsTooltip": "Settings", - "nodedexShareCardCheckOut": "Check out the Sigil Card for {name} on Socialmesh!", - "nodedexShareCardImageFailed": "Failed to capture card image", - "nodedexShareCouldNotShare": "Could not share card", - "nodedexShareGetSocialmesh": "Get Socialmesh:", - "nodedexShareSigilCard": "Share Sigil Card", - "nodedexSightingsPlural": "{count} sightings", - "nodedexSightingsSingular": "{count} sighting", - "nodedexSigilCardTitle": "Sigil Card", - "nodedexSignalRecordsTitle": "Signal Records", + "nodedexSearchHint": "Найти узел", + "nodedexSectionDiscoveredNodes": "Обнаруженные узлы", + "nodedexSectionYourDevice": "Ваше устройство", + "nodedexSeenTogetherCount": "Замечены вместе {count} раз", + "nodedexSelectedLinksCount": "{count} связей", + "nodedexSetNickname": "Задать никнейм", + "nodedexSettingsTooltip": "Настройки", + "nodedexShareCardCheckOut": "Посмотрите карточку Sigil для {name} в Socialmesh!", + "nodedexShareCardImageFailed": "Не удалось создать изображение карточки", + "nodedexShareCouldNotShare": "Не удалось поделиться карточкой", + "nodedexShareGetSocialmesh": "Получить Socialmesh:", + "nodedexShareSigilCard": "Поделиться карточкой Sigil", + "nodedexSightingsPlural": "{count} наблюдений", + "nodedexSightingsSingular": "{count} наблюдение", + "nodedexSigilCardTitle": "Карточка Sigil", + "nodedexSignalRecordsTitle": "Записи сигнала", "nodedexSnrDbValue": "{value} dB", "nodedexSnrLabel": "SNR", - "nodedexSnrTrend": "SNR TREND", - "nodedexSocialTagContactDescription": "A person you communicate with", - "nodedexSocialTagFrequentPeerDescription": "Regularly seen on the mesh", - "nodedexSocialTagKnownRelayDescription": "A node that forwards traffic reliably", - "nodedexSocialTagTrustedNodeDescription": "Verified infrastructure you trust", - "nodedexSortDiscovered": "Discovered", - "nodedexSortEncounters": "Encounters", - "nodedexSortFirstDiscovered": "First Discovered", - "nodedexSortLastSeen": "Last Seen", - "nodedexSortLongestRange": "Longest Range", - "nodedexSortMostEncounters": "Most Encounters", - "nodedexSortName": "Name", - "nodedexSortRange": "Range", - "nodedexStatCoSeen": "Co-seen", - "nodedexStatDuration": "Duration", - "nodedexStatFirstLink": "First Link", - "nodedexStatLastSeen": "Last Seen", - "nodedexStatMessages": "Messages", - "nodedexStatsDays": "DAYS", - "nodedexStatsEncounters": "ENCOUNTERS", - "nodedexStatsNodes": "NODES", - "nodedexStatsRegions": "REGIONS", - "nodedexStreakDays": "{count}-day streak", - "nodedexStrengthEmerging": "Emerging", - "nodedexStrengthModerate": "Moderate", - "nodedexStrengthNew": "New", - "nodedexStrengthStrong": "Strong", - "nodedexStrengthVeryStrong": "Very Strong", - "nodedexSummaryCardTitle": "Summary", - "nodedexSummaryEncountersRecorded": "{count} encounters recorded", - "nodedexSummaryKeepObserving": "Keep observing to build a profile", - "nodedexSummaryMostActiveIn": "Most active in the {bucket}", - "nodedexSummarySeenDaysOf14": "Seen {activeDays} of the last 14 days", - "nodedexSummarySpottedDaysOf14": "Spotted on {activeDays} of the last 14 days", - "nodedexSummaryUsuallyOnDay": "Usually on {day}s", - "nodedexSwitchToAlbumView": "Switch to album view", - "nodedexSwitchToListView": "Switch to list view", + "nodedexSnrTrend": "ТРЕНД SNR", + "nodedexSocialTagContactDescription": "Человек, с которым вы общаетесь", + "nodedexSocialTagFrequentPeerDescription": "Регулярно появляется в сети", + "nodedexSocialTagKnownRelayDescription": "Узел, надёжно пересылающий трафик", + "nodedexSocialTagTrustedNodeDescription": "Проверенная инфраструктура, которой вы доверяете", + "nodedexSortDiscovered": "Обнаружен", + "nodedexSortEncounters": "Встречи", + "nodedexSortFirstDiscovered": "Первое обнаружение", + "nodedexSortLastSeen": "Последний раз в сети", + "nodedexSortLongestRange": "Наибольшая дальность", + "nodedexSortMostEncounters": "Больше всего встреч", + "nodedexSortName": "Имя", + "nodedexSortRange": "Дальность", + "nodedexStatCoSeen": "Совместно замечены", + "nodedexStatDuration": "Продолжительность", + "nodedexStatFirstLink": "Первая связь", + "nodedexStatLastSeen": "Последний раз в сети", + "nodedexStatMessages": "Сообщения", + "nodedexStatsDays": "ДНИ", + "nodedexStatsEncounters": "ВСТРЕЧИ", + "nodedexStatsNodes": "УЗЛЫ", + "nodedexStatsRegions": "РЕГИОНЫ", + "nodedexStreakDays": "Серия {count} дней", + "nodedexStrengthEmerging": "Формирующаяся", + "nodedexStrengthModerate": "Умеренная", + "nodedexStrengthNew": "Новая", + "nodedexStrengthStrong": "Сильная", + "nodedexStrengthVeryStrong": "Очень сильная", + "nodedexSummaryCardTitle": "Сводка", + "nodedexSummaryEncountersRecorded": "{count} встреч зафиксировано", + "nodedexSummaryKeepObserving": "Продолжайте наблюдать, чтобы сформировать профиль", + "nodedexSummaryMostActiveIn": "Наиболее активен {bucket}", + "nodedexSummarySeenDaysOf14": "В сети {activeDays} из последних 14 дней", + "nodedexSummarySpottedDaysOf14": "Замечен в {activeDays} из последних 14 дней", + "nodedexSummaryUsuallyOnDay": "Обычно по {day}м", + "nodedexSwitchToAlbumView": "Переключиться на вид альбома", + "nodedexSwitchToListView": "Переключиться на вид списка", "nodedexTagContact": "Контакт", "nodedexTagFrequentPeer": "Частый партнёр", "nodedexTagKnownRelay": "Известный ретранслятор", "nodedexTagTrustedNode": "Доверенный узел", - "nodedexTapCardToFlipSemanticLabel": "Tap card to flip", - "nodedexTapToFlip": "TAP TO FLIP", - "nodedexTimeBucketDawn": "Dawn", - "nodedexTimeBucketDawnRange": "5 AM – 11 AM", - "nodedexTimeBucketEvening": "Evening", - "nodedexTimeBucketEveningRange": "5 PM – 11 PM", - "nodedexTimeBucketMidday": "Midday", - "nodedexTimeBucketMiddayRange": "11 AM – 5 PM", - "nodedexTimeBucketNight": "Night", - "nodedexTimeBucketNightRange": "11 PM – 5 AM", - "nodedexTimelineChannel": "Channel {channel}", - "nodedexTimelineCouldNotLoad": "Could not load timeline", - "nodedexTimelineEncounterBestSnr": ", best SNR {snr}dB", - "nodedexTimelineEncounterClosest": ", closest {distance}", - "nodedexTimelineEncounterSession": "{count} encounters over {duration}{detail}", - "nodedexTimelineEncountered": "Encountered", - "nodedexTimelineEncounteredAtDistance": "Encountered at {distance}", - "nodedexTimelineEncounteredSnr": "Encountered (SNR {snr}dB)", - "nodedexTimelineEventsAppearHere": "Events will appear here as you interact with this node.", - "nodedexTimelineFirst": "First", - "nodedexTimelineHoursUnit": "{hours} hr", - "nodedexTimelineJustNow": "Just now", - "nodedexTimelineLatest": "Latest", - "nodedexTimelineLessThanOneMin": "<1 min", - "nodedexTimelineMinutesUnit": "{minutes} min", - "nodedexTimelineNoActivityYet": "No activity yet", - "nodedexTimelineReceived": "Received: {text}", - "nodedexTimelineSent": "Sent: {text}", - "nodedexTimelineSignal": "Signal: {content}", + "nodedexTapCardToFlipSemanticLabel": "Нажмите на карточку, чтобы перевернуть", + "nodedexTapToFlip": "НАЖМИТЕ, ЧТОБЫ ПЕРЕВЕРНУТЬ", + "nodedexTimeBucketDawn": "Утро", + "nodedexTimeBucketDawnRange": "5:00 – 11:00", + "nodedexTimeBucketEvening": "Вечер", + "nodedexTimeBucketEveningRange": "17:00 – 23:00", + "nodedexTimeBucketMidday": "День", + "nodedexTimeBucketMiddayRange": "11:00 – 17:00", + "nodedexTimeBucketNight": "Ночь", + "nodedexTimeBucketNightRange": "23:00 – 5:00", + "nodedexTimelineChannel": "Канал {channel}", + "nodedexTimelineCouldNotLoad": "Не удалось загрузить хронологию", + "nodedexTimelineEncounterBestSnr": ", лучший SNR {snr}dB", + "nodedexTimelineEncounterClosest": ", ближайшее {distance}", + "nodedexTimelineEncounterSession": "{count} встреч за {duration}{detail}", + "nodedexTimelineEncountered": "Встречен", + "nodedexTimelineEncounteredAtDistance": "Встречен на расстоянии {distance}", + "nodedexTimelineEncounteredSnr": "Встречен (SNR {snr}dB)", + "nodedexTimelineEventsAppearHere": "События будут появляться здесь по мере взаимодействия с этим узлом.", + "nodedexTimelineFirst": "Первый", + "nodedexTimelineHoursUnit": "{hours} ч", + "nodedexTimelineJustNow": "Только что", + "nodedexTimelineLatest": "Последний", + "nodedexTimelineLessThanOneMin": "<1 мин", + "nodedexTimelineMinutesUnit": "{minutes} мин", + "nodedexTimelineNoActivityYet": "Активности пока нет", + "nodedexTimelineReceived": "Получено: {text}", + "nodedexTimelineSent": "Отправлено: {text}", + "nodedexTimelineSignal": "Сигнал: {content}", "nodedexTitle": "NodeDex", - "nodedexTotalCount": "{count} total", + "nodedexTotalCount": "{count} всего", "nodedexTraitAnchor": "Якорь", "nodedexTraitAnchorDescription": "Постоянный узел со множеством соединений", "nodedexTraitBeacon": "Маяк", "nodedexTraitBeaconDescription": "Всегда активен, высокая доступность", - "nodedexTraitCollectionLabel": "TRAIT COLLECTION", + "nodedexTraitCollectionLabel": "КОЛЛЕКЦИЯ ХАРАКТЕРИСТИК", "nodedexTraitCourier": "Курьер", "nodedexTraitCourierDescription": "Доставляет сообщения по сети", "nodedexTraitDrifter": "Дрейфер", "nodedexTraitDrifterDescription": "Нерегулярные появления, исчезает и появляется", "nodedexTraitGhost": "Призрак", "nodedexTraitGhostDescription": "Редко встречается, неуловимое присутствие", - "nodedexTraitNodesPageTitle": "{traitLabel} Nodes", + "nodedexTraitNodesPageTitle": "Узлы {traitLabel}", "nodedexTraitRelay": "Ретранслятор", "nodedexTraitRelayDescription": "Высокая пропускная способность, пересылает трафик", "nodedexTraitSentinel": "Часовой", @@ -3198,1967 +3198,1967 @@ "nodedexTraitUnknownDescription": "Недавно обнаружен", "nodedexTraitWanderer": "Странник", "nodedexTraitWandererDescription": "Замечен в разных местах", - "nodedexTrustDescriptionEstablished": "Deep history across all dimensions", - "nodedexTrustDescriptionFamiliar": "Regular presence with some history", - "nodedexTrustDescriptionObserved": "Seen a few times on the mesh", - "nodedexTrustDescriptionTrusted": "Frequent, long-lived, communicative", - "nodedexTrustDescriptionUnknown": "Not enough data to assess", - "nodedexTrustLevelEstablished": "Established", - "nodedexTrustLevelFamiliar": "Familiar", - "nodedexTrustLevelObserved": "Observed", - "nodedexTrustLevelTrusted": "Trusted", - "nodedexTrustLevelUnknown": "Unknown", - "nodedexUnknownRegion": "Unknown Region", - "nodedexUptimeLabel": "Uptime", - "nodedexViewProfile": "View profile", - "nodedexWalletCouldNotAdd": "Could not add to Apple Wallet", - "nodedexWalletCouldNotOpen": "Could not open Apple Wallet", - "nodedexWalletCouldNotPublish": "Could not publish sigil card", - "nodesScreenConnectedDevice": "Connected Device", - "nodesScreenDisconnect": "Disconnect", - "nodesScreenDistanceKilometers": "{km} km away", - "nodesScreenDistanceMeters": "{meters} m away", - "nodesScreenEmptyAll": "No nodes discovered yet", - "nodesScreenEmptyFiltered": "No nodes match this filter", - "nodesScreenFilterActive": "Active", - "nodesScreenFilterAll": "All", - "nodesScreenFilterFavorites": "Favorites", - "nodesScreenFilterInactive": "Inactive", + "nodedexTrustDescriptionEstablished": "Глубокая история по всем измерениям", + "nodedexTrustDescriptionFamiliar": "Регулярное присутствие с некоторой историей", + "nodedexTrustDescriptionObserved": "Встречался несколько раз в сети", + "nodedexTrustDescriptionTrusted": "Частый, долгосрочный, коммуникативный", + "nodedexTrustDescriptionUnknown": "Недостаточно данных для оценки", + "nodedexTrustLevelEstablished": "Устоявшийся", + "nodedexTrustLevelFamiliar": "Знакомый", + "nodedexTrustLevelObserved": "Наблюдаемый", + "nodedexTrustLevelTrusted": "Доверенный", + "nodedexTrustLevelUnknown": "Неизвестный", + "nodedexUnknownRegion": "Неизвестный регион", + "nodedexUptimeLabel": "Время работы", + "nodedexViewProfile": "Просмотреть профиль", + "nodedexWalletCouldNotAdd": "Не удалось добавить в Apple Wallet", + "nodedexWalletCouldNotOpen": "Не удалось открыть Apple Wallet", + "nodedexWalletCouldNotPublish": "Не удалось опубликовать карточку sigil", + "nodesScreenConnectedDevice": "Подключённое устройство", + "nodesScreenDisconnect": "Отключить", + "nodesScreenDistanceKilometers": "{km} км", + "nodesScreenDistanceMeters": "{meters} м", + "nodesScreenEmptyAll": "Узлы пока не обнаружены", + "nodesScreenEmptyFiltered": "Нет узлов, соответствующих фильтру", + "nodesScreenFilterActive": "Активные", + "nodesScreenFilterAll": "Все", + "nodesScreenFilterFavorites": "Избранные", + "nodesScreenFilterInactive": "Неактивные", "nodesScreenFilterMqtt": "MQTT", - "nodesScreenFilterNew": "New", + "nodesScreenFilterNew": "Новые", "nodesScreenFilterRf": "RF", - "nodesScreenFilterWithPosition": "With Position", + "nodesScreenFilterWithPosition": "С позицией", "nodesScreenGps": "GPS", - "nodesScreenHelpMenu": "Help", - "nodesScreenHopCount": "{count} hops", - "nodesScreenHopDirect": "Direct", - "nodesScreenLogsLabel": "Logs:", - "nodesScreenNoGps": "No GPS", - "nodesScreenScanQrCodeTooltip": "Scan QR Code", - "nodesScreenSearchHint": "Find a node", - "nodesScreenSectionActive": "Active", - "nodesScreenSectionAetherFlights": "Aether Flights Nearby", - "nodesScreenSectionBatteryCritical": "Critical (<20%)", - "nodesScreenSectionBatteryFull": "Full (80-100%)", - "nodesScreenSectionBatteryGood": "Good (50-80%)", - "nodesScreenSectionBatteryLow": "Low (20-50%)", - "nodesScreenSectionCharging": "Charging", - "nodesScreenSectionDiscovering": "Discovering", - "nodesScreenSectionFavorites": "Favorites", - "nodesScreenSectionInactive": "Inactive", - "nodesScreenSectionSeenRecently": "Seen Recently", - "nodesScreenSectionSignalMedium": "Medium (-10 to 0 dB)", - "nodesScreenSectionSignalStrong": "Strong (>0 dB)", - "nodesScreenSectionSignalWeak": "Weak (<-10 dB)", - "nodesScreenSectionUnknown": "Unknown", - "nodesScreenSectionYourDevice": "Your Device", - "nodesScreenSettingsMenu": "Settings", - "nodesScreenShowAllButton": "Show all nodes", - "nodesScreenSortBattery": "Battery", - "nodesScreenSortMenuBatteryLevel": "Battery Level", - "nodesScreenSortMenuMostRecent": "Most Recent", - "nodesScreenSortMenuNameAZ": "Name (A-Z)", - "nodesScreenSortMenuSignalStrength": "Signal Strength", - "nodesScreenSortName": "Name", - "nodesScreenSortRecent": "Recent", - "nodesScreenSortSignal": "Signal", - "nodesScreenThisDevice": "This Device", - "nodesScreenTitle": "Nodes ({count})", + "nodesScreenHelpMenu": "Справка", + "nodesScreenHopCount": "{count, plural, =1{1 хоп} few{{count} хопа} many{{count} хопов} other{{count} хопа}}", + "nodesScreenHopDirect": "Прямой", + "nodesScreenLogsLabel": "Журналы:", + "nodesScreenNoGps": "Нет GPS", + "nodesScreenScanQrCodeTooltip": "Сканировать QR-код", + "nodesScreenSearchHint": "Найти узел", + "nodesScreenSectionActive": "Активные", + "nodesScreenSectionAetherFlights": "Рейсы Aether поблизости", + "nodesScreenSectionBatteryCritical": "Критический (<20%)", + "nodesScreenSectionBatteryFull": "Полный (80–100%)", + "nodesScreenSectionBatteryGood": "Хороший (50–80%)", + "nodesScreenSectionBatteryLow": "Низкий (20–50%)", + "nodesScreenSectionCharging": "Зарядка", + "nodesScreenSectionDiscovering": "Поиск", + "nodesScreenSectionFavorites": "Избранные", + "nodesScreenSectionInactive": "Неактивные", + "nodesScreenSectionSeenRecently": "Недавно замеченные", + "nodesScreenSectionSignalMedium": "Средний (от -10 до 0 dB)", + "nodesScreenSectionSignalStrong": "Сильный (>0 dB)", + "nodesScreenSectionSignalWeak": "Слабый (<-10 dB)", + "nodesScreenSectionUnknown": "Неизвестные", + "nodesScreenSectionYourDevice": "Ваше устройство", + "nodesScreenSettingsMenu": "Настройки", + "nodesScreenShowAllButton": "Показать все узлы", + "nodesScreenSortBattery": "Аккумулятор", + "nodesScreenSortMenuBatteryLevel": "Уровень заряда", + "nodesScreenSortMenuMostRecent": "Последние", + "nodesScreenSortMenuNameAZ": "Имя (А-Я)", + "nodesScreenSortMenuSignalStrength": "Уровень сигнала", + "nodesScreenSortName": "Имя", + "nodesScreenSortRecent": "Последние", + "nodesScreenSortSignal": "Сигнал", + "nodesScreenThisDevice": "Это устройство", + "nodesScreenTitle": "{count, plural, =1{Узел (1)} few{Узлы ({count})} many{Узлы ({count})} other{Узлы ({count})}}", "nodesScreenTransportMqtt": "MQTT", "nodesScreenTransportRf": "RF", - "nodesScreenYouBadge": "YOU", - "onboardingAutomationGeofence": "Base Camp Geofence", - "onboardingAutomationGeofenceDesc": "Enters designated area", - "onboardingAutomationLowBattery": "Low Battery Alert", - "onboardingAutomationLowBatteryDesc": "Battery drops below 20%", - "onboardingAutomationSilentWatch": "Node Silent Watch", - "onboardingAutomationSilentWatchDesc": "No contact for 30 min", - "onboardingAutomationSosKeyword": "SOS Keyword", - "onboardingAutomationSosKeywordDesc": "Message contains \"SOS\"", - "onboardingAutomationsAdvisor": "Set up rules once, and I'll monitor everything. Low battery? I'll alert you. Node goes silent? I'll let you know. SOS received? I'll trigger your webhook.", - "onboardingAutomationsDescription": "Trigger actions based on mesh events.\nBattery alerts, geofences, keywords, and more.", - "onboardingAutomationsTitle": "Intelligent Automations", - "onboardingCheckingRadio": "Checking radio configuration", - "onboardingConnectAdvisor": "Once connected, we operate completely offline. The mesh is waiting.", - "onboardingConnectDescription": "Pair your Meshtastic device to begin.\nBluetooth or USB - your choice.", - "onboardingConnectDeviceButton": "Connect Device", - "onboardingConnectTitle": "Ready to Connect", - "onboardingContinueButton": "Continue", - "onboardingDashboardAdvisor": "Widgets, maps, stats - arrange them however you work. Your mesh, your view, your control.", - "onboardingDashboardDescription": "Customizable dashboard with live telemetry.\nTrack nodes, monitor channels, visualize the network.", - "onboardingDashboardTitle": "Your Command Center", + "nodesScreenYouBadge": "ВЫ", + "onboardingAutomationGeofence": "Геозона базового лагеря", + "onboardingAutomationGeofenceDesc": "Вход в обозначенную зону", + "onboardingAutomationLowBattery": "Предупреждение о низком заряде", + "onboardingAutomationLowBatteryDesc": "Заряд батареи опускается ниже 20%", + "onboardingAutomationSilentWatch": "Молчание узла", + "onboardingAutomationSilentWatchDesc": "Нет связи в течение 30 мин", + "onboardingAutomationSosKeyword": "Ключевое слово SOS", + "onboardingAutomationSosKeywordDesc": "Сообщение содержит «SOS»", + "onboardingAutomationsAdvisor": "Настройте правила один раз — я буду следить за всем остальным. Низкий заряд? Сообщу. Узел замолчал? Предупрежу. Получен SOS? Активирую ваш вебхук.", + "onboardingAutomationsDescription": "Запускайте действия на основе событий сети.\nОповещения о батарее, геозоны, ключевые слова и многое другое.", + "onboardingAutomationsTitle": "Интеллектуальная автоматизация", + "onboardingCheckingRadio": "Проверка конфигурации радиоустройства", + "onboardingConnectAdvisor": "После подключения работа полностью автономна. Сеть ждёт.", + "onboardingConnectDescription": "Подключите устройство Meshtastic для начала работы.\nBluetooth или USB — на ваш выбор.", + "onboardingConnectDeviceButton": "Подключить устройство", + "onboardingConnectTitle": "Готово к подключению", + "onboardingContinueButton": "Продолжить", + "onboardingDashboardAdvisor": "Виджеты, карты, статистика — расположите их так, как удобно вам. Ваша сеть, ваш вид, ваш контроль.", + "onboardingDashboardDescription": "Настраиваемая панель с телеметрией в реальном времени.\nОтслеживайте узлы, следите за каналами, визуализируйте сеть.", + "onboardingDashboardTitle": "Ваш командный центр", "onboardingDeviceHeltec": "Heltec V3", - "onboardingDeviceHeltecCategory": "All-Purpose", - "onboardingDeviceHeltecDescription": "Versatile node with built-in display", + "onboardingDeviceHeltecCategory": "Универсальный", + "onboardingDeviceHeltecDescription": "Многофункциональный узел со встроенным дисплеем", "onboardingDeviceLilygo": "LilyGo T-Beam", - "onboardingDeviceLilygoCategory": "Long Range", - "onboardingDeviceLilygoDescription": "Maximum range with external antenna", - "onboardingDevicePopularBadge": "POPULAR", + "onboardingDeviceLilygoCategory": "Дальнобойный", + "onboardingDeviceLilygoDescription": "Максимальный радиус с внешней антенной", + "onboardingDevicePopularBadge": "ПОПУЛЯРНЫЙ", "onboardingDeviceRak": "RAK WisMesh", - "onboardingDeviceRakCategory": "Professional", - "onboardingDeviceRakDescription": "Industrial-grade reliability", + "onboardingDeviceRakCategory": "Профессиональный", + "onboardingDeviceRakDescription": "Промышленная надёжность", "onboardingDeviceSensecap": "SenseCAP T1000-E", - "onboardingDeviceSensecapCategory": "Tracker", - "onboardingDeviceSensecapDescription": "Compact GPS tracker with long battery life", - "onboardingEmotionConfiguratorTitle": "Emotion Configurator", - "onboardingEmotionResetDefaults": "Reset to Defaults", - "onboardingEmotionSettingsTooltip": "Settings", - "onboardingHardwareAdvisor": "Pick up a SenseCAP T1000-E for tracking, a Heltec V3 for range, or a RAK WisMesh for reliability. I'll work with any of them.", - "onboardingHardwareDescription": "Works with all Meshtastic-compatible devices.\nFrom compact trackers to long-range stations.", - "onboardingHardwareTitle": "Compatible Hardware", - "onboardingNodedexAdvisor": "Each node gets a unique sigil, a rarity tier, and a patina that deepens with every encounter. Collect them all — your NodeDex is your story across the mesh.", - "onboardingNodedexBaseCamp": "Base Camp Node", - "onboardingNodedexDescription": "Every node you encounter becomes a collectible card.\nBuild your field journal across the mesh.", - "onboardingNodedexEpic": "EPIC", - "onboardingNodedexLegendary": "LEGENDARY", - "onboardingNodedexRare": "RARE", - "onboardingNodedexStandard": "STANDARD", - "onboardingNodedexSummitRelay": "Summit Relay", - "onboardingNodedexTitle": "NodeDex — Collector Album", - "onboardingNodedexTrailMarker": "Trail Marker", - "onboardingNodedexValleyScout": "Valley Scout", - "onboardingOffGridAdvisor": "Every message hops through the mesh until it reaches its destination. Range measured in kilometers, not bars.", - "onboardingOffGridDescription": "No cellular towers. No internet required.\nTrue peer-to-peer radio communication.", - "onboardingOffGridTitle": "Off-Grid by Design", - "onboardingPrivacyAdvisor": "Everything is local unless you explicitly enable cloud sync. No tracking, no analytics, no compromise.", - "onboardingPrivacyDescription": "No accounts required. No cloud by default.\nYour data stays on your device.", - "onboardingPrivacyTitle": "Privacy First", - "onboardingSettingUpDevice": "Setting up your device...", - "onboardingSignalDirect": "Direct", - "onboardingSignalHopCount": "{count} hop", - "onboardingSignalLocationShared": "Location shared", - "onboardingSignalPhoto": "Photo", - "onboardingSignalTtlRemaining": "{minutes}m remaining", - "onboardingSignalsAdvisor": "Signals are what set us apart. Broadcast to everyone in range, watch them ripple through the network, then disappear on your terms.", - "onboardingSignalsDescription": "Ephemeral broadcasts across the mesh.\nShare presence, photos, and location - then let them fade.", - "onboardingSignalsTitle": "Signals", - "onboardingSkipButton": "Skip", - "onboardingWelcomeAdvisor": "I'm Ico, and I'll be your guide. Let me show you a communication platform that works when nothing else does.", - "onboardingWelcomeDescription": "The most advanced Meshtastic companion app.\nBuilt for professionals. Designed for everyone.", - "onboardingWelcomeTitle": "Welcome to Socialmesh", - "onboardingWidgetBattery": "Battery", - "onboardingWidgetDashboard": "Dashboard", + "onboardingDeviceSensecapCategory": "Трекер", + "onboardingDeviceSensecapDescription": "Компактный GPS-трекер с длительным временем работы от батареи", + "onboardingEmotionConfiguratorTitle": "Настройка эмоций", + "onboardingEmotionResetDefaults": "Сбросить до значений по умолчанию", + "onboardingEmotionSettingsTooltip": "Настройки", + "onboardingHardwareAdvisor": "Возьмите SenseCAP T1000-E для отслеживания, Heltec V3 для дальности или RAK WisMesh для надёжности. Я работаю с любым из них.", + "onboardingHardwareDescription": "Совместимо со всеми устройствами Meshtastic.\nОт компактных трекеров до дальнобойных станций.", + "onboardingHardwareTitle": "Совместимое оборудование", + "onboardingNodedexAdvisor": "Каждый узел получает уникальный Sigil, уровень редкости и патину, которая углубляется с каждой встречей. Соберите их все — ваш NodeDex — это ваша история в сети.", + "onboardingNodedexBaseCamp": "Узел базового лагеря", + "onboardingNodedexDescription": "Каждый встреченный узел становится коллекционной карточкой.\nСоздавайте свой полевой журнал по всей сети.", + "onboardingNodedexEpic": "ЭПИЧЕСКИЙ", + "onboardingNodedexLegendary": "ЛЕГЕНДАРНЫЙ", + "onboardingNodedexRare": "РЕДКИЙ", + "onboardingNodedexStandard": "СТАНДАРТНЫЙ", + "onboardingNodedexSummitRelay": "Ретранслятор на вершине", + "onboardingNodedexTitle": "NodeDex — Альбом коллекционера", + "onboardingNodedexTrailMarker": "Маркер маршрута", + "onboardingNodedexValleyScout": "Разведчик долины", + "onboardingOffGridAdvisor": "Каждое сообщение прыгает по сети, пока не достигнет адресата. Дальность — в километрах, а не в делениях сигнала.", + "onboardingOffGridDescription": "Без сотовых вышек. Без интернета.\nНастоящая одноранговая радиосвязь.", + "onboardingOffGridTitle": "Автономность — по умолчанию", + "onboardingPrivacyAdvisor": "Всё хранится локально, если вы явно не включили облачную синхронизацию. Без слежки, без аналитики, без компромиссов.", + "onboardingPrivacyDescription": "Без обязательной регистрации. Без облака по умолчанию.\nВаши данные остаются на вашем устройстве.", + "onboardingPrivacyTitle": "Приватность прежде всего", + "onboardingSettingUpDevice": "Настройка устройства...", + "onboardingSignalDirect": "Прямой", + "onboardingSignalHopCount": "{count} хоп", + "onboardingSignalLocationShared": "Местоположение передано", + "onboardingSignalPhoto": "Фото", + "onboardingSignalTtlRemaining": "Осталось {minutes} мин.", + "onboardingSignalsAdvisor": "Сигналы — это то, что отличает нас. Транслируйте всем в зоне доступности, наблюдайте, как они распространяются по сети, и удаляйте их по вашему желанию.", + "onboardingSignalsDescription": "Эфемерные трансляции по всей сети.\nПоделитесь присутствием, фото и местоположением — и пусть они исчезнут.", + "onboardingSignalsTitle": "Сигналы", + "onboardingSkipButton": "Пропустить", + "onboardingWelcomeAdvisor": "Я Ico, ваш гид. Позвольте показать вам коммуникационную платформу, которая работает там, где всё остальное не работает.", + "onboardingWelcomeDescription": "Самое продвинутое приложение для Meshtastic.\nСоздано для профессионалов. Разработано для всех.", + "onboardingWelcomeTitle": "Добро пожаловать в Socialmesh", + "onboardingWidgetBattery": "Батарея", + "onboardingWidgetDashboard": "Панель", "onboardingWidgetLiveBadge": "LIVE", - "onboardingWidgetNodesOnline": "Nodes Online", + "onboardingWidgetNodesOnline": "Узлов онлайн", "onboardingWidgetSnrDb": "SNR dB", - "paxCounterAboutSubtitle": "PAX Counter passively listens for WiFi and Bluetooth probe requests from nearby devices. It does not store MAC addresses or any personal data.", - "paxCounterAboutTitle": "About PAX Counter", - "paxCounterCardSubtitle": "Counts nearby WiFi and Bluetooth devices", + "paxCounterAboutSubtitle": "PAX Counter пассивно прослушивает WiFi- и Bluetooth-зондирующие запросы от ближайших устройств. MAC-адреса и персональные данные не сохраняются.", + "paxCounterAboutTitle": "О PAX Counter", + "paxCounterCardSubtitle": "Подсчёт ближайших WiFi и Bluetooth устройств", "paxCounterCardTitle": "PAX Counter", - "paxCounterEnable": "Enable PAX Counter", - "paxCounterEnableSubtitle": "Count nearby devices and report to mesh", - "paxCounterIntervalMinutes": "{minutes} minutes", - "paxCounterMaxLabel": "60 min", - "paxCounterMinLabel": "1 min", - "paxCounterSave": "Save", - "paxCounterSaveError": "Failed to save: {error}", - "paxCounterSaved": "PAX counter config saved", + "paxCounterEnable": "Включить PAX Counter", + "paxCounterEnableSubtitle": "Считать ближайшие устройства и передавать данные в сеть", + "paxCounterIntervalMinutes": "{minutes} мин.", + "paxCounterMaxLabel": "60 мин.", + "paxCounterMinLabel": "1 мин.", + "paxCounterSave": "Сохранить", + "paxCounterSaveError": "Не удалось сохранить: {error}", + "paxCounterSaved": "Конфигурация PAX Counter сохранена", "paxCounterTitle": "PAX Counter", - "paxCounterUpdateInterval": "Update Interval", - "presenceAllNodes": "All Nodes", - "presenceBackNearby": "Back nearby", - "presenceBroadcastInfo": "Your intent and status are broadcast with your signals.", - "presenceClear": "Clear", - "presenceEmptyTagline1": "No nodes discovered yet.\nConnect to a mesh device to see nearby presence.", - "presenceEmptyTagline2": "Presence shows who is active on your mesh.\nNodes appear as they broadcast.", - "presenceEmptyTagline3": "Watch nodes come and go in real time.\nActive, fading, and offline states.", - "presenceEmptyTagline4": "Familiar faces are highlighted.\nBuild your mesh community over time.", - "presenceEmptyTitleKeyword": "presence", - "presenceEmptyTitlePrefix": "No ", - "presenceEmptyTitleSuffix": " detected", - "presenceFamiliarBadge": "Familiar", - "presenceFilterActive": "Active", - "presenceFilterAll": "All", - "presenceFilterFading": "Seen recently", - "presenceFilterFamiliar": "Familiar", - "presenceFilterInactive": "Inactive", - "presenceFilterUnknown": "Unknown", - "presenceIntentLabel": "Intent", - "presenceIntentUpdated": "Presence intent updated", - "presenceLegendMedium": "2-10 min", - "presenceLegendShort": "< 2 min", - "presenceMyPresence": "My Presence", - "presenceNoMatchFilter": "No nodes match this filter", - "presenceNoMatchSearch": "No nodes match your search", + "paxCounterUpdateInterval": "Интервал обновления", + "presenceAllNodes": "Все узлы", + "presenceBackNearby": "Снова рядом", + "presenceBroadcastInfo": "Ваши намерения и статус передаются вместе с вашими сигналами.", + "presenceClear": "Очистить", + "presenceEmptyTagline1": "Узлы ещё не обнаружены.\nПодключитесь к сетевому устройству, чтобы видеть присутствие.", + "presenceEmptyTagline2": "Присутствие показывает, кто активен в вашей сети.\nУзлы появляются по мере трансляции.", + "presenceEmptyTagline3": "Наблюдайте за появлением и исчезновением узлов в реальном времени.\nСостояния: активный, затухающий, офлайн.", + "presenceEmptyTagline4": "Знакомые лица выделены.\nСтройте сообщество в вашей сети постепенно.", + "presenceEmptyTitleKeyword": "присутствия", + "presenceEmptyTitlePrefix": "Нет ", + "presenceEmptyTitleSuffix": " не обнаружено", + "presenceFamiliarBadge": "Знакомый", + "presenceFilterActive": "Активные", + "presenceFilterAll": "Все", + "presenceFilterFading": "Видели недавно", + "presenceFilterFamiliar": "Знакомые", + "presenceFilterInactive": "Неактивные", + "presenceFilterUnknown": "Неизвестные", + "presenceIntentLabel": "Намерение", + "presenceIntentUpdated": "Намерение присутствия обновлено", + "presenceLegendMedium": "2–10 мин.", + "presenceLegendShort": "< 2 мин.", + "presenceMyPresence": "Моё присутствие", + "presenceNoMatchFilter": "Узлы не соответствуют фильтру", + "presenceNoMatchSearch": "Узлы не соответствуют запросу", "presenceNodeCount": "{count} {noun}", - "presenceNodePlural": "nodes", - "presenceNodeSingular": "node", - "presenceQuietMesh": "Mesh is quiet right now — nodes appear as they come online.", - "presenceRecentActivity": "Recent Activity", - "presenceSave": "Save", - "presenceSearchHint": "Search nodes", - "presenceSectionActive": "Active", - "presenceSectionInactive": "Inactive", - "presenceSectionSeenRecently": "Seen Recently", - "presenceSectionUnknown": "Unknown", - "presenceSelectIntent": "Select Intent", - "presenceSetStatus": "Set Status", - "presenceShowAll": "Show all nodes", - "presenceStatusHint": "What are you up to?", - "presenceStatusLabel": "Status", - "presenceStatusNotSet": "Not set", - "presenceStatusUpdated": "Status updated", - "presenceTitle": "Presence", - "presenceTryDifferent": "Try a different search or filter", - "presenceWillAppear": "Nodes will appear here as they are discovered", - "productDetailAnonymous": "Anonymous", - "productDetailBattery": "Battery", - "productDetailBeFirstReviewer": "Be the first to review this product!", + "presenceNodePlural": "узлов", + "presenceNodeSingular": "узел", + "presenceQuietMesh": "Сеть сейчас тиха — узлы появятся по мере выхода в онлайн.", + "presenceRecentActivity": "Последняя активность", + "presenceSave": "Сохранить", + "presenceSearchHint": "Поиск узлов", + "presenceSectionActive": "Активные", + "presenceSectionInactive": "Неактивные", + "presenceSectionSeenRecently": "Видели недавно", + "presenceSectionUnknown": "Неизвестные", + "presenceSelectIntent": "Выбрать намерение", + "presenceSetStatus": "Установить статус", + "presenceShowAll": "Показать все узлы", + "presenceStatusHint": "Чем вы занимаетесь?", + "presenceStatusLabel": "Статус", + "presenceStatusNotSet": "Не задан", + "presenceStatusUpdated": "Статус обновлён", + "presenceTitle": "Присутствие", + "presenceTryDifferent": "Попробуйте другой запрос или фильтр", + "presenceWillAppear": "Узлы появятся здесь по мере обнаружения", + "productDetailAnonymous": "Аноним", + "productDetailBattery": "Аккумулятор", + "productDetailBeFirstReviewer": "Станьте первым, кто оставит отзыв на этот товар!", "productDetailBluetooth": "Bluetooth", - "productDetailBuyNow": "Buy Now", - "productDetailBySeller": "by {seller}", - "productDetailCancel": "Cancel", - "productDetailChipset": "Chipset", - "productDetailContactSeller": "Contact Seller", - "productDetailContactToPurchase": "Contact the seller to purchase this product.", - "productDetailDaysAgo": "{count} days ago", - "productDetailDescription": "Description", - "productDetailDimensions": "Dimensions", - "productDetailDiscountBadge": "-{percent}% OFF", - "productDetailDisplay": "Display", - "productDetailEdit": "Edit", - "productDetailErrorLoading": "Error loading product", - "productDetailEstimatedDelivery": "Estimated {days} days", - "productDetailFeatures": "Features", - "productDetailFirmware": "Firmware", - "productDetailFreeShipping": "Free Shipping", - "productDetailFrequencyBands": "Frequency Bands", - "productDetailGoBack": "Go Back", + "productDetailBuyNow": "Купить сейчас", + "productDetailBySeller": "от {seller}", + "productDetailCancel": "Отмена", + "productDetailChipset": "Чипсет", + "productDetailContactSeller": "Связаться с продавцом", + "productDetailContactToPurchase": "Свяжитесь с продавцом для приобретения этого товара.", + "productDetailDaysAgo": "{count} дн. назад", + "productDetailDescription": "Описание", + "productDetailDimensions": "Размеры", + "productDetailDiscountBadge": "-{percent}% СКИДКА", + "productDetailDisplay": "Дисплей", + "productDetailEdit": "Изменить", + "productDetailErrorLoading": "Ошибка загрузки товара", + "productDetailEstimatedDelivery": "Примерно {days} дней", + "productDetailFeatures": "Характеристики", + "productDetailFirmware": "Прошивка", + "productDetailFreeShipping": "Бесплатная доставка", + "productDetailFrequencyBands": "Частотные диапазоны", + "productDetailGoBack": "Назад", "productDetailGps": "GPS", - "productDetailHardwareVersion": "Hardware Version", + "productDetailHardwareVersion": "Версия аппаратного обеспечения", "productDetailImageCounter": "{current} / {total}", - "productDetailInStockCount": "In Stock ({quantity} available)", - "productDetailIncludedAccessories": "Included Accessories", - "productDetailLoraChip": "LoRa Chip", - "productDetailMeshtasticCompatible": "Meshtastic Compatible", - "productDetailMonthsAgo": "{count} months ago", - "productDetailNoReviews": "No reviews yet", - "productDetailNotFound": "Product not found", - "productDetailOutOfStock": "Out of Stock", - "productDetailOutOfStockButton": "Out of Stock", - "productDetailPurchaseDisclaimer": "Purchases completed on seller's official store", - "productDetailPurchaseTitle": "Purchase", - "productDetailReadMore": "Read More", - "productDetailRetry": "Retry", - "productDetailReviewCount": "({count} reviews)", - "productDetailReviewHint": "Share your experience with this product...", - "productDetailReviewPrivacyNotice": "Your review will be public and posted as \"{userName}\". Reviews are moderated before appearing on the product page.", - "productDetailReviewSubmitted": "Review submitted for moderation. Thank you!", - "productDetailReviewTitleLabel": "Title (optional)", - "productDetailReviewValidation": "Please write a review description", - "productDetailReviewVerified": "Verified", - "productDetailReviews": "Reviews", - "productDetailSelectedPrice": "Selected: ${price}", - "productDetailSellerResponse": "Seller Response", - "productDetailShipping": "Shipping", - "productDetailShippingCost": "Shipping: ${cost}", - "productDetailShipsTo": "Ships to: {countries}", - "productDetailShowLess": "Show Less", - "productDetailSignInFavorites": "Sign in to save favorites", - "productDetailSoldCount": "{count} sold", - "productDetailSubmitReview": "Submit Review", - "productDetailTechSpecs": "Technical Specifications", - "productDetailTitle": "Product", - "productDetailToday": "Today", - "productDetailTotal": "Total", - "productDetailUnableToLoadPage": "Unable to load page", - "productDetailUnableToLoadReviews": "Unable to load reviews", - "productDetailVendorVerified": "Vendor Verified", - "productDetailVerifiedOn": "Verified on {date}", - "productDetailWebviewOffline": "This content requires an internet connection. Please check your connection and try again.", - "productDetailWeeksAgo": "{count} weeks ago", - "productDetailWeight": "Weight", + "productDetailInStockCount": "В наличии ({quantity} шт.)", + "productDetailIncludedAccessories": "Комплектующие", + "productDetailLoraChip": "Чип LoRa", + "productDetailMeshtasticCompatible": "Совместимо с Meshtastic", + "productDetailMonthsAgo": "{count} мес. назад", + "productDetailNoReviews": "Отзывов пока нет", + "productDetailNotFound": "Товар не найден", + "productDetailOutOfStock": "Нет в наличии", + "productDetailOutOfStockButton": "Нет в наличии", + "productDetailPurchaseDisclaimer": "Покупки завершаются в официальном магазине продавца", + "productDetailPurchaseTitle": "Покупка", + "productDetailReadMore": "Подробнее", + "productDetailRetry": "Повторить", + "productDetailReviewCount": "({count} отзывов)", + "productDetailReviewHint": "Поделитесь впечатлениями об этом товаре...", + "productDetailReviewPrivacyNotice": "Ваш отзыв будет опубликован под именем «{userName}». Отзывы проверяются модераторами перед публикацией на странице товара.", + "productDetailReviewSubmitted": "Отзыв отправлен на модерацию. Спасибо!", + "productDetailReviewTitleLabel": "Заголовок (необязательно)", + "productDetailReviewValidation": "Пожалуйста, напишите описание отзыва", + "productDetailReviewVerified": "Подтверждённый", + "productDetailReviews": "Отзывы", + "productDetailSelectedPrice": "Выбрано: ${price}", + "productDetailSellerResponse": "Ответ продавца", + "productDetailShipping": "Доставка", + "productDetailShippingCost": "Доставка: ${cost}", + "productDetailShipsTo": "Доставка в: {countries}", + "productDetailShowLess": "Свернуть", + "productDetailSignInFavorites": "Войдите, чтобы сохранить избранное", + "productDetailSoldCount": "Продано: {count}", + "productDetailSubmitReview": "Отправить отзыв", + "productDetailTechSpecs": "Технические характеристики", + "productDetailTitle": "Товар", + "productDetailToday": "Сегодня", + "productDetailTotal": "Итого", + "productDetailUnableToLoadPage": "Не удалось загрузить страницу", + "productDetailUnableToLoadReviews": "Не удалось загрузить отзывы", + "productDetailVendorVerified": "Продавец проверен", + "productDetailVerifiedOn": "Проверено {date}", + "productDetailWebviewOffline": "Для отображения этого контента требуется подключение к интернету. Проверьте подключение и повторите попытку.", + "productDetailWeeksAgo": "{count} нед. назад", + "productDetailWeight": "Вес", "productDetailWifi": "WiFi", - "productDetailWriteReview": "Write Review", - "productDetailWriteReviewTitle": "Write a Review", - "productDetailYearsAgo": "{count} years ago", - "productDetailYesterday": "Yesterday", - "productDetailYourRating": "Your Rating", - "productDetailYourReview": "Your Review *", - "profileBasicInfo": "Basic Info", - "profileBioHint": "Tell us about yourself", - "profileBioLabel": "Bio", - "profileCallsignHint": "Amateur radio callsign or identifier", - "profileCallsignInappropriate": "Callsign cannot contain inappropriate content", - "profileCallsignLabel": "Callsign", - "profileCallsignMax": "Max 10 characters", - "profileCloudBackup": "Cloud Backup", - "profileCloudStartingUp": "Cloud services starting up — try again shortly", - "profileContinueApple": "Continue with Apple", - "profileContinueGitHub": "Continue with GitHub", - "profileContinueGoogle": "Continue with Google", - "profileCopiedToClipboard": "{label} copied to clipboard", - "profileCreate": "Create Profile", - "profileDeleteAccount": "Delete Account", - "profileDeleteConfirmMsg": "This will permanently delete your account and all associated data. This action cannot be undone.", - "profileDeleteRequiresInternet": "Deleting your account requires an internet connection.", - "profileDeletingAccount": "Deleting account...", - "profileDeletionFailed": "Deletion failed. Please try again or contact support.", - "profileDetailsSection": "Details", + "productDetailWriteReview": "Написать отзыв", + "productDetailWriteReviewTitle": "Написать отзыв", + "productDetailYearsAgo": "{count} лет назад", + "productDetailYesterday": "Вчера", + "productDetailYourRating": "Ваша оценка", + "productDetailYourReview": "Ваш отзыв *", + "profileBasicInfo": "Основная информация", + "profileBioHint": "Расскажите о себе", + "profileBioLabel": "Биография", + "profileCallsignHint": "Позывной радиолюбителя или идентификатор", + "profileCallsignInappropriate": "Позывной не может содержать недопустимый контент", + "profileCallsignLabel": "Позывной", + "profileCallsignMax": "Максимум 10 символов", + "profileCloudBackup": "Облачное резервное копирование", + "profileCloudStartingUp": "Облачные сервисы запускаются — попробуйте снова через некоторое время", + "profileContinueApple": "Продолжить с Apple", + "profileContinueGitHub": "Продолжить с GitHub", + "profileContinueGoogle": "Продолжить с Google", + "profileCopiedToClipboard": "{label} скопировано в буфер обмена", + "profileCreate": "Создать профиль", + "profileDeleteAccount": "Удалить аккаунт", + "profileDeleteConfirmMsg": "Это действие навсегда удалит ваш аккаунт и все связанные данные. Действие нельзя отменить.", + "profileDeleteRequiresInternet": "Для удаления аккаунта требуется подключение к интернету.", + "profileDeletingAccount": "Удаление аккаунта...", + "profileDeletionFailed": "Удаление не удалось. Пожалуйста, попробуйте снова или обратитесь в поддержку.", + "profileDetailsSection": "Подробности", "profileDiscordHint": "username#0000", "profileDiscordLabel": "Discord", - "profileDisplayNameHint": "How you want to be known", - "profileDisplayNameLabel": "Display Name", - "profileEditButton": "Edit Profile", - "profileEditSheetTitle": "Edit Profile", - "profileEditTooltip": "Edit Profile", + "profileDisplayNameHint": "Как вас будут знать", + "profileDisplayNameLabel": "Отображаемое имя", + "profileEditButton": "Редактировать профиль", + "profileEditSheetTitle": "Редактировать профиль", + "profileEditTooltip": "Редактировать профиль", "profileEmailLabel": "Email", - "profileErrorWithMessage": "Error: {message}", + "profileErrorWithMessage": "Ошибка: {message}", "profileGitHubHint": "username", "profileGitHubLabel": "GitHub", - "profileGitHubLinked": "GitHub account linked successfully!", - "profileHelpTooltip": "Help", - "profileLinkFailed": "Failed to link accounts", - "profileLinkGitHub": "Link GitHub Account", - "profileLinkGitHubMsg": "An account with {email} already exists using {provider}.\n\nSign in with {provider} to link your GitHub account?", - "profileLinkedAccounts": "Linked accounts", - "profileLinksSection": "Links", + "profileGitHubLinked": "Аккаунт GitHub успешно привязан!", + "profileHelpTooltip": "Справка", + "profileLinkFailed": "Не удалось связать аккаунты", + "profileLinkGitHub": "Привязать аккаунт GitHub", + "profileLinkGitHubMsg": "Аккаунт с адресом {email} уже существует и использует {provider}.\n\nВойти через {provider}, чтобы привязать аккаунт GitHub?", + "profileLinkedAccounts": "Связанные аккаунты", + "profileLinksSection": "Ссылки", "profileMastodonHint": "@user@instance.social", "profileMastodonLabel": "Mastodon", - "profileMemberSince": "Member since", - "profileNoInternet": "No internet connection", - "profileNotBackedUp": "Not backed up", - "profileSetup": "Set up your profile", - "profileSetupDesc": "Add your name, photo, and bio to personalize your mesh presence.", - "profileSignInDesc": "Sign in to backup your profile to the cloud and sync across devices.", - "profileSignInFailed": "Sign in failed", - "profileSignInRequiresInternet": "Sign-in requires an internet connection.", - "profileSignInServicesUnavailable": "Unable to connect to sign-in services. Check your internet connection and try again.", - "profileSignInWithProvider": "Sign in with {provider}", - "profileSignOut": "Sign Out", - "profileSignOutConfirm": "Are you sure you want to sign out?", - "profileSignOutRequiresInternet": "Signing out requires an internet connection.", - "profileSignedInApple": "Signed in with Apple", - "profileSignedInGitHub": "Signed in with GitHub", - "profileSignedInGoogle": "Signed in with Google", - "profileSigningIn": "Signing in...", - "profileSocialSection": "Social", - "profileSyncError": "Sync error • Tap to retry", - "profileSyncFailed": "Sync failed", - "profileSyncPermissionDenied": "Sync permission denied", - "profileSyncRequiresInternet": "Syncing requires an internet connection.", - "profileSyncTempUnavailable": "Sync temporarily unavailable", - "profileSyncTempUnavailable2": "Cloud sync temporarily unavailable", - "profileSyncTimedOut": "Sync timed out — try again", - "profileSynced": "Synced • {email}", - "profileSynced2": "Profile synced!", - "profileSyncing": "Syncing...", + "profileMemberSince": "Участник с", + "profileNoInternet": "Нет подключения к интернету", + "profileNotBackedUp": "Резервная копия не создана", + "profileSetup": "Настройте свой профиль", + "profileSetupDesc": "Добавьте имя, фото и биографию, чтобы персонализировать своё присутствие в сети.", + "profileSignInDesc": "Войдите, чтобы создать резервную копию профиля в облаке и синхронизировать данные на всех устройствах.", + "profileSignInFailed": "Ошибка входа", + "profileSignInRequiresInternet": "Для входа требуется подключение к интернету.", + "profileSignInServicesUnavailable": "Не удаётся подключиться к службе входа. Проверьте подключение к интернету и повторите попытку.", + "profileSignInWithProvider": "Войти через {provider}", + "profileSignOut": "Выйти", + "profileSignOutConfirm": "Вы уверены, что хотите выйти?", + "profileSignOutRequiresInternet": "Для выхода требуется подключение к интернету.", + "profileSignedInApple": "Выполнен вход через Apple", + "profileSignedInGitHub": "Выполнен вход через GitHub", + "profileSignedInGoogle": "Выполнен вход через Google", + "profileSigningIn": "Выполняется вход...", + "profileSocialSection": "Социальные сети", + "profileSyncError": "Ошибка синхронизации • Нажмите, чтобы повторить", + "profileSyncFailed": "Синхронизация не удалась", + "profileSyncPermissionDenied": "Доступ к синхронизации запрещён", + "profileSyncRequiresInternet": "Для синхронизации требуется подключение к интернету.", + "profileSyncTempUnavailable": "Синхронизация временно недоступна", + "profileSyncTempUnavailable2": "Облачная синхронизация временно недоступна", + "profileSyncTimedOut": "Время синхронизации истекло — попробуйте снова", + "profileSynced": "Синхронизировано • {email}", + "profileSynced2": "Профиль синхронизирован!", + "profileSyncing": "Синхронизация...", "profileTelegramHint": "username", "profileTelegramLabel": "Telegram", - "profileTitle": "Profile", + "profileTitle": "Профиль", "profileTwitterHint": "username", "profileTwitterLabel": "Twitter / X", "profileUidLabel": "UID", - "profileUrlInvalid": "Please enter a valid URL", - "profileUrlMustStartHttp": "URL must start with http:// or https://", + "profileUrlInvalid": "Пожалуйста, введите корректный URL", + "profileUrlMustStartHttp": "URL должен начинаться с http:// или https://", "profileWebsiteHint": "https://example.com", - "profileWebsiteLabel": "Website", - "qrScannerAddNodeConfirm": "Add Node", - "qrScannerAddNodePrompt": "Add \"{name}\" to your tracked nodes?", - "qrScannerAddNodeTitle": "Add Node", - "qrScannerCancel": "Cancel", - "qrScannerCancelAdd": "Cancel", - "qrScannerChannelAlreadyExists": "You already have this channel as \"{name}\"", - "qrScannerChannelCancel": "Cancel", - "qrScannerChannelEditFirst": "Edit First", - "qrScannerChannelImport": "Import", - "qrScannerChannelImported": "Channel \"{name}\" imported", - "qrScannerChannelInfoEncryption": "Encryption", - "qrScannerChannelInfoName": "Name", - "qrScannerChannelSyncNotice": "The channel will be synced to your connected device.", - "qrScannerConnectDeviceToImport": "Connect a device to import this channel", - "qrScannerFailedToProcess": "Failed to process QR code: {error}", - "qrScannerImportChannelTitle": "Import Channel", - "qrScannerImportFailed": "Import failed: {error}", - "qrScannerImportedChannelName": "Imported", - "qrScannerMaxChannels": "Maximum 8 channels - delete one first", - "qrScannerNodeAddedToFavorites": "Node \"{name}\" added to favorites", - "qrScannerNodeAlreadyExists": "Node Already Exists", - "qrScannerNodeAlreadyInList": "This node is already in your list as \"{name}\".", - "qrScannerNodeInfoId": "Node ID", - "qrScannerNodeInfoName": "Name", - "qrScannerNodeInfoShort": "Short", - "qrScannerPrompt": "Point your camera at a QR code", - "qrScannerSupportsHint": "Supports nodes, channels, automations, and more", - "qrScannerTitle": "Scan QR Code", - "qrScannerUpdate": "Update", - "qrScannerUpdateNamePrompt": "Update name to \"{name}\" and add to favorites?", - "reachabilityAboutTitle": "About Reachability", - "reachabilityAboutTooltip": "About Reachability", - "reachabilityBetaBadge": "BETA", - "reachabilityDisclaimerBanner": "Likelihood estimates only. Delivery is never guaranteed in a mesh network.", - "reachabilityEmptyDescription": "Nodes will appear as they're observed\non the mesh network.", - "reachabilityEmptyTitle": "No nodes discovered yet", - "reachabilityGotIt": "Got it", - "reachabilityHowCalculatedContent": "The likelihood score combines several factors:\n• Freshness: How recently we heard from the node\n• Path Depth: Number of hops observed\n• Signal Quality: RSSI and SNR when available\n• Observation Pattern: Direct vs relayed packets\n• ACK History: DM acknowledgement success rate", - "reachabilityHowCalculatedTitle": "How is it calculated?", - "reachabilityLevelHigh": "High", - "reachabilityLevelLow": "Low", - "reachabilityLevelMedium": "Medium", - "reachabilityLevelsMeanContent": "• High: Strong recent indicators, but not guaranteed\n• Medium: Moderate confidence based on available data\n• Low: Weak or stale indicators, delivery unlikely", - "reachabilityLevelsMeanTitle": "What the levels mean", - "reachabilityLimitationsContent": "• Meshtastic has no true routing tables\n• No end-to-end acknowledgements exist\n• Forwarding is opportunistic\n• Mesh topology changes constantly\n• All estimates based on passive observation only", - "reachabilityLimitationsTitle": "Important limitations", + "profileWebsiteLabel": "Веб-сайт", + "qrScannerAddNodeConfirm": "Добавить узел", + "qrScannerAddNodePrompt": "Добавить «{name}» в отслеживаемые узлы?", + "qrScannerAddNodeTitle": "Добавить узел", + "qrScannerCancel": "Отмена", + "qrScannerCancelAdd": "Отмена", + "qrScannerChannelAlreadyExists": "У вас уже есть этот канал под названием «{name}»", + "qrScannerChannelCancel": "Отмена", + "qrScannerChannelEditFirst": "Сначала изменить", + "qrScannerChannelImport": "Импортировать", + "qrScannerChannelImported": "Канал «{name}» импортирован", + "qrScannerChannelInfoEncryption": "Шифрование", + "qrScannerChannelInfoName": "Название", + "qrScannerChannelSyncNotice": "Канал будет синхронизирован с подключённым устройством.", + "qrScannerConnectDeviceToImport": "Подключите устройство для импорта этого канала", + "qrScannerFailedToProcess": "Не удалось обработать QR-код: {error}", + "qrScannerImportChannelTitle": "Импортировать канал", + "qrScannerImportFailed": "Импорт не выполнен: {error}", + "qrScannerImportedChannelName": "Импортировано", + "qrScannerMaxChannels": "Максимум 8 каналов — сначала удалите один", + "qrScannerNodeAddedToFavorites": "Узел «{name}» добавлен в избранное", + "qrScannerNodeAlreadyExists": "Узел уже существует", + "qrScannerNodeAlreadyInList": "Этот узел уже есть в вашем списке под именем «{name}».", + "qrScannerNodeInfoId": "ID узла", + "qrScannerNodeInfoName": "Название", + "qrScannerNodeInfoShort": "Краткое", + "qrScannerPrompt": "Наведите камеру на QR-код", + "qrScannerSupportsHint": "Поддерживаются узлы, каналы, автоматизации и многое другое", + "qrScannerTitle": "Сканировать QR-код", + "qrScannerUpdate": "Обновить", + "qrScannerUpdateNamePrompt": "Обновить имя на «{name}» и добавить в избранное?", + "reachabilityAboutTitle": "О достижимости", + "reachabilityAboutTooltip": "О достижимости", + "reachabilityBetaBadge": "БЕТА", + "reachabilityDisclaimerBanner": "Только оценки вероятности. Доставка в сети никогда не гарантирована.", + "reachabilityEmptyDescription": "Узлы будут появляться по мере их обнаружения\nв сети.", + "reachabilityEmptyTitle": "Узлы ещё не обнаружены", + "reachabilityGotIt": "Понятно", + "reachabilityHowCalculatedContent": "Оценка вероятности учитывает несколько факторов:\n• Актуальность: как давно мы получали сигнал от узла\n• Глубина пути: наблюдаемое число прыжков\n• Качество сигнала: RSSI и SNR при наличии данных\n• Характер наблюдений: прямые или ретранслированные пакеты\n• История ACK: успешность подтверждений личных сообщений", + "reachabilityHowCalculatedTitle": "Как рассчитывается?", + "reachabilityLevelHigh": "Высокая", + "reachabilityLevelLow": "Низкая", + "reachabilityLevelMedium": "Средняя", + "reachabilityLevelsMeanContent": "• Высокая: сильные недавние показатели, но без гарантий\n• Средняя: умеренная уверенность на основе имеющихся данных\n• Низкая: слабые или устаревшие показатели, доставка маловероятна", + "reachabilityLevelsMeanTitle": "Что означают уровни", + "reachabilityLimitationsContent": "• Meshtastic не имеет истинных таблиц маршрутизации\n• Сквозных подтверждений не существует\n• Пересылка осуществляется по возможности\n• Топология сети постоянно меняется\n• Все оценки основаны только на пассивном наблюдении", + "reachabilityLimitationsTitle": "Важные ограничения", "reachabilityScorePercent": "{percentage}%", - "reachabilityScoringModelContent": "Opportunistic Mesh Reach Likelihood Model (v1) — BETA\n\nA heuristic scoring model that estimates likelihood of reaching a node based on observed RF metrics and packet history. This score represents likelihood, not reachability. Meshtastic forwards packets opportunistically without routing. A high score does not guarantee delivery.", - "reachabilityScoringModelTitle": "Scoring Model", - "reachabilityScreenTitle": "Reachability", - "reachabilitySearchHint": "Search nodes", - "reachabilityWhatIsThisContent": "This screen shows a probabilistic estimate of how likely your messages will reach each node. It is NOT a guarantee of delivery.", - "reachabilityWhatIsThisTitle": "What is this?", - "regionSelectionApplyDialogConfirm": "Continue", - "regionSelectionApplyDialogMessageChange": "Changing the region will cause your device to reboot. This may take up to 30 seconds.\n\nYou will be briefly disconnected while the device restarts.", - "regionSelectionApplyDialogMessageInitial": "Your device will reboot to apply the region settings. This may take up to 30 seconds.\n\nThe app will automatically reconnect when ready.", - "regionSelectionApplyDialogTitle": "Apply Region", - "regionSelectionApplying": "Applying...", - "regionSelectionBannerSubtitle": "Choose the correct frequency for your location to comply with local regulations.", - "regionSelectionBannerTitle": "Important: Select Your Region", - "regionSelectionBluetoothSettings": "Bluetooth Settings", - "regionSelectionContinue": "Continue", - "regionSelectionCurrentBadge": "CURRENT", - "regionSelectionDeviceDisconnected": "Device disconnected. Please reconnect and try again.", - "regionSelectionOpenBluetoothSettingsError": "Could not open Bluetooth Settings. Please open Settings > Bluetooth manually.", - "regionSelectionPairingHintMessage": "Bluetooth pairing was removed. Forget \"Meshtastic_XXXX\" in Settings > Bluetooth and reconnect to continue.", - "regionSelectionPairingInvalidation": "Your phone removed the stored pairing info for this device.\nGo to Settings > Bluetooth, forget the Meshtastic device, and try again.", - "regionSelectionReconnectTimeout": "Reconnect timed out. Please try again.", - "regionSelectionRegionAnz": "Australia/NZ", - "regionSelectionRegionAnzDesc": "Australia and New Zealand", + "reachabilityScoringModelContent": "Модель оценки вероятности достижения узла (v1) — БЕТА\n\nЭвристическая модель, определяющая вероятность доставки до узла на основе наблюдаемых RF-метрик и истории пакетов. Оценка отражает вероятность, а не гарантию достижимости. Meshtastic пересылает пакеты по возможности без маршрутизации. Высокая оценка не гарантирует доставку.", + "reachabilityScoringModelTitle": "Модель оценки", + "reachabilityScreenTitle": "Достижимость", + "reachabilitySearchHint": "Поиск узлов", + "reachabilityWhatIsThisContent": "На этом экране отображается вероятностная оценка того, насколько вероятно, что ваши сообщения дойдут до каждого узла. Это НЕ гарантия доставки.", + "reachabilityWhatIsThisTitle": "Что это такое?", + "regionSelectionApplyDialogConfirm": "Продолжить", + "regionSelectionApplyDialogMessageChange": "Изменение региона приведёт к перезагрузке устройства. Это может занять до 30 секунд.\n\nВо время перезапуска устройства соединение будет кратковременно прервано.", + "regionSelectionApplyDialogMessageInitial": "Устройство перезагрузится для применения настроек региона. Это может занять до 30 секунд.\n\nПриложение автоматически переподключится, когда будет готово.", + "regionSelectionApplyDialogTitle": "Применить регион", + "regionSelectionApplying": "Применение...", + "regionSelectionBannerSubtitle": "Выберите правильную частоту для вашего местоположения в соответствии с местными требованиями.", + "regionSelectionBannerTitle": "Важно: выберите ваш регион", + "regionSelectionBluetoothSettings": "Настройки Bluetooth", + "regionSelectionContinue": "Продолжить", + "regionSelectionCurrentBadge": "ТЕКУЩИЙ", + "regionSelectionDeviceDisconnected": "Устройство отключено. Пожалуйста, переподключитесь и повторите попытку.", + "regionSelectionOpenBluetoothSettingsError": "Не удалось открыть настройки Bluetooth. Откройте Настройки > Bluetooth вручную.", + "regionSelectionPairingHintMessage": "Сопряжение Bluetooth удалено. Удалите «Meshtastic_XXXX» в Настройках > Bluetooth и подключитесь повторно.", + "regionSelectionPairingInvalidation": "Телефон удалил сохранённые данные сопряжения для этого устройства.\nПерейдите в Настройки > Bluetooth, удалите устройство Meshtastic и повторите попытку.", + "regionSelectionReconnectTimeout": "Время подключения истекло. Пожалуйста, повторите попытку.", + "regionSelectionRegionAnz": "Австралия/НЗ", + "regionSelectionRegionAnzDesc": "Австралия и Новая Зеландия", "regionSelectionRegionAnzFreq": "915 MHz", - "regionSelectionRegionCn": "China", - "regionSelectionRegionCnDesc": "China", + "regionSelectionRegionCn": "Китай", + "regionSelectionRegionCnDesc": "Китай", "regionSelectionRegionCnFreq": "470 MHz", - "regionSelectionRegionEu433": "Europe 433", - "regionSelectionRegionEu433Desc": "EU alternate frequency", + "regionSelectionRegionEu433": "Европа 433", + "regionSelectionRegionEu433Desc": "Альтернативная частота ЕС", "regionSelectionRegionEu433Freq": "433 MHz", - "regionSelectionRegionEu868": "Europe 868", - "regionSelectionRegionEu868Desc": "EU, UK, and most of Europe", + "regionSelectionRegionEu868": "Европа 868", + "regionSelectionRegionEu868Desc": "ЕС, Великобритания и большая часть Европы", "regionSelectionRegionEu868Freq": "868 MHz", - "regionSelectionRegionIn": "India", - "regionSelectionRegionInDesc": "India", + "regionSelectionRegionIn": "Индия", + "regionSelectionRegionInDesc": "Индия", "regionSelectionRegionInFreq": "865 MHz", - "regionSelectionRegionJp": "Japan", - "regionSelectionRegionJpDesc": "Japan", + "regionSelectionRegionJp": "Япония", + "regionSelectionRegionJpDesc": "Япония", "regionSelectionRegionJpFreq": "920 MHz", - "regionSelectionRegionKr": "Korea", - "regionSelectionRegionKrDesc": "South Korea", + "regionSelectionRegionKr": "Корея", + "regionSelectionRegionKrDesc": "Южная Корея", "regionSelectionRegionKrFreq": "920 MHz", "regionSelectionRegionLora24": "2.4 GHz", - "regionSelectionRegionLora24Desc": "Worldwide 2.4GHz band", + "regionSelectionRegionLora24Desc": "Всемирный диапазон 2.4 GHz", "regionSelectionRegionLora24Freq": "2.4 GHz", - "regionSelectionRegionMy433": "Malaysia 433", - "regionSelectionRegionMy433Desc": "Malaysia", + "regionSelectionRegionMy433": "Малайзия 433", + "regionSelectionRegionMy433Desc": "Малайзия", "regionSelectionRegionMy433Freq": "433 MHz", - "regionSelectionRegionMy919": "Malaysia 919", - "regionSelectionRegionMy919Desc": "Malaysia", + "regionSelectionRegionMy919": "Малайзия 919", + "regionSelectionRegionMy919Desc": "Малайзия", "regionSelectionRegionMy919Freq": "919 MHz", - "regionSelectionRegionNz865": "New Zealand 865", - "regionSelectionRegionNz865Desc": "New Zealand alternate", + "regionSelectionRegionNz865": "Новая Зеландия 865", + "regionSelectionRegionNz865Desc": "Альтернативная частота Новой Зеландии", "regionSelectionRegionNz865Freq": "865 MHz", - "regionSelectionRegionRu": "Russia", - "regionSelectionRegionRuDesc": "Russia", + "regionSelectionRegionRu": "Россия", + "regionSelectionRegionRuDesc": "Россия", "regionSelectionRegionRuFreq": "868 MHz", - "regionSelectionRegionSg923": "Singapore", - "regionSelectionRegionSg923Desc": "Singapore", + "regionSelectionRegionSg923": "Сингапур", + "regionSelectionRegionSg923Desc": "Сингапур", "regionSelectionRegionSg923Freq": "923 MHz", - "regionSelectionRegionTh": "Thailand", - "regionSelectionRegionThDesc": "Thailand", + "regionSelectionRegionTh": "Таиланд", + "regionSelectionRegionThDesc": "Таиланд", "regionSelectionRegionThFreq": "920 MHz", - "regionSelectionRegionTw": "Taiwan", - "regionSelectionRegionTwDesc": "Taiwan", + "regionSelectionRegionTw": "Тайвань", + "regionSelectionRegionTwDesc": "Тайвань", "regionSelectionRegionTwFreq": "923 MHz", - "regionSelectionRegionUa433": "Ukraine 433", - "regionSelectionRegionUa433Desc": "Ukraine", + "regionSelectionRegionUa433": "Украина 433", + "regionSelectionRegionUa433Desc": "Украина", "regionSelectionRegionUa433Freq": "433 MHz", - "regionSelectionRegionUa868": "Ukraine 868", - "regionSelectionRegionUa868Desc": "Ukraine", + "regionSelectionRegionUa868": "Украина 868", + "regionSelectionRegionUa868Desc": "Украина", "regionSelectionRegionUa868Freq": "868 MHz", - "regionSelectionRegionUs": "United States", - "regionSelectionRegionUsDesc": "US, Canada, Mexico", + "regionSelectionRegionUs": "США", + "regionSelectionRegionUsDesc": "США, Канада, Мексика", "regionSelectionRegionUsFreq": "915 MHz", - "regionSelectionSave": "Save", - "regionSelectionSearchHint": "Search regions...", - "regionSelectionSetRegionError": "Failed to set region: {error}", - "regionSelectionTitleChange": "Change Region", - "regionSelectionTitleInitial": "Select Your Region", - "regionSelectionViewScanner": "View Scanner", - "reviewModerationAllCaughtUp": "All caught up!", - "reviewModerationAllReviews": "All Reviews", - "reviewModerationAnonymous": "Anonymous", - "reviewModerationApprove": "Approve", - "reviewModerationApproved": "Review approved", - "reviewModerationCancel": "Cancel", - "reviewModerationDelete": "Delete", - "reviewModerationDeleteMessage": "Are you sure you want to permanently delete this review?", - "reviewModerationDeleteTitle": "Delete Review", - "reviewModerationDeleted": "Review deleted", - "reviewModerationErrorLoading": "Error loading reviews", - "reviewModerationLegacy": "Legacy (no status)", - "reviewModerationNoDatabase": "No reviews in database", - "reviewModerationNoPending": "No pending reviews to moderate", - "reviewModerationNoReviews": "No reviews yet", - "reviewModerationPending": "Pending", - "reviewModerationReject": "Reject", - "reviewModerationRejectReasonHint": "e.g., Inappropriate content, spam, etc.", - "reviewModerationRejectReasonLabel": "Reason for rejection", - "reviewModerationRejectTitle": "Reject Review", - "reviewModerationRejected": "Review rejected", - "reviewModerationTitle": "Review Management", - "reviewModerationVerified": "Verified", - "routeDetailCenterOnNodeTooltip": "Center on node", - "routeDetailDistanceKilometers": "{km}km", - "routeDetailDistanceLabel": "Distance", - "routeDetailDistanceMeters": "{meters}m", - "routeDetailDurationHoursMinutes": "{hours}h {minutes}m", - "routeDetailDurationLabel": "Duration", - "routeDetailDurationMinutes": "{minutes}min", - "routeDetailElevationLabel": "Elevation", - "routeDetailElevationValue": "{meters}m", - "routeDetailExportFailed": "Export failed: {error}", + "regionSelectionSave": "Сохранить", + "regionSelectionSearchHint": "Поиск регионов...", + "regionSelectionSetRegionError": "Не удалось установить регион: {error}", + "regionSelectionTitleChange": "Изменить регион", + "regionSelectionTitleInitial": "Выберите ваш регион", + "regionSelectionViewScanner": "Открыть сканер", + "reviewModerationAllCaughtUp": "Все проверено!", + "reviewModerationAllReviews": "Все отзывы", + "reviewModerationAnonymous": "Аноним", + "reviewModerationApprove": "Одобрить", + "reviewModerationApproved": "Отзыв одобрен", + "reviewModerationCancel": "Отмена", + "reviewModerationDelete": "Удалить", + "reviewModerationDeleteMessage": "Вы уверены, что хотите безвозвратно удалить этот отзыв?", + "reviewModerationDeleteTitle": "Удалить отзыв", + "reviewModerationDeleted": "Отзыв удалён", + "reviewModerationErrorLoading": "Ошибка загрузки отзывов", + "reviewModerationLegacy": "Устаревший (без статуса)", + "reviewModerationNoDatabase": "Отзывов в базе данных нет", + "reviewModerationNoPending": "Нет отзывов, ожидающих проверки", + "reviewModerationNoReviews": "Отзывов пока нет", + "reviewModerationPending": "На проверке", + "reviewModerationReject": "Отклонить", + "reviewModerationRejectReasonHint": "Например: неприемлемый контент, спам и т.д.", + "reviewModerationRejectReasonLabel": "Причина отклонения", + "reviewModerationRejectTitle": "Отклонить отзыв", + "reviewModerationRejected": "Отзыв отклонён", + "reviewModerationTitle": "Управление отзывами", + "reviewModerationVerified": "Подтверждённый", + "routeDetailCenterOnNodeTooltip": "Центрировать на узле", + "routeDetailDistanceKilometers": "{km} км", + "routeDetailDistanceLabel": "Расстояние", + "routeDetailDistanceMeters": "{meters} м", + "routeDetailDurationHoursMinutes": "{hours} ч {minutes} мин", + "routeDetailDurationLabel": "Длительность", + "routeDetailDurationMinutes": "{minutes} мин", + "routeDetailElevationLabel": "Высота", + "routeDetailElevationValue": "{meters} м", + "routeDetailExportFailed": "Экспорт не выполнен: {error}", "routeDetailNoData": "--", - "routeDetailNoGpsPoints": "No GPS Points", - "routeDetailPointsLabel": "Points", - "routeDetailShareText": "Route: {name}", - "routeDetailStorageUnavailable": "Storage not available", - "routeDetailYouBadge": "You", - "routesCancel": "Cancel", - "routesCancelRecording": "Cancel", - "routesCardDurationHoursMinutes": "{hours}h {minutes}m", - "routesCardDurationMinutes": "{minutes}min", - "routesColorLabel": "Color", - "routesDeleteAction": "Delete", - "routesDeleteConfirmAction": "Delete", - "routesDeleteConfirmMessage": "Are you sure you want to delete \"{name}\"? This cannot be undone.", - "routesDeleteConfirmTitle": "Delete Route?", + "routeDetailNoGpsPoints": "GPS-точек нет", + "routeDetailPointsLabel": "Точки", + "routeDetailShareText": "Маршрут: {name}", + "routeDetailStorageUnavailable": "Хранилище недоступно", + "routeDetailYouBadge": "Вы", + "routesCancel": "Отмена", + "routesCancelRecording": "Отмена", + "routesCardDurationHoursMinutes": "{hours} ч {minutes} мин", + "routesCardDurationMinutes": "{minutes} мин", + "routesColorLabel": "Цвет", + "routesDeleteAction": "Удалить", + "routesDeleteConfirmAction": "Удалить", + "routesDeleteConfirmMessage": "Вы уверены, что хотите удалить «{name}»? Это действие нельзя отменить.", + "routesDeleteConfirmTitle": "Удалить маршрут?", "routesDistanceDuration": "{distance} • {duration}", - "routesDistanceKilometers": "{km}km", - "routesDistanceMeters": "{meters}m", - "routesDurationHoursMinutes": "{hours}h {minutes}m", - "routesDurationMinutesSeconds": "{minutes}m {seconds}s", - "routesDurationSeconds": "{seconds}s", - "routesElevationGain": "{meters}m ↑", - "routesEmptyDescription": "Record your first route or import a GPX file", - "routesEmptyTitle": "No Routes Yet", - "routesExportFailed": "Export failed: {error}", - "routesExportGpx": "Export GPX", - "routesFileReadFailed": "Failed to read file", - "routesImportFailed": "Import failed: {error}", - "routesImportGpx": "Import GPX", - "routesImportSuccess": "Imported: {name}", - "routesInvalidGpxFile": "Invalid GPX file", - "routesNewRouteSubtitle": "Start recording your GPS track", - "routesNewRouteTitle": "New Route", - "routesNotesHint": "Trail conditions, weather, etc.", - "routesNotesLabel": "Notes (optional)", - "routesPointCount": "{count} points", - "routesPointsShort": "{count} pts", - "routesRecordingLabel": "Recording", - "routesRouteNameHint": "Morning hike", - "routesRouteNameLabel": "Route Name", - "routesScreenTitle": "Routes", - "routesShareText": "Route: {name}", - "routesStart": "Start", - "routesStartRoute": "Start Route", - "routesStopRecording": "Stop", - "scannerAuthFailedError": "Authentication failed. The device may need to be re-paired. Go to Settings > Bluetooth, forget the Meshtastic device, then tap it below to reconnect.", - "scannerAutoReconnectDisabledSubtitle": "Select a device below to connect manually.", - "scannerAutoReconnectDisabledSubtitleWithDevice": "Select \"{name}\" below, or enable auto-reconnect.", - "scannerAutoReconnectDisabledTitle": "Auto-reconnect is disabled", - "scannerAvailableDevices": "Available Devices", - "scannerBluetoothSettings": "Bluetooth Settings", - "scannerBluetoothSettingsOpenFailed": "Could not open Bluetooth Settings. Please open Settings > Bluetooth manually.", - "scannerConnectDeviceTitle": "Connect Device", - "scannerConnectingStatus": "Connecting...", - "scannerConnectionFailedWithError": "Connection failed: {error}", - "scannerConnectionTimedOut": "Connection timed out. The device may be out of range, powered off, or connected to another phone.", - "scannerCopyright": "© 2026 Socialmesh. All rights reserved.", - "scannerDetailAddress": "Address", + "routesDistanceKilometers": "{km} км", + "routesDistanceMeters": "{meters} м", + "routesDurationHoursMinutes": "{hours} ч {minutes} мин", + "routesDurationMinutesSeconds": "{minutes} мин {seconds} с", + "routesDurationSeconds": "{seconds} с", + "routesElevationGain": "{meters} м ↑", + "routesEmptyDescription": "Запишите первый маршрут или импортируйте GPX-файл", + "routesEmptyTitle": "Маршрутов пока нет", + "routesExportFailed": "Экспорт не выполнен: {error}", + "routesExportGpx": "Экспортировать GPX", + "routesFileReadFailed": "Не удалось прочитать файл", + "routesImportFailed": "Импорт не выполнен: {error}", + "routesImportGpx": "Импортировать GPX", + "routesImportSuccess": "Импортировано: {name}", + "routesInvalidGpxFile": "Некорректный GPX-файл", + "routesNewRouteSubtitle": "Начните запись GPS-трека", + "routesNewRouteTitle": "Новый маршрут", + "routesNotesHint": "Состояние тропы, погода и т.д.", + "routesNotesLabel": "Заметки (необязательно)", + "routesPointCount": "{count} точек", + "routesPointsShort": "{count} тч.", + "routesRecordingLabel": "Запись", + "routesRouteNameHint": "Утренняя прогулка", + "routesRouteNameLabel": "Название маршрута", + "routesScreenTitle": "Маршруты", + "routesShareText": "Маршрут: {name}", + "routesStart": "Старт", + "routesStartRoute": "Начать маршрут", + "routesStopRecording": "Стоп", + "scannerAuthFailedError": "Ошибка аутентификации. Возможно, устройство нужно повторно сопрячь. Перейдите в Настройки > Bluetooth, удалите устройство Meshtastic, затем нажмите на него ниже для переподключения.", + "scannerAutoReconnectDisabledSubtitle": "Выберите устройство ниже для ручного подключения.", + "scannerAutoReconnectDisabledSubtitleWithDevice": "Выберите «{name}» ниже или включите автоподключение.", + "scannerAutoReconnectDisabledTitle": "Автоподключение отключено", + "scannerAvailableDevices": "Доступные устройства", + "scannerBluetoothSettings": "Настройки Bluetooth", + "scannerBluetoothSettingsOpenFailed": "Не удалось открыть настройки Bluetooth. Откройте Настройки > Bluetooth вручную.", + "scannerConnectDeviceTitle": "Подключить устройство", + "scannerConnectingStatus": "Подключение...", + "scannerConnectionFailedWithError": "Ошибка подключения: {error}", + "scannerConnectionTimedOut": "Время подключения истекло. Возможно, устройство вне зоны действия, выключено или подключено к другому телефону.", + "scannerCopyright": "© 2026 Socialmesh. Все права защищены.", + "scannerDetailAddress": "Адрес", "scannerDetailBluetoothLowEnergy": "Bluetooth Low Energy", - "scannerDetailConnectionType": "Connection Type", - "scannerDetailDeviceName": "Device Name", - "scannerDetailManufacturerData": "Manufacturer Data", - "scannerDetailServiceUuids": "Service UUIDs", - "scannerDetailSignalStrength": "Signal Strength", + "scannerDetailConnectionType": "Тип подключения", + "scannerDetailDeviceName": "Имя устройства", + "scannerDetailManufacturerData": "Данные производителя", + "scannerDetailServiceUuids": "UUID сервисов", + "scannerDetailSignalStrength": "Уровень сигнала", "scannerDetailUsbSerial": "USB Serial", - "scannerDeviceDisconnectedUnexpectedly": "The device disconnected unexpectedly. It may have gone out of range or lost power.", - "scannerDeviceNotFoundSubtitle": "If another app is connected to this device, disconnect from it first. Only one app can use Bluetooth at a time.", - "scannerDeviceNotFoundTitle": "{name} not found", - "scannerDevicesFoundCount": "{count} devices found", - "scannerDevicesTitle": "Devices", - "scannerEnableAutoReconnectMessage": "This will automatically connect to your last used device whenever you open the app.", - "scannerEnableAutoReconnectMessageWithDevice": "This will automatically connect to \"{name}\" now and whenever you open the app.", - "scannerEnableAutoReconnectTitle": "Enable Auto-Reconnect?", - "scannerEnableBluetoothHint": "Make sure Bluetooth is enabled and your Meshtastic device is powered on", - "scannerEnableLabel": "Enable", - "scannerGattConnectionFailed": "Connection failed. This can happen if the device was previously paired with another app. Go to Settings > Bluetooth, find the Meshtastic device, tap \"Forget\", then try again.", - "scannerLookingForDevices": "Looking for devices…", - "scannerMeshCoreConnectionFailed": "MeshCore connection failed", - "scannerMeshCoreConnectionFailedWithError": "MeshCore connection failed: {error}", - "scannerPairingInvalidatedError": "Your phone removed the stored pairing info for this device. Return to Settings > Bluetooth, forget \"Meshtastic_XXXX\", and try again.", - "scannerPinRequiredError": "Connection failed - please try again and enter the PIN when prompted", + "scannerDeviceDisconnectedUnexpectedly": "Устройство неожиданно отключилось. Возможно, оно вышло из зоны действия или потеряло питание.", + "scannerDeviceNotFoundSubtitle": "Если другое приложение подключено к этому устройству, сначала отключитесь от него. Только одно приложение может использовать Bluetooth одновременно.", + "scannerDeviceNotFoundTitle": "{name} не найдено", + "scannerDevicesFoundCount": "Найдено устройств: {count}", + "scannerDevicesTitle": "Устройства", + "scannerEnableAutoReconnectMessage": "Приложение будет автоматически подключаться к последнему использованному устройству при каждом запуске.", + "scannerEnableAutoReconnectMessageWithDevice": "Приложение автоматически подключится к «{name}» сейчас и при каждом последующем запуске.", + "scannerEnableAutoReconnectTitle": "Включить автоподключение?", + "scannerEnableBluetoothHint": "Убедитесь, что Bluetooth включён и устройство Meshtastic включено", + "scannerEnableLabel": "Включить", + "scannerGattConnectionFailed": "Ошибка подключения. Это может произойти, если устройство ранее было сопряжено с другим приложением. Перейдите в Настройки > Bluetooth, найдите устройство Meshtastic, нажмите «Забыть» и повторите попытку.", + "scannerLookingForDevices": "Поиск устройств…", + "scannerMeshCoreConnectionFailed": "Ошибка подключения MeshCore", + "scannerMeshCoreConnectionFailedWithError": "Ошибка подключения MeshCore: {error}", + "scannerPairingInvalidatedError": "Телефон удалил сохранённые данные сопряжения для этого устройства. Перейдите в Настройки > Bluetooth, удалите «Meshtastic_XXXX» и повторите попытку.", + "scannerPinRequiredError": "Ошибка подключения — повторите попытку и введите PIN при появлении запроса", "scannerProtocolMeshCore": "MeshCore", "scannerProtocolMeshtastic": "Meshtastic", - "scannerProtocolUnknown": "Unknown", - "scannerRetryScan": "Retry Scan", - "scannerScanningSubtitle": "Looking for Meshtastic devices...", - "scannerScanningTitle": "Scanning for nearby devices", + "scannerProtocolUnknown": "Неизвестный", + "scannerRetryScan": "Повторить сканирование", + "scannerScanningSubtitle": "Поиск устройств Meshtastic...", + "scannerScanningTitle": "Сканирование ближайших устройств", "scannerTransportBluetooth": "Bluetooth", "scannerTransportUsb": "USB", - "scannerUnknownDeviceDescription": "This device was not detected as Meshtastic or MeshCore.", - "scannerUnknownProtocol": "Unknown Protocol", - "scannerUnsupportedDeviceMessage": "This device cannot be connected automatically. Only Meshtastic and MeshCore devices are supported.", + "scannerUnknownDeviceDescription": "Это устройство не определено как Meshtastic или MeshCore.", + "scannerUnknownProtocol": "Неизвестный протокол", + "scannerUnsupportedDeviceMessage": "Это устройство не может быть подключено автоматически. Поддерживаются только устройства Meshtastic и MeshCore.", "scannerVersionText": "Socialmesh v{version}", - "scannerVersionTextShort": "Version v{version}", - "searchProductsBrowseByCategory": "Browse by Category", - "searchProductsClear": "Clear", - "searchProductsHint": "Search devices, modules, antennas...", - "searchProductsNoResults": "No results for \"{query}\"", - "searchProductsOutOfStock": "Out of Stock", - "searchProductsRecentSearches": "Recent Searches", - "searchProductsResultCount": "{count} results for \"{query}\"", - "searchProductsRetry": "Retry", - "searchProductsSearchFailed": "Search failed", - "searchProductsTrending": "Trending", - "searchProductsTryDifferent": "Try different keywords or browse categories", - "sellerProfileAbout": "About", - "sellerProfileApplyCodeHint": "Apply this code at checkout on the seller's store", - "sellerProfileCodeCopied": "Code copied to clipboard", - "sellerProfileContactShipping": "Contact & Shipping", - "sellerProfileDiscountExclusive": "Exclusive discount code for Socialmesh users", + "scannerVersionTextShort": "Версия v{version}", + "searchProductsBrowseByCategory": "Обзор по категориям", + "searchProductsClear": "Очистить", + "searchProductsHint": "Поиск устройств, модулей, антенн...", + "searchProductsNoResults": "Нет результатов по запросу \"{query}\"", + "searchProductsOutOfStock": "Нет в наличии", + "searchProductsRecentSearches": "Недавние поиски", + "searchProductsResultCount": "{count} результатов по запросу \"{query}\"", + "searchProductsRetry": "Повторить", + "searchProductsSearchFailed": "Поиск не удался", + "searchProductsTrending": "Популярное", + "searchProductsTryDifferent": "Попробуйте другие ключевые слова или просмотрите категории", + "sellerProfileAbout": "О продавце", + "sellerProfileApplyCodeHint": "Используйте этот код при оформлении заказа в магазине продавца", + "sellerProfileCodeCopied": "Код скопирован в буфер обмена", + "sellerProfileContactShipping": "Контакты и доставка", + "sellerProfileDiscountExclusive": "Эксклюзивный код скидки для пользователей Socialmesh", "sellerProfileEmail": "Email", - "sellerProfileErrorLoading": "Error loading seller", - "sellerProfileFoundedStat": "Founded", - "sellerProfileGoBack": "Go Back", - "sellerProfileNoProducts": "No products listed yet", - "sellerProfileNoSearchResults": "No products match \"{query}\"", - "sellerProfileNotFound": "Seller not found", - "sellerProfileOfficialPartner": "Official Partner", - "sellerProfilePartnerDiscount": "Partner Discount", - "sellerProfileProductsCount": "Products ({count})", - "sellerProfileProductsStat": "Products", - "sellerProfileRevealCode": "Reveal Code", - "sellerProfileReviewCount": "{count} reviews", - "sellerProfileSalesStat": "Sales", - "sellerProfileSearchHint": "Search products...", - "sellerProfileShipsTo": "Ships to", - "sellerProfileTitle": "Seller", - "sellerProfileCopyCodeTooltip": "Copy code", - "sellerProfileUnableToLoad": "Unable to load products", - "sellerProfileWebsite": "Website", - "serialConfigBaudRate": "Baud Rate", - "serialConfigBaudRateSubtitle": "Serial communication speed", - "serialConfigEcho": "Echo", - "serialConfigEchoSubtitle": "Echo sent packets back to the serial port", - "serialConfigEnabled": "Serial Enabled", - "serialConfigEnabledSubtitle": "Enable serial port communication", - "serialConfigGpioPin": "Pin {pin}", - "serialConfigGpioUnset": "Unset", - "serialConfigModeCaltopoDesc": "CalTopo format for mapping applications", - "serialConfigModeNmeaDesc": "NMEA GPS sentence output for GPS applications", - "serialConfigModeProtoDesc": "Protobuf binary protocol for programmatic access", - "serialConfigModeSimpleDesc": "Simple serial output for basic terminal usage", - "serialConfigModeTextmsgDesc": "Text message mode for SMS-style communication", - "serialConfigOverrideConsole": "Override Console Serial", - "serialConfigOverrideConsoleSubtitle": "Use serial module instead of console", - "serialConfigRxdGpio": "RXD GPIO Pin", - "serialConfigRxdGpioSubtitle": "Receive data GPIO pin number", - "serialConfigSave": "Save", - "serialConfigSaveError": "Error saving config: {error}", - "serialConfigSaved": "Serial configuration saved", - "serialConfigSectionBaudRate": "Baud Rate", - "serialConfigSectionGeneral": "General", - "serialConfigSectionSerialMode": "Serial Mode", - "serialConfigSectionTimeout": "Timeout", - "serialConfigTimeout": "Timeout", - "serialConfigTimeoutValue": "{seconds} seconds", - "serialConfigTitle": "Serial Config", - "serialConfigTxdGpio": "TXD GPIO Pin", - "serialConfigTxdGpioSubtitle": "Transmit data GPIO pin number", - "settingsClearAllDataFailed": "Failed to clear some data: {error}", - "settingsClearAllDataLabel": "Clear All", - "settingsClearAllDataMessage": "This will delete ALL app data: messages, nodes, channels, settings, keys, signals, bookmarks, automations, widgets, and saved preferences. This action cannot be undone.", - "settingsClearAllDataSuccess": "All data cleared successfully", - "settingsClearAllDataTitle": "Clear All Data", - "settingsClearMessagesLabel": "Clear", - "settingsClearMessagesMessage": "This will delete all stored messages. This action cannot be undone.", - "settingsClearMessagesSuccess": "Messages cleared", - "settingsClearMessagesTitle": "Clear Messages", - "settingsDeviceInfoConnection": "Connection", - "settingsDeviceInfoDeviceName": "Device Name", - "settingsDeviceInfoHardware": "Hardware", - "settingsDeviceInfoLongName": "Long Name", - "settingsDeviceInfoNodeNumber": "Node Number", - "settingsDeviceInfoNone": "None", - "settingsDeviceInfoNotConnected": "Not connected", - "settingsDeviceInfoShortName": "Short Name", - "settingsDeviceInfoTitle": "Device Information", - "settingsDeviceInfoUnknown": "Unknown", - "settingsDeviceInfoUserId": "User ID", - "settingsErrorLoading": "Error loading settings: {error}", - "settingsForceSyncFailed": "Sync failed: {error}", - "settingsForceSyncLabel": "Sync", - "settingsForceSyncMessage": "This will clear all local messages, nodes, and channels, then re-sync everything from the connected device.\n\nAre you sure you want to continue?", - "settingsForceSyncNotConnected": "Not connected to a device", - "settingsForceSyncSuccess": "Sync complete", - "settingsForceSyncTitle": "Force Sync", - "settingsForceSyncingStatus": "Syncing from device…", - "settingsHapticIntensityTitle": "Haptic Intensity", - "settingsHapticMediumDescription": "Balanced feedback for most interactions", - "settingsHapticStrongDescription": "Strong feedback for clear confirmation", - "settingsHapticSubtleDescription": "Subtle feedback for a gentle touch", - "settingsHelpTooltip": "Help", - "settingsHistoryLimitOption": "{limit} messages", - "settingsHistoryLimitTitle": "Message History Limit", - "settingsLoadingStatus": "Loading…", - "settingsMeshtasticGoBack": "Go back", - "settingsMeshtasticOfflineMessage": "This content requires an internet connection. Please check your connection and try again.", - "settingsMeshtasticRefresh": "Refresh", - "settingsMeshtasticUnableToLoad": "Unable to load page", + "sellerProfileErrorLoading": "Ошибка загрузки продавца", + "sellerProfileFoundedStat": "Основан", + "sellerProfileGoBack": "Назад", + "sellerProfileNoProducts": "Товары ещё не добавлены", + "sellerProfileNoSearchResults": "Нет товаров, соответствующих запросу \"{query}\"", + "sellerProfileNotFound": "Продавец не найден", + "sellerProfileOfficialPartner": "Официальный партнёр", + "sellerProfilePartnerDiscount": "Партнёрская скидка", + "sellerProfileProductsCount": "Товары ({count})", + "sellerProfileProductsStat": "Товары", + "sellerProfileRevealCode": "Показать код", + "sellerProfileReviewCount": "{count} отзывов", + "sellerProfileSalesStat": "Продажи", + "sellerProfileSearchHint": "Поиск товаров...", + "sellerProfileShipsTo": "Доставка в", + "sellerProfileTitle": "Продавец", + "sellerProfileCopyCodeTooltip": "Копировать код", + "sellerProfileUnableToLoad": "Не удалось загрузить товары", + "sellerProfileWebsite": "Сайт", + "serialConfigBaudRate": "Скорость передачи", + "serialConfigBaudRateSubtitle": "Скорость последовательной связи", + "serialConfigEcho": "Эхо", + "serialConfigEchoSubtitle": "Отправлять отправленные пакеты обратно на последовательный порт", + "serialConfigEnabled": "Последовательный порт включён", + "serialConfigEnabledSubtitle": "Включить связь через последовательный порт", + "serialConfigGpioPin": "Вывод {pin}", + "serialConfigGpioUnset": "Не задан", + "serialConfigModeCaltopoDesc": "Формат CalTopo для картографических приложений", + "serialConfigModeNmeaDesc": "Вывод NMEA GPS для навигационных приложений", + "serialConfigModeProtoDesc": "Бинарный протокол Protobuf для программного доступа", + "serialConfigModeSimpleDesc": "Простой последовательный вывод для базального терминала", + "serialConfigModeTextmsgDesc": "Режим текстовых сообщений для SMS-подобного общения", + "serialConfigOverrideConsole": "Переопределить консольный последовательный порт", + "serialConfigOverrideConsoleSubtitle": "Использовать последовательный модуль вместо консоли", + "serialConfigRxdGpio": "GPIO-вывод RXD", + "serialConfigRxdGpioSubtitle": "Номер GPIO-вывода для приёма данных", + "serialConfigSave": "Сохранить", + "serialConfigSaveError": "Ошибка сохранения конфигурации: {error}", + "serialConfigSaved": "Конфигурация последовательного порта сохранена", + "serialConfigSectionBaudRate": "Скорость передачи", + "serialConfigSectionGeneral": "Общие", + "serialConfigSectionSerialMode": "Режим последовательного порта", + "serialConfigSectionTimeout": "Тайм-аут", + "serialConfigTimeout": "Тайм-аут", + "serialConfigTimeoutValue": "{seconds} секунд", + "serialConfigTitle": "Настройки последовательного порта", + "serialConfigTxdGpio": "GPIO-вывод TXD", + "serialConfigTxdGpioSubtitle": "Номер GPIO-вывода для передачи данных", + "settingsClearAllDataFailed": "Не удалось очистить некоторые данные: {error}", + "settingsClearAllDataLabel": "Очистить всё", + "settingsClearAllDataMessage": "Это удалит ВСЕ данные приложения: сообщения, узлы, каналы, настройки, ключи, сигналы, закладки, автоматизации, виджеты и сохранённые параметры. Это действие нельзя отменить.", + "settingsClearAllDataSuccess": "Все данные успешно очищены", + "settingsClearAllDataTitle": "Очистить все данные", + "settingsClearMessagesLabel": "Очистить", + "settingsClearMessagesMessage": "Это удалит все сохранённые сообщения. Это действие нельзя отменить.", + "settingsClearMessagesSuccess": "Сообщения очищены", + "settingsClearMessagesTitle": "Очистить сообщения", + "settingsDeviceInfoConnection": "Подключение", + "settingsDeviceInfoDeviceName": "Имя устройства", + "settingsDeviceInfoHardware": "Оборудование", + "settingsDeviceInfoLongName": "Полное имя", + "settingsDeviceInfoNodeNumber": "Номер узла", + "settingsDeviceInfoNone": "Нет", + "settingsDeviceInfoNotConnected": "Не подключено", + "settingsDeviceInfoShortName": "Краткое имя", + "settingsDeviceInfoTitle": "Информация об устройстве", + "settingsDeviceInfoUnknown": "Неизвестно", + "settingsDeviceInfoUserId": "ID пользователя", + "settingsErrorLoading": "Ошибка загрузки настроек: {error}", + "settingsForceSyncFailed": "Синхронизация не удалась: {error}", + "settingsForceSyncLabel": "Синхронизировать", + "settingsForceSyncMessage": "Это очистит все локальные сообщения, узлы и каналы, а затем повторно синхронизирует всё с подключённым устройством.\n\nВы уверены, что хотите продолжить?", + "settingsForceSyncNotConnected": "Устройство не подключено", + "settingsForceSyncSuccess": "Синхронизация завершена", + "settingsForceSyncTitle": "Принудительная синхронизация", + "settingsForceSyncingStatus": "Синхронизация с устройством…", + "settingsHapticIntensityTitle": "Интенсивность тактильного отклика", + "settingsHapticMediumDescription": "Сбалансированный отклик для большинства действий", + "settingsHapticStrongDescription": "Сильный отклик для чёткого подтверждения", + "settingsHapticSubtleDescription": "Лёгкий отклик для мягкого прикосновения", + "settingsHelpTooltip": "Помощь", + "settingsHistoryLimitOption": "{limit} сообщений", + "settingsHistoryLimitTitle": "Лимит истории сообщений", + "settingsLoadingStatus": "Загрузка…", + "settingsMeshtasticGoBack": "Назад", + "settingsMeshtasticOfflineMessage": "Для отображения этого содержимого требуется подключение к интернету. Проверьте соединение и повторите попытку.", + "settingsMeshtasticRefresh": "Обновить", + "settingsMeshtasticUnableToLoad": "Не удалось загрузить страницу", "settingsMeshtasticWebViewTitle": "Meshtastic", - "settingsNoSettingsFound": "No settings found", - "settingsNotConfigured": "Not configured", + "settingsNoSettingsFound": "Настройки не найдены", + "settingsNotConfigured": "Не настроено", "settingsOpenSourceAppName": "Socialmesh", - "settingsOpenSourceLegalese": "© 2024 Socialmesh\n\nThis app uses open source software. See below for the complete list of third-party licenses.", - "settingsPremiumAllUnlocked": "All features unlocked!", - "settingsPremiumBadgeLocked": "LOCKED", - "settingsPremiumBadgeOwned": "OWNED", - "settingsPremiumBadgeTry": "TRY IT", - "settingsPremiumPartiallyUnlocked": "{owned} of {total} unlocked", - "settingsPremiumUnlockFeaturesTitle": "Unlock Features", - "settingsProfileLocalOnly": "Local only", - "settingsProfileSubtitle": "Set up your profile", - "settingsProfileSynced": "Synced", - "settingsProfileTitle": "Profile", - "settingsRegionConfigureSubtitle": "Configure device radio frequency", - "settingsRemoteAdminConfigureTitle": "Configure Device", - "settingsRemoteAdminConfiguringTitle": "Configuring Remote Node", - "settingsRemoteAdminConnectedDevice": "Connected Device", - "settingsRemoteAdminNodeCount": "{count} nodes", - "settingsRemoteAdminWarning": "Remote admin requires the target node to have your public key in its Admin Keys list.", - "settingsResetLocalDataLabel": "Reset", - "settingsResetLocalDataMessage": "This will clear all messages and node data, forcing a fresh sync from your device on next connection.\n\nYour settings, theme, and preferences will be kept.\n\nUse this if nodes show incorrect status or messages appear wrong.", - "settingsResetLocalDataSuccess": "Local data reset. Reconnect to sync fresh data.", - "settingsResetLocalDataTitle": "Reset Local Data", - "settingsSearchAutoAcceptTransfersSubtitle": "Automatically accept incoming file offers", - "settingsSearchAutoAcceptTransfersTitle": "Auto-accept transfers", - "settingsSearchAutomationsPackSubtitle": "Automated actions and triggers", - "settingsSearchAutomationsPackTitle": "Automations Pack", - "settingsSearchCannedMessagesSubtitle": "Pre-configured device messages", - "settingsSearchCannedMessagesTitle": "Canned Messages", - "settingsSearchChannelNotificationsSubtitle": "Notify for channel broadcasts", - "settingsSearchChannelNotificationsTitle": "Channel message notifications", - "settingsSearchClearAllDataSubtitle": "Delete messages, settings, and keys", - "settingsSearchClearAllMessagesSubtitle": "Delete all stored messages", - "settingsSearchClearAllMessagesTitle": "Clear all messages", - "settingsSearchCommentsSubtitle": "Push notifications for comments and @mentions", - "settingsSearchDmNotificationsSubtitle": "Notify for private messages", - "settingsSearchDmNotificationsTitle": "Direct message notifications", - "settingsSearchExportDataSubtitle": "Export messages and settings", - "settingsSearchExportDataTitle": "Export data", - "settingsSearchFileTransferSubtitle": "Send and receive small files over mesh", - "settingsSearchFileTransferTitle": "File transfer", - "settingsSearchForceSyncSubtitle": "Force configuration sync", - "settingsSearchForceSyncTitle": "Force sync", - "settingsSearchHapticIntensitySubtitle": "Light, medium, or heavy feedback", - "settingsSearchHint": "Find a setting", - "settingsSearchHistoryLimitSubtitle": "Maximum messages to keep", - "settingsSearchHistoryLimitTitle": "Message history limit", - "settingsSearchIftttPackSubtitle": "Integration with external services", - "settingsSearchIftttPackTitle": "IFTTT Pack", - "settingsSearchLikesSubtitle": "Push notifications for post likes", - "settingsSearchLinkedDevicesSubtitle": "Meshtastic devices connected to your profile", - "settingsSearchLinkedDevicesTitle": "Linked Devices", - "settingsSearchNewFollowersSubtitle": "Push notifications when someone follows you", - "settingsSearchNewNodesNotificationsSubtitle": "Notify when new nodes join the mesh", - "settingsSearchNewNodesNotificationsTitle": "New nodes notifications", - "settingsSearchNotificationSoundSubtitle": "Play sound for notifications", - "settingsSearchNotificationSoundTitle": "Notification sound", - "settingsSearchNotificationVibrationSubtitle": "Vibrate for notifications", - "settingsSearchNotificationVibrationTitle": "Notification vibration", - "settingsSearchPremiumSubtitle": "Ringtones, themes, automations, IFTTT, widgets", - "settingsSearchProfileSubtitle": "Your display name, avatar, and bio", - "settingsSearchRegionSubtitle": "Device radio frequency region", - "settingsSearchRegionTitle": "Region", - "settingsSearchRemoteAdminSubtitle": "Configure remote nodes via PKI admin", - "settingsSearchRemoteAdminTitle": "Remote Administration", - "settingsSearchResetLocalDataSubtitle": "Clear all local app data", - "settingsSearchResetLocalDataTitle": "Reset local data", - "settingsSearchRingtonePackSubtitle": "Custom notification sounds", - "settingsSearchRingtonePackTitle": "Ringtone Pack", - "settingsSearchScanForDeviceSubtitle": "Scan QR code for easy setup", - "settingsSearchScanForDeviceTitle": "Scan for device", - "settingsSearchTakGatewaySubtitle": "Gateway URL, position publishing, callsign", - "settingsSearchTakGatewayTitle": "TAK Gateway", - "settingsSearchThemePackSubtitle": "Accent colors and visual customization", - "settingsSearchThemePackTitle": "Theme Pack", - "settingsSearchWidgetPackSubtitle": "Home screen widgets", - "settingsSearchWidgetPackTitle": "Widget Pack", - "settingsSectionAbout": "ABOUT", - "settingsSectionAccount": "ACCOUNT", - "settingsSectionAnimations": "ANIMATIONS", - "settingsSectionAppearance": "APPEARANCE", - "settingsSectionConnection": "CONNECTION", - "settingsSectionDataStorage": "DATA & STORAGE", - "settingsSectionDevice": "DEVICE", - "settingsSectionFeedback": "FEEDBACK", - "settingsSectionHapticFeedback": "HAPTIC FEEDBACK", - "settingsSectionMessaging": "MESSAGING", - "settingsSectionModules": "MODULES", - "settingsSectionNotifications": "NOTIFICATIONS", + "settingsOpenSourceLegalese": "© 2024 Socialmesh\n\nЭто приложение использует программное обеспечение с открытым исходным кодом. Полный список сторонних лицензий представлен ниже.", + "settingsPremiumAllUnlocked": "Все функции разблокированы!", + "settingsPremiumBadgeLocked": "ЗАБЛОКИРОВАНО", + "settingsPremiumBadgeOwned": "КУПЛЕНО", + "settingsPremiumBadgeTry": "ПОПРОБОВАТЬ", + "settingsPremiumPartiallyUnlocked": "{owned} из {total} разблокировано", + "settingsPremiumUnlockFeaturesTitle": "Разблокировать функции", + "settingsProfileLocalOnly": "Только локально", + "settingsProfileSubtitle": "Настройте свой профиль", + "settingsProfileSynced": "Синхронизировано", + "settingsProfileTitle": "Профиль", + "settingsRegionConfigureSubtitle": "Настройка радиочастоты устройства", + "settingsRemoteAdminConfigureTitle": "Настройка устройства", + "settingsRemoteAdminConfiguringTitle": "Настройка удалённого узла", + "settingsRemoteAdminConnectedDevice": "Подключённое устройство", + "settingsRemoteAdminNodeCount": "{count} узлов", + "settingsRemoteAdminWarning": "Для удалённого администрирования необходимо, чтобы ваш открытый ключ был добавлен в список ключей администратора целевого узла.", + "settingsResetLocalDataLabel": "Сбросить", + "settingsResetLocalDataMessage": "Это очистит все сообщения и данные узлов, что вынудит выполнить свежую синхронизацию с устройством при следующем подключении.\n\nВаши настройки, тема и параметры будут сохранены.\n\nИспользуйте это, если узлы показывают некорректный статус или сообщения отображаются неправильно.", + "settingsResetLocalDataSuccess": "Локальные данные сброшены. Подключитесь повторно для синхронизации.", + "settingsResetLocalDataTitle": "Сбросить локальные данные", + "settingsSearchAutoAcceptTransfersSubtitle": "Автоматически принимать входящие предложения файлов", + "settingsSearchAutoAcceptTransfersTitle": "Автоприём передач", + "settingsSearchAutomationsPackSubtitle": "Автоматические действия и триггеры", + "settingsSearchAutomationsPackTitle": "Пакет автоматизаций", + "settingsSearchCannedMessagesSubtitle": "Преднастроенные сообщения устройства", + "settingsSearchCannedMessagesTitle": "Готовые сообщения", + "settingsSearchChannelNotificationsSubtitle": "Уведомления о трансляциях в каналах", + "settingsSearchChannelNotificationsTitle": "Уведомления о сообщениях в каналах", + "settingsSearchClearAllDataSubtitle": "Удалить сообщения, настройки и ключи", + "settingsSearchClearAllMessagesSubtitle": "Удалить все сохранённые сообщения", + "settingsSearchClearAllMessagesTitle": "Очистить все сообщения", + "settingsSearchCommentsSubtitle": "Push-уведомления о комментариях и @упоминаниях", + "settingsSearchDmNotificationsSubtitle": "Уведомления о личных сообщениях", + "settingsSearchDmNotificationsTitle": "Уведомления о личных сообщениях", + "settingsSearchExportDataSubtitle": "Экспорт сообщений и настроек", + "settingsSearchExportDataTitle": "Экспорт данных", + "settingsSearchFileTransferSubtitle": "Отправка и получение небольших файлов через сеть", + "settingsSearchFileTransferTitle": "Передача файлов", + "settingsSearchForceSyncSubtitle": "Принудительная синхронизация конфигурации", + "settingsSearchForceSyncTitle": "Принудительная синхронизация", + "settingsSearchHapticIntensitySubtitle": "Лёгкий, средний или сильный отклик", + "settingsSearchHint": "Найти настройку", + "settingsSearchHistoryLimitSubtitle": "Максимальное количество сохраняемых сообщений", + "settingsSearchHistoryLimitTitle": "Лимит истории сообщений", + "settingsSearchIftttPackSubtitle": "Интеграция с внешними сервисами", + "settingsSearchIftttPackTitle": "Пакет IFTTT", + "settingsSearchLikesSubtitle": "Push-уведомления о лайках публикаций", + "settingsSearchLinkedDevicesSubtitle": "Устройства Meshtastic, привязанные к вашему профилю", + "settingsSearchLinkedDevicesTitle": "Привязанные устройства", + "settingsSearchNewFollowersSubtitle": "Push-уведомления, когда кто-то подписывается на вас", + "settingsSearchNewNodesNotificationsSubtitle": "Уведомлять о появлении новых узлов в сети", + "settingsSearchNewNodesNotificationsTitle": "Уведомления о новых узлах", + "settingsSearchNotificationSoundSubtitle": "Воспроизводить звук при уведомлениях", + "settingsSearchNotificationSoundTitle": "Звук уведомлений", + "settingsSearchNotificationVibrationSubtitle": "Вибрировать при уведомлениях", + "settingsSearchNotificationVibrationTitle": "Вибрация при уведомлениях", + "settingsSearchPremiumSubtitle": "Рингтоны, темы, автоматизации, IFTTT, виджеты", + "settingsSearchProfileSubtitle": "Ваше отображаемое имя, аватар и описание", + "settingsSearchRegionSubtitle": "Регион радиочастоты устройства", + "settingsSearchRegionTitle": "Регион", + "settingsSearchRemoteAdminSubtitle": "Настройка удалённых узлов через PKI-администрирование", + "settingsSearchRemoteAdminTitle": "Удалённое администрирование", + "settingsSearchResetLocalDataSubtitle": "Очистить все локальные данные приложения", + "settingsSearchResetLocalDataTitle": "Сбросить локальные данные", + "settingsSearchRingtonePackSubtitle": "Пользовательские звуки уведомлений", + "settingsSearchRingtonePackTitle": "Пакет рингтонов", + "settingsSearchScanForDeviceSubtitle": "Сканировать QR-код для быстрой настройки", + "settingsSearchScanForDeviceTitle": "Сканировать устройство", + "settingsSearchTakGatewaySubtitle": "URL шлюза, публикация местоположения, позывной", + "settingsSearchTakGatewayTitle": "Шлюз TAK", + "settingsSearchThemePackSubtitle": "Акцентные цвета и визуальная кастомизация", + "settingsSearchThemePackTitle": "Пакет тем", + "settingsSearchWidgetPackSubtitle": "Виджеты главного экрана", + "settingsSearchWidgetPackTitle": "Пакет виджетов", + "settingsSectionAbout": "О ПРИЛОЖЕНИИ", + "settingsSectionAccount": "АККАУНТ", + "settingsSectionAnimations": "АНИМАЦИИ", + "settingsSectionAppearance": "ВНЕШНИЙ ВИД", + "settingsSectionConnection": "ПОДКЛЮЧЕНИЕ", + "settingsSectionDataStorage": "ДАННЫЕ И ХРАНИЛИЩЕ", + "settingsSectionDevice": "УСТРОЙСТВО", + "settingsSectionFeedback": "ОБРАТНАЯ СВЯЗЬ", + "settingsSectionHapticFeedback": "ТАКТИЛЬНЫЙ ОТКЛИК", + "settingsSectionMessaging": "СООБЩЕНИЯ", + "settingsSectionModules": "МОДУЛИ", + "settingsSectionNotifications": "УВЕДОМЛЕНИЯ", "settingsSectionPremium": "PREMIUM", - "settingsSectionRemoteAdmin": "REMOTE ADMINISTRATION", - "settingsSectionSocialNotifications": "SOCIAL NOTIFICATIONS", - "settingsSectionTelemetryLogs": "TELEMETRY LOGS", - "settingsSectionTools": "TOOLS", - "settingsSectionWhatsNew": "WHAT'S NEW", - "settingsSocialCommentsSubtitle": "When someone comments or @mentions you", - "settingsSocialCommentsTitle": "Comments & mentions", - "settingsSocialLikesSubtitle": "When someone likes your posts", - "settingsSocialLikesTitle": "Likes", - "settingsSocialNewFollowersSubtitle": "When someone follows you or sends a request", - "settingsSocialNewFollowersTitle": "New followers", - "settingsSocialNotificationsLoading": "Loading…", - "settingsSocialNotificationsLoadingSubtitle": "Fetching notification preferences", + "settingsSectionRemoteAdmin": "УДАЛЁННОЕ АДМИНИСТРИРОВАНИЕ", + "settingsSectionSocialNotifications": "СОЦИАЛЬНЫЕ УВЕДОМЛЕНИЯ", + "settingsSectionTelemetryLogs": "ЖУРНАЛЫ ТЕЛЕМЕТРИИ", + "settingsSectionTools": "ИНСТРУМЕНТЫ", + "settingsSectionWhatsNew": "ЧТО НОВОГО", + "settingsSocialCommentsSubtitle": "Когда кто-то комментирует или @упоминает вас", + "settingsSocialCommentsTitle": "Комментарии и упоминания", + "settingsSocialLikesSubtitle": "Когда кто-то ставит лайк вашим публикациям", + "settingsSocialLikesTitle": "Лайки", + "settingsSocialNewFollowersSubtitle": "Когда кто-то подписывается на вас или отправляет запрос", + "settingsSocialNewFollowersTitle": "Новые подписчики", + "settingsSocialNotificationsLoading": "Загрузка…", + "settingsSocialNotificationsLoadingSubtitle": "Получение настроек уведомлений", "settingsSocialmeshVersionSnackbar": "Socialmesh v{version}", - "settingsTile3dEffectsSubtitle": "Perspective transforms and depth effects", - "settingsTile3dEffectsTitle": "3D effects", - "settingsTileAirQualitySubtitle": "PM2.5, PM10, CO2 readings", - "settingsTileAirQualityTitle": "Air Quality", - "settingsTileAmbientLightingSubtitle": "Configure LED and RGB settings", - "settingsTileAmbientLightingTitle": "Ambient Lighting", - "settingsTileAppLogSubtitle": "View application debug logs", - "settingsTileAppLogTitle": "App Log", - "settingsTileAppearanceSubtitle": "Font, text size, density, contrast, motion", - "settingsTileAppearanceTitle": "Appearance & Accessibility", - "settingsTileAutoReconnectSubtitle": "Automatically reconnect to last device", - "settingsTileAutoReconnectTitle": "Auto-reconnect", - "settingsTileBackgroundConnectionSubtitle": "Background BLE, notifications, and power settings", - "settingsTileBackgroundConnectionTitle": "Background connection", - "settingsTileBluetoothSubtitle": "Pairing mode, PIN settings", + "settingsTile3dEffectsSubtitle": "Перспективные преобразования и эффекты глубины", + "settingsTile3dEffectsTitle": "3D-эффекты", + "settingsTileAirQualitySubtitle": "Показания PM2.5, PM10, CO2", + "settingsTileAirQualityTitle": "Качество воздуха", + "settingsTileAmbientLightingSubtitle": "Настройка параметров LED и RGB", + "settingsTileAmbientLightingTitle": "Окружающее освещение", + "settingsTileAppLogSubtitle": "Просмотр отладочных журналов приложения", + "settingsTileAppLogTitle": "Журнал приложения", + "settingsTileAppearanceSubtitle": "Шрифт, размер текста, плотность, контрастность, движение", + "settingsTileAppearanceTitle": "Внешний вид и доступность", + "settingsTileAutoReconnectSubtitle": "Автоматически переподключаться к последнему устройству", + "settingsTileAutoReconnectTitle": "Автоподключение", + "settingsTileBackgroundConnectionSubtitle": "Фоновое BLE, уведомления и настройки питания", + "settingsTileBackgroundConnectionTitle": "Фоновое подключение", + "settingsTileBluetoothSubtitle": "Режим сопряжения, настройки PIN", "settingsTileBluetoothTitle": "Bluetooth", - "settingsTileCannedMessagesSubtitle": "Device-side canned message settings", - "settingsTileCannedMessagesTitle": "Canned Messages Module", - "settingsTileChannelMessagesSubtitle": "Notify for channel broadcasts", - "settingsTileChannelMessagesTitle": "Channel messages", - "settingsTileClearAllDataSubtitle": "Delete messages, settings, and keys", - "settingsTileClearAllDataTitle": "Clear all data", - "settingsTileClearMessageHistorySubtitle": "Delete all stored messages", - "settingsTileClearMessageHistoryTitle": "Clear message history", - "settingsTileDetectionSensorLogsSubtitle": "Sensor event history", - "settingsTileDetectionSensorLogsTitle": "Detection Sensor Logs", - "settingsTileDetectionSensorSubtitle": "Configure GPIO-based motion/door sensors", - "settingsTileDetectionSensorTitle": "Detection Sensor", - "settingsTileDeviceInfoSubtitle": "View connected device details", - "settingsTileDeviceInfoTitle": "Device info", - "settingsTileDeviceManagementSubtitle": "Reboot, shutdown, factory reset", - "settingsTileDeviceManagementTitle": "Device Management", - "settingsTileDeviceMetricsSubtitle": "Battery, voltage, utilization history", - "settingsTileDeviceMetricsTitle": "Device Metrics", - "settingsTileDeviceRoleSubtitle": "Configure device behavior and role", - "settingsTileDeviceRoleTitle": "Device Role & Settings", - "settingsTileDirectMessagesSubtitle": "Notify for private messages", - "settingsTileDirectMessagesTitle": "Direct messages", - "settingsTileDisplaySettingsSubtitle": "Screen timeout, units, display mode", - "settingsTileDisplaySettingsTitle": "Display Settings", - "settingsTileEnvironmentMetricsSubtitle": "Temperature, humidity, pressure logs", - "settingsTileEnvironmentMetricsTitle": "Environment Metrics", - "settingsTileExportDataSubtitle": "Export messages, telemetry, routes", - "settingsTileExportDataTitle": "Export Data", - "settingsTileExportMessagesSubtitle": "Export messages to PDF or CSV", - "settingsTileExportMessagesTitle": "Export Messages", - "settingsTileExternalNotificationSubtitle": "Configure buzzers, LEDs, and vibration alerts", - "settingsTileExternalNotificationTitle": "External Notification", - "settingsTileFirmwareUpdateSubtitle": "Check for device firmware updates", - "settingsTileFirmwareUpdateTitle": "Firmware Update", - "settingsTileForceSyncSubtitle": "Re-sync all data from connected device", - "settingsTileForceSyncTitle": "Force Sync", - "settingsTileGlyphMatrixSubtitle": "Nothing Phone 3 LED patterns", - "settingsTileGlyphMatrixTitle": "Glyph Matrix Test", - "settingsTileGpsStatusSubtitle": "View detailed GPS information", - "settingsTileGpsStatusTitle": "GPS Status", - "settingsTileHapticFeedbackSubtitle": "Vibration feedback for interactions", - "settingsTileHapticFeedbackTitle": "Haptic feedback", - "settingsTileHelpCenterSubtitle": "Interactive guides with Ico, your mesh guide", - "settingsTileHelpCenterTitle": "Help Center", - "settingsTileHelpSupportSubtitle": "FAQ, troubleshooting, and contact info", - "settingsTileHelpSupportTitle": "Help & Support", - "settingsTileIntensityTitle": "Intensity", - "settingsTileListAnimationsSubtitle": "Slide and bounce effects on lists", - "settingsTileListAnimationsTitle": "List animations", - "settingsTileMessageHistorySubtitle": "{count} messages stored", - "settingsTileMessageHistoryTitle": "Message history", - "settingsTileMqttSubtitle": "Configure mesh-to-internet bridge", + "settingsTileCannedMessagesSubtitle": "Настройки готовых сообщений на стороне устройства", + "settingsTileCannedMessagesTitle": "Модуль готовых сообщений", + "settingsTileChannelMessagesSubtitle": "Уведомления о трансляциях в каналах", + "settingsTileChannelMessagesTitle": "Сообщения в каналах", + "settingsTileClearAllDataSubtitle": "Удалить сообщения, настройки и ключи", + "settingsTileClearAllDataTitle": "Очистить все данные", + "settingsTileClearMessageHistorySubtitle": "Удалить все сохранённые сообщения", + "settingsTileClearMessageHistoryTitle": "Очистить историю сообщений", + "settingsTileDetectionSensorLogsSubtitle": "История событий датчика", + "settingsTileDetectionSensorLogsTitle": "Журналы датчика обнаружения", + "settingsTileDetectionSensorSubtitle": "Настройка датчиков движения и дверных датчиков на базе GPIO", + "settingsTileDetectionSensorTitle": "Датчик обнаружения", + "settingsTileDeviceInfoSubtitle": "Просмотр информации о подключённом устройстве", + "settingsTileDeviceInfoTitle": "Информация об устройстве", + "settingsTileDeviceManagementSubtitle": "Перезагрузка, выключение, сброс к заводским настройкам", + "settingsTileDeviceManagementTitle": "Управление устройством", + "settingsTileDeviceMetricsSubtitle": "История заряда батареи, напряжения и использования", + "settingsTileDeviceMetricsTitle": "Метрики устройства", + "settingsTileDeviceRoleSubtitle": "Настройка поведения и роли устройства", + "settingsTileDeviceRoleTitle": "Роль и настройки устройства", + "settingsTileDirectMessagesSubtitle": "Уведомления о личных сообщениях", + "settingsTileDirectMessagesTitle": "Личные сообщения", + "settingsTileDisplaySettingsSubtitle": "Тайм-аут экрана, единицы измерения, режим отображения", + "settingsTileDisplaySettingsTitle": "Настройки экрана", + "settingsTileEnvironmentMetricsSubtitle": "Журналы температуры, влажности и давления", + "settingsTileEnvironmentMetricsTitle": "Метрики окружающей среды", + "settingsTileExportDataSubtitle": "Экспорт сообщений, телеметрии, маршрутов", + "settingsTileExportDataTitle": "Экспорт данных", + "settingsTileExportMessagesSubtitle": "Экспорт сообщений в PDF или CSV", + "settingsTileExportMessagesTitle": "Экспорт сообщений", + "settingsTileExternalNotificationSubtitle": "Настройка зуммеров, LED и вибрационных оповещений", + "settingsTileExternalNotificationTitle": "Внешнее уведомление", + "settingsTileFirmwareUpdateSubtitle": "Проверить наличие обновлений прошивки устройства", + "settingsTileFirmwareUpdateTitle": "Обновление прошивки", + "settingsTileForceSyncSubtitle": "Повторная синхронизация всех данных с подключённым устройством", + "settingsTileForceSyncTitle": "Принудительная синхронизация", + "settingsTileGlyphMatrixSubtitle": "LED-паттерны для Nothing Phone 3", + "settingsTileGlyphMatrixTitle": "Тест матрицы глифов", + "settingsTileGpsStatusSubtitle": "Просмотр подробной информации GPS", + "settingsTileGpsStatusTitle": "Статус GPS", + "settingsTileHapticFeedbackSubtitle": "Вибрационный отклик на действия", + "settingsTileHapticFeedbackTitle": "Тактильный отклик", + "settingsTileHelpCenterSubtitle": "Интерактивные руководства с Ico, вашим проводником по сети", + "settingsTileHelpCenterTitle": "Центр помощи", + "settingsTileHelpSupportSubtitle": "Вопросы и ответы, устранение неполадок и контактная информация", + "settingsTileHelpSupportTitle": "Помощь и поддержка", + "settingsTileIntensityTitle": "Интенсивность", + "settingsTileListAnimationsSubtitle": "Эффекты скольжения и отскока в списках", + "settingsTileListAnimationsTitle": "Анимации списков", + "settingsTileMessageHistorySubtitle": "{count} сохранённых сообщений", + "settingsTileMessageHistoryTitle": "История сообщений", + "settingsTileMqttSubtitle": "Настройка моста между сетью и интернетом", "settingsTileMqttTitle": "MQTT", - "settingsTileMyBugReportsNotSignedIn": "Sign in to track your reports and receive replies", - "settingsTileMyBugReportsSubtitle": "View your reports and responses", - "settingsTileMyBugReportsTitle": "My bug reports", - "settingsTileNetworkSubtitle": "WiFi, Ethernet, NTP settings", - "settingsTileNetworkTitle": "Network", - "settingsTileNewNodesSubtitle": "Notify when new nodes join the mesh", - "settingsTileNewNodesTitle": "New nodes", - "settingsTileOpenSourceSubtitle": "Third-party libraries and attributions", - "settingsTileOpenSourceTitle": "Open Source Licenses", - "settingsTilePaxCounterLogsSubtitle": "Device detection history", - "settingsTilePaxCounterLogsTitle": "PAX Counter Logs", - "settingsTilePaxCounterSubtitle": "WiFi/BLE device detection settings", + "settingsTileMyBugReportsNotSignedIn": "Войдите, чтобы отслеживать свои отчёты и получать ответы", + "settingsTileMyBugReportsSubtitle": "Просмотр ваших отчётов и ответов на них", + "settingsTileMyBugReportsTitle": "Мои отчёты об ошибках", + "settingsTileNetworkSubtitle": "Настройки WiFi, Ethernet, NTP", + "settingsTileNetworkTitle": "Сеть", + "settingsTileNewNodesSubtitle": "Уведомлять о появлении новых узлов в сети", + "settingsTileNewNodesTitle": "Новые узлы", + "settingsTileOpenSourceSubtitle": "Сторонние библиотеки и атрибуции", + "settingsTileOpenSourceTitle": "Лицензии на ПО с открытым кодом", + "settingsTilePaxCounterLogsSubtitle": "История обнаружения устройств", + "settingsTilePaxCounterLogsTitle": "Журналы PAX Counter", + "settingsTilePaxCounterSubtitle": "Настройки обнаружения устройств WiFi/BLE", "settingsTilePaxCounterTitle": "PAX Counter", - "settingsTilePositionHistorySubtitle": "GPS position logs", - "settingsTilePositionHistoryTitle": "Position History", - "settingsTilePositionSubtitle": "GPS mode, broadcast intervals, fixed position", - "settingsTilePositionTitle": "Position & GPS", - "settingsTilePowerManagementSubtitle": "Power saving, sleep settings", - "settingsTilePowerManagementTitle": "Power Management", - "settingsTilePrivacyPolicySubtitle": "How we handle your data", - "settingsTilePrivacyPolicyTitle": "Privacy Policy", - "settingsTilePrivacySubtitle": "Analytics, crash reporting, and data controls", - "settingsTilePrivacyTitle": "Privacy", - "settingsTileProvideLocationSubtitle": "Send phone GPS to mesh for devices without GPS hardware", - "settingsTileProvideLocationTitle": "Provide phone location", - "settingsTilePushNotificationsSubtitle": "Master toggle for all notifications", - "settingsTilePushNotificationsTitle": "Push notifications", - "settingsTileQuickResponsesSubtitle": "Manage canned responses for fast messaging", - "settingsTileQuickResponsesTitle": "Quick responses", - "settingsTileRadioConfigSubtitle": "LoRa settings, modem preset, power", - "settingsTileRadioConfigTitle": "Radio Configuration", - "settingsTileRangeTestSubtitle": "Test signal range with other nodes", - "settingsTileRangeTestTitle": "Range Test", - "settingsTileRegionTitle": "Region / Frequency", - "settingsTileResetLocalDataSubtitle": "Clear messages and nodes, keep settings", - "settingsTileResetLocalDataTitle": "Reset local data", - "settingsTileRoutesSubtitle": "Record and manage GPS routes", - "settingsTileRoutesTitle": "Routes", - "settingsTileScanQrCodeSubtitle": "Import nodes, channels, or automations", - "settingsTileScanQrCodeTitle": "Scan QR Code", - "settingsTileSecuritySubtitle": "Access controls, managed mode", - "settingsTileSecurityTitle": "Security", - "settingsTileSerialSubtitle": "Serial port configuration", + "settingsTilePositionHistorySubtitle": "Журналы GPS-позиции", + "settingsTilePositionHistoryTitle": "История местоположения", + "settingsTilePositionSubtitle": "Режим GPS, интервалы трансляции, фиксированная позиция", + "settingsTilePositionTitle": "Местоположение и GPS", + "settingsTilePowerManagementSubtitle": "Энергосбережение, настройки сна", + "settingsTilePowerManagementTitle": "Управление питанием", + "settingsTilePrivacyPolicySubtitle": "Как мы обрабатываем ваши данные", + "settingsTilePrivacyPolicyTitle": "Политика конфиденциальности", + "settingsTilePrivacySubtitle": "Аналитика, отчёты о сбоях и управление данными", + "settingsTilePrivacyTitle": "Конфиденциальность", + "settingsTileProvideLocationSubtitle": "Передавать GPS телефона в сеть для устройств без GPS", + "settingsTileProvideLocationTitle": "Передавать местоположение телефона", + "settingsTilePushNotificationsSubtitle": "Главный переключатель для всех уведомлений", + "settingsTilePushNotificationsTitle": "Push-уведомления", + "settingsTileQuickResponsesSubtitle": "Управление готовыми ответами для быстрой переписки", + "settingsTileQuickResponsesTitle": "Быстрые ответы", + "settingsTileRadioConfigSubtitle": "Настройки LoRa, предустановка модема, мощность", + "settingsTileRadioConfigTitle": "Конфигурация радио", + "settingsTileRangeTestSubtitle": "Проверка дальности сигнала с другими узлами", + "settingsTileRangeTestTitle": "Тест дальности", + "settingsTileRegionTitle": "Регион / Частота", + "settingsTileResetLocalDataSubtitle": "Очистить сообщения и узлы, сохранив настройки", + "settingsTileResetLocalDataTitle": "Сбросить локальные данные", + "settingsTileRoutesSubtitle": "Запись и управление GPS-маршрутами", + "settingsTileRoutesTitle": "Маршруты", + "settingsTileScanQrCodeSubtitle": "Импорт узлов, каналов или автоматизаций", + "settingsTileScanQrCodeTitle": "Сканировать QR-код", + "settingsTileSecuritySubtitle": "Контроль доступа, управляемый режим", + "settingsTileSecurityTitle": "Безопасность", + "settingsTileSerialSubtitle": "Конфигурация последовательного порта", "settingsTileSerialTitle": "Serial", - "settingsTileShakeToReportSubtitle": "Shake your device to open the bug report flow", - "settingsTileShakeToReportTitle": "Shake to report a bug", - "settingsTileSocialmeshSubtitle": "Meshtastic companion app", + "settingsTileShakeToReportSubtitle": "Встряхните устройство, чтобы открыть форму отчёта об ошибке", + "settingsTileShakeToReportTitle": "Встряхните для отправки отчёта", + "settingsTileSocialmeshSubtitle": "Приложение-компаньон Meshtastic", "settingsTileSocialmeshTitle": "Socialmesh", - "settingsTileSoundSubtitle": "Play sound with notifications", - "settingsTileSoundTitle": "Sound", - "settingsTileStoreForwardSubtitle": "Store and relay messages for offline nodes", - "settingsTileStoreForwardTitle": "Store & Forward", - "settingsTileTelemetryIntervalsSubtitle": "Configure telemetry update frequency", - "settingsTileTelemetryIntervalsTitle": "Telemetry Intervals", - "settingsTileTermsOfServiceSubtitle": "Legal terms and conditions", - "settingsTileTermsOfServiceTitle": "Terms of Service", - "settingsTileTracerouteHistorySubtitle": "Network path analysis logs", - "settingsTileTracerouteHistoryTitle": "Traceroute History", - "settingsTileTrafficManagementSubtitle": "Mesh traffic optimization and filtering", - "settingsTileTrafficManagementTitle": "Traffic Management", - "settingsTileVibrationSubtitle": "Vibrate with notifications", - "settingsTileVibrationTitle": "Vibration", - "settingsTileWhatsNewSubtitle": "Browse recent features and updates", - "settingsTileWhatsNewTitle": "What’s New", - "settingsTitle": "Settings", - "settingsTryDifferentSearch": "Try a different search term", - "settingsVersionString": "Version {version}", - "shopAdminDashboardAccessDenied": "Access Denied", - "shopAdminDashboardAccessRequired": "Admin Access Required", - "shopAdminDashboardActiveCount": "{count} active", - "shopAdminDashboardAddProduct": "Add Product", - "shopAdminDashboardAddSeller": "Add Seller", - "shopAdminDashboardError": "Error", - "shopAdminDashboardEstRevenue": "Est. Revenue", - "shopAdminDashboardFeatured": "Featured Products", - "shopAdminDashboardFeaturedSubtitle": "Manage featured product display order", - "shopAdminDashboardInactive": "Inactive", - "shopAdminDashboardManagement": "Management", - "shopAdminDashboardNoPermission": "You do not have permission to access this area.", - "shopAdminDashboardOutOfStock": "Out of Stock", - "shopAdminDashboardProducts": "Products", - "shopAdminDashboardProductsSubtitle": "Manage all product listings", - "shopAdminDashboardQuickActions": "Quick Actions", - "shopAdminDashboardRefresh": "Refresh", - "shopAdminDashboardReviews": "Reviews", - "shopAdminDashboardReviewsMgmt": "Reviews", - "shopAdminDashboardReviewsSubtitle": "Moderate product reviews", - "shopAdminDashboardSellers": "Sellers", - "shopAdminDashboardSellersSubtitle": "Manage seller profiles and partnerships", - "shopAdminDashboardTitle": "Shop Admin", - "shopAdminDashboardTotalProducts": "Total Products", - "shopAdminDashboardTotalSales": "Total Sales", - "shopAdminDashboardTotalSellers": "Total Sellers", - "shopAdminDashboardTotalViews": "Total Views", - "shopFavoritesEmpty": "No favorites yet", - "shopFavoritesEmptySubtitle": "Tap the heart icon on products to save them", - "shopFavoritesErrorLoading": "Error loading favorites", - "shopFavoritesInStock": "In Stock", - "shopFavoritesOutOfStock": "Out of Stock", - "shopFavoritesProductRemoved": "Product no longer available", - "shopFavoritesRetry": "Retry", - "shopFavoritesSignIn": "Sign in to save favorites", - "shopFavoritesSignInSubtitle": "Your favorite devices will appear here", - "shopFavoritesTitle": "Favorites", - "shopFavoritesUnableToLoad": "Unable to load product", + "settingsTileSoundSubtitle": "Воспроизводить звук при уведомлениях", + "settingsTileSoundTitle": "Звук", + "settingsTileStoreForwardSubtitle": "Хранить и пересылать сообщения для отключённых узлов", + "settingsTileStoreForwardTitle": "Хранение и пересылка", + "settingsTileTelemetryIntervalsSubtitle": "Настройка частоты обновления телеметрии", + "settingsTileTelemetryIntervalsTitle": "Интервалы телеметрии", + "settingsTileTermsOfServiceSubtitle": "Юридические условия и положения", + "settingsTileTermsOfServiceTitle": "Условия использования", + "settingsTileTracerouteHistorySubtitle": "Журналы анализа сетевых путей", + "settingsTileTracerouteHistoryTitle": "История трассировки", + "settingsTileTrafficManagementSubtitle": "Оптимизация и фильтрация трафика в сети", + "settingsTileTrafficManagementTitle": "Управление трафиком", + "settingsTileVibrationSubtitle": "Вибрация при уведомлениях", + "settingsTileVibrationTitle": "Вибрация", + "settingsTileWhatsNewSubtitle": "Обзор последних функций и обновлений", + "settingsTileWhatsNewTitle": "Что нового", + "settingsTitle": "Настройки", + "settingsTryDifferentSearch": "Попробуйте другой поисковый запрос", + "settingsVersionString": "Версия {version}", + "shopAdminDashboardAccessDenied": "Доступ запрещён", + "shopAdminDashboardAccessRequired": "Требуется доступ администратора", + "shopAdminDashboardActiveCount": "{count} активных", + "shopAdminDashboardAddProduct": "Добавить товар", + "shopAdminDashboardAddSeller": "Добавить продавца", + "shopAdminDashboardError": "Ошибка", + "shopAdminDashboardEstRevenue": "Приблизительный доход", + "shopAdminDashboardFeatured": "Рекомендуемые товары", + "shopAdminDashboardFeaturedSubtitle": "Управление порядком отображения рекомендуемых товаров", + "shopAdminDashboardInactive": "Неактивные", + "shopAdminDashboardManagement": "Управление", + "shopAdminDashboardNoPermission": "У вас нет прав для доступа к этому разделу.", + "shopAdminDashboardOutOfStock": "Нет в наличии", + "shopAdminDashboardProducts": "Товары", + "shopAdminDashboardProductsSubtitle": "Управление всеми объявлениями о товарах", + "shopAdminDashboardQuickActions": "Быстрые действия", + "shopAdminDashboardRefresh": "Обновить", + "shopAdminDashboardReviews": "Отзывы", + "shopAdminDashboardReviewsMgmt": "Отзывы", + "shopAdminDashboardReviewsSubtitle": "Модерация отзывов о товарах", + "shopAdminDashboardSellers": "Продавцы", + "shopAdminDashboardSellersSubtitle": "Управление профилями продавцов и партнёрствами", + "shopAdminDashboardTitle": "Администрирование магазина", + "shopAdminDashboardTotalProducts": "Всего товаров", + "shopAdminDashboardTotalSales": "Всего продаж", + "shopAdminDashboardTotalSellers": "Всего продавцов", + "shopAdminDashboardTotalViews": "Всего просмотров", + "shopFavoritesEmpty": "Нет избранных товаров", + "shopFavoritesEmptySubtitle": "Нажмите на значок сердца на товаре, чтобы сохранить его", + "shopFavoritesErrorLoading": "Ошибка загрузки избранного", + "shopFavoritesInStock": "В наличии", + "shopFavoritesOutOfStock": "Нет в наличии", + "shopFavoritesProductRemoved": "Товар больше не доступен", + "shopFavoritesRetry": "Повторить", + "shopFavoritesSignIn": "Войдите, чтобы сохранять избранное", + "shopFavoritesSignInSubtitle": "Ваши любимые устройства появятся здесь", + "shopFavoritesTitle": "Избранное", + "shopFavoritesUnableToLoad": "Не удалось загрузить товар", "shopModelBandAu915": "AU 915MHz", - "shopModelBandAu915Range": "915-928 MHz", + "shopModelBandAu915Range": "915–928 MHz", "shopModelBandCn470": "CN 470MHz", - "shopModelBandCn470Range": "470-510 MHz", + "shopModelBandCn470Range": "470–510 MHz", "shopModelBandEu868": "EU 868MHz", - "shopModelBandEu868Range": "863-870 MHz", + "shopModelBandEu868Range": "863–870 MHz", "shopModelBandIn865": "IN 865MHz", - "shopModelBandIn865Range": "865-867 MHz", + "shopModelBandIn865Range": "865–867 MHz", "shopModelBandJp920": "JP 920MHz", - "shopModelBandJp920Range": "920-925 MHz", + "shopModelBandJp920Range": "920–925 MHz", "shopModelBandKr920": "KR 920MHz", - "shopModelBandKr920Range": "920-923 MHz", - "shopModelBandMulti": "Multi-band", - "shopModelBandMultiRange": "Multiple frequencies", + "shopModelBandKr920Range": "920–923 MHz", + "shopModelBandMulti": "Многодиапазонный", + "shopModelBandMultiRange": "Несколько частот", "shopModelBandUs915": "US 915MHz", - "shopModelBandUs915Range": "902-928 MHz", - "shopModelCategoryAccessories": "Accessories", - "shopModelCategoryAccessoriesDescription": "Cables, batteries, and more", - "shopModelCategoryAntennas": "Antennas", - "shopModelCategoryAntennasDescription": "Antennas and RF accessories", - "shopModelCategoryEnclosures": "Enclosures", - "shopModelCategoryEnclosuresDescription": "Cases and enclosures", - "shopModelCategoryKits": "Kits", - "shopModelCategoryKitsDescription": "DIY kits and bundles", - "shopModelCategoryModules": "Modules", - "shopModelCategoryModulesDescription": "Add-on modules and boards", - "shopModelCategoryNodes": "Nodes", - "shopModelCategoryNodesDescription": "Complete Meshtastic devices", - "shopModelCategorySolar": "Solar", - "shopModelCategorySolarDescription": "Solar panels and power solutions", - "shopModelPriceFrom": "From ${price}", - "showcaseCardAmplify": "Amplify your reach", - "showcaseCardBroadcast": "BROADCAST", - "showcaseCardConnected": "Connected to network", - "showcaseCardEncrypted": "End-to-end encrypted", - "showcaseCardMeshNetwork": "MESH NETWORK", - "showcaseCardNodeOnline": "NODE ONLINE", - "showcaseCardOffGrid": "Off-grid communication", - "showcaseCardReachEveryone": "Reach everyone", - "showcaseCardSecureChannel": "SECURE CHANNEL", - "showcaseCardSignalBoost": "SIGNAL BOOST", - "showcaseResetAllCards": "Reset all cards", - "showcaseSnapEffectTitle": "Snap Effect", - "showcaseTapInstruction": "Tap a card to snap it away (Thanos style)", - "sigilStageHeraldic": "Heraldic", - "sigilStageInscribed": "Inscribed", - "sigilStageLegacy": "Legacy", - "sigilStageMarked": "Marked", - "sigilStageSeed": "Seed", - "signalAcquiringDeviceLocation": "Acquiring device location...", - "signalActiveCount": "{count} active", - "signalActiveDays": "Active {days}d", - "signalActiveHours": "Active {hours}h", - "signalActiveMinutes": "Active {minutes}m", - "signalActiveNow": "Active now", - "signalAddLocation": "Add location", - "signalAddPhotos": "Add Photos", - "signalAnonAuthor": "Anon", - "signalAnonymous": "Anonymous", - "signalAnonymousFeed": "Anonymous", - "signalApproxArea": "Approx. area (~{radiusMeters}m)", - "signalAttachFile": "Attach file", - "signalBackNearby": "Back nearby", - "signalBeFirstToRespond": "Be the first to respond to this signal", - "signalBleNoMeshTrafficIos": "Connected to BLE but no mesh traffic detected. On iOS, Airplane Mode can block BLE traffic even when connected. Turn off Airplane Mode or toggle Bluetooth.", - "signalBroadcastYourSignal": "Broadcast your signal", - "signalBroadcastingOverMesh": "Broadcasting over mesh...", - "signalCancel": "Cancel", - "signalChooseFromGallery": "Choose from Gallery", - "signalCloudBadge": "Cloud", - "signalCloudFeaturesUnavailable": "Cloud features unavailable.", - "signalCommentCount": "{count} comments", - "signalCommentReported": "Comment reported. Thank you.", - "signalConnectToAddLocation": "Connect a device to add location to your signal.", - "signalConnectToGoActive": "Connect to a device to go active", - "signalConnectToSend": "Connect to a device to send signals", - "signalConversation": "Conversation", - "signalCreateFailed": "Failed to create signal", - "signalCurrentLocation": "Current location", - "signalDelete": "Delete", - "signalDeleteMessage": "This signal will fade immediately.", - "signalDeleteTitle": "Delete Signal?", - "signalDetailTitle": "Signal", - "signalDeviceNotConnected": "Device not connected", - "signalDiscardConfirm": "Discard", - "signalDiscardMessage": "Your draft will be lost.", - "signalDiscardTitle": "Discard signal?", - "signalDuration": "Signal Duration", - "signalDurationSubtitle": "How long until your signal fades", - "signalEmptyTagline1": "Nothing active here right now.\nSignals appear when someone nearby goes active.", - "signalEmptyTagline2": "Signals are mesh-first and ephemeral.\nThey dissolve when their timer ends.", - "signalEmptyTagline3": "Share a quick status or photo.\nNearby nodes will see it in real time.", - "signalEmptyTagline4": "Go active to broadcast your presence.\nOff-grid, device to device.", - "signalEmptyTitleKeyword": "signals", - "signalEmptyTitlePrefix": "No active ", - "signalEmptyTitleSuffix": " nearby", - "signalEnableGpsOrFixedPosition": "Device has no location yet. Enable GPS or set a fixed position.", - "signalExpiredBadge": "Expired", - "signalFaded": "Faded", - "signalFadesIn": "Fades in", - "signalFadesInDays": "Fades in {days}d", - "signalFadesInHours": "Fades in {hours}h", - "signalFadesInMinutes": "Fades in {minutes}m", - "signalFadesInMinutesSeconds": "Fades in {minutes}m {seconds}s", - "signalFadesInSeconds": "Fades in {seconds}s", - "signalFallbackContent": "Signal", - "signalFileTooLarge": "File too large. Mesh transfer is limited to {size} KB.", - "signalFileTransferFailed": "File transfer failed to start", - "signalFileTransfers": "File Transfers", - "signalFilterAll": "All", - "signalFilterExpiring": "Expiring", - "signalFilterHidden": "Hidden", - "signalFilterLocation": "Location", - "signalFilterMedia": "Media", + "shopModelBandUs915Range": "902–928 MHz", + "shopModelCategoryAccessories": "Аксессуары", + "shopModelCategoryAccessoriesDescription": "Кабели, аккумуляторы и многое другое", + "shopModelCategoryAntennas": "Антенны", + "shopModelCategoryAntennasDescription": "Антенны и RF-аксессуары", + "shopModelCategoryEnclosures": "Корпуса", + "shopModelCategoryEnclosuresDescription": "Чехлы и корпуса", + "shopModelCategoryKits": "Наборы", + "shopModelCategoryKitsDescription": "DIY-наборы и комплекты", + "shopModelCategoryModules": "Модули", + "shopModelCategoryModulesDescription": "Дополнительные модули и платы", + "shopModelCategoryNodes": "Узлы", + "shopModelCategoryNodesDescription": "Готовые устройства Meshtastic", + "shopModelCategorySolar": "Солнечная энергия", + "shopModelCategorySolarDescription": "Солнечные панели и решения для питания", + "shopModelPriceFrom": "От ${price}", + "showcaseCardAmplify": "Расширьте охват", + "showcaseCardBroadcast": "ТРАНСЛЯЦИЯ", + "showcaseCardConnected": "Подключено к сети", + "showcaseCardEncrypted": "Сквозное шифрование", + "showcaseCardMeshNetwork": "MESH-СЕТЬ", + "showcaseCardNodeOnline": "УЗЕЛ В СЕТИ", + "showcaseCardOffGrid": "Связь без инфраструктуры", + "showcaseCardReachEveryone": "Свяжитесь с каждым", + "showcaseCardSecureChannel": "ЗАЩИЩЁННЫЙ КАНАЛ", + "showcaseCardSignalBoost": "УСИЛЕНИЕ СИГНАЛА", + "showcaseResetAllCards": "Сбросить все карточки", + "showcaseSnapEffectTitle": "Эффект щелчка", + "showcaseTapInstruction": "Нажмите на карточку, чтобы убрать её (в стиле Таноса)", + "sigilStageHeraldic": "Геральдический", + "sigilStageInscribed": "Начертанный", + "sigilStageLegacy": "Устаревший", + "sigilStageMarked": "Отмеченный", + "sigilStageSeed": "Начальный", + "signalAcquiringDeviceLocation": "Определение местоположения устройства...", + "signalActiveCount": "{count, plural, =1{1 активный} few{{count} активных} many{{count} активных} other{{count} активных}}", + "signalActiveDays": "Активен {days}д", + "signalActiveHours": "Активен {hours}ч", + "signalActiveMinutes": "Активен {minutes}м", + "signalActiveNow": "Активен сейчас", + "signalAddLocation": "Добавить местоположение", + "signalAddPhotos": "Добавить фото", + "signalAnonAuthor": "Аноним", + "signalAnonymous": "Анонимно", + "signalAnonymousFeed": "Анонимно", + "signalApproxArea": "Примерный район (~{radiusMeters}м)", + "signalAttachFile": "Прикрепить файл", + "signalBackNearby": "Назад к ближайшим", + "signalBeFirstToRespond": "Будьте первым, кто ответит на этот сигнал", + "signalBleNoMeshTrafficIos": "Подключено через BLE, но трафик сети не обнаружен. На iOS режим полёта может блокировать BLE-трафик даже при наличии подключения. Отключите режим полёта или переключите Bluetooth.", + "signalBroadcastYourSignal": "Транслировать свой сигнал", + "signalBroadcastingOverMesh": "Трансляция по сети...", + "signalCancel": "Отмена", + "signalChooseFromGallery": "Выбрать из галереи", + "signalCloudBadge": "Облако", + "signalCloudFeaturesUnavailable": "Облачные функции недоступны.", + "signalCommentCount": "{count, plural, =1{1 комментарий} few{{count} комментария} many{{count} комментариев} other{{count} комментария}}", + "signalCommentReported": "Комментарий отмечен. Спасибо.", + "signalConnectToAddLocation": "Подключите устройство, чтобы добавить местоположение к сигналу.", + "signalConnectToGoActive": "Подключите устройство, чтобы стать активным", + "signalConnectToSend": "Подключите устройство для отправки сигналов", + "signalConversation": "Обсуждение", + "signalCreateFailed": "Не удалось создать сигнал", + "signalCurrentLocation": "Текущее местоположение", + "signalDelete": "Удалить", + "signalDeleteMessage": "Этот сигнал немедленно исчезнет.", + "signalDeleteTitle": "Удалить сигнал?", + "signalDetailTitle": "Сигнал", + "signalDeviceNotConnected": "Устройство не подключено", + "signalDiscardConfirm": "Отменить", + "signalDiscardMessage": "Черновик будет удалён.", + "signalDiscardTitle": "Отменить сигнал?", + "signalDuration": "Длительность сигнала", + "signalDurationSubtitle": "Через сколько времени сигнал угаснет", + "signalEmptyTagline1": "Здесь пока нет активных сигналов.\nСигналы появляются, когда кто-то поблизости становится активным.", + "signalEmptyTagline2": "Сигналы работают через сеть и существуют временно.\nОни исчезают по истечении таймера.", + "signalEmptyTagline3": "Поделитесь статусом или фото.\nБлижайшие узлы увидят это в реальном времени.", + "signalEmptyTagline4": "Станьте активным, чтобы оповестить о своём присутствии.\nБез интернета, напрямую между устройствами.", + "signalEmptyTitleKeyword": "сигналов", + "signalEmptyTitlePrefix": "Нет активных ", + "signalEmptyTitleSuffix": " рядом", + "signalEnableGpsOrFixedPosition": "Устройство ещё не определило местоположение. Включите GPS или задайте фиксированную позицию.", + "signalExpiredBadge": "Истёк", + "signalFaded": "Угас", + "signalFadesIn": "Угаснет через", + "signalFadesInDays": "Угаснет через {days}д", + "signalFadesInHours": "Угаснет через {hours}ч", + "signalFadesInMinutes": "Угаснет через {minutes}м", + "signalFadesInMinutesSeconds": "Угаснет через {minutes}м {seconds}с", + "signalFadesInSeconds": "Угаснет через {seconds}с", + "signalFallbackContent": "Сигнал", + "signalFileTooLarge": "Файл слишком большой. Передача по сети ограничена {size} КБ.", + "signalFileTransferFailed": "Не удалось начать передачу файла", + "signalFileTransfers": "Передача файлов", + "signalFilterAll": "Все", + "signalFilterExpiring": "Истекающие", + "signalFilterHidden": "Скрытые", + "signalFilterLocation": "Местоположение", + "signalFilterMedia": "Медиа", "signalFilterMesh": "Mesh", - "signalFilterNearby": "Nearby", - "signalFilterReplies": "Replies", - "signalFilterSaved": "Saved", - "signalFitAllSignals": "Fit all signals", - "signalGetLocationFailed": "Failed to get location", - "signalGoActive": "Go Active", - "signalGoActiveAction": "Go Active", - "signalHasFaded": "This signal has faded", - "signalHelp": "Help", - "signalHidden": "Signal hidden", - "signalHide": "Hide", - "signalHopSingular": "{count} hop", - "signalHopsBadge": "{count} hops", - "signalHopsPlural": "{count} hops", - "signalImageBlockedSingular": "Image violates content guidelines and was blocked", - "signalImagesAddedCount": "{passedCount} images added", - "signalImagesBlockedAndAdded": "{failedCount} image(s) blocked, {passedCount} added", - "signalImagesBlockedPlural": "{failedCount} images blocked by content guidelines", - "signalImagesHiddenOffline": "Images hidden while offline. They will return when back online.", - "signalImagesRequireInternet": "Images require internet. Images removed.", - "signalImagesRestored": "Images restored!", - "signalIntentLabel": "Intent", - "signalIosAirplaneModeWarning": "iOS Airplane Mode can pause BLE mesh traffic even when connected. If signals stop, turn off Airplane Mode or toggle Bluetooth.", - "signalKeepEditing": "Keep editing", - "signalLegendFiveMin": "< 5 min", - "signalLegendOverTwoHrs": "> 2 hrs", - "signalLegendThirtyMin": "< 30 min", - "signalLegendTwoHrs": "< 2 hrs", - "signalLetOthersKnowIntent": "Let others know why you're active", - "signalLoadingComments": "Loading comments...", - "signalLocal": "Local", - "signalLocalBadge": "Local", - "signalLocalBadgeGallery": "Local", - "signalLocationBadge": "Location", - "signalLocationPrivacyNote": "Signal location uses mesh device position, rounded to ~{radiusMeters}m.", - "signalLocationUnavailableSent": "Location unavailable, sent without location.", - "signalMaxFileSize": "Max {size} KB", - "signalMaxImagesAllowed": "Maximum of {maxImages} images allowed", - "signalMeshOnlyDebugBanner": "Mesh-only debug mode enabled. Signals use local DB + mesh only.", - "signalMeshOnlyDebugCloudDisabled": "Mesh-only debug mode enabled. Cloud features disabled.", - "signalNoCommentsYet": "No comments yet", - "signalNoDeviceConnectedTooltip": "No device connected", - "signalNoDeviceLocation": "No connected device location available", - "signalNoFilterMatch": "No signals match this filter", - "signalNoIntent": "No intent", - "signalNoLocationDescription": "Signals will appear here when they include GPS coordinates", - "signalNoLocationTitle": "No signals with location", - "signalNoSignals": "No signals", - "signalOfflineCloudUnavailable": "Offline: images and cloud features unavailable.", - "signalOnMapCount": "{count} on map", - "signalOriginCloud": "Cloud", + "signalFilterNearby": "Рядом", + "signalFilterReplies": "Ответы", + "signalFilterSaved": "Сохранённые", + "signalFitAllSignals": "Показать все сигналы", + "signalGetLocationFailed": "Не удалось получить местоположение", + "signalGoActive": "Стать активным", + "signalGoActiveAction": "Стать активным", + "signalHasFaded": "Этот сигнал угас", + "signalHelp": "Помощь", + "signalHidden": "Сигнал скрыт", + "signalHide": "Скрыть", + "signalHopSingular": "{count} хоп", + "signalHopsBadge": "{count, plural, =1{1 хоп} few{{count} хопа} many{{count} хопов} other{{count} хопа}}", + "signalHopsPlural": "{count, plural, =1{1 хоп} few{{count} хопа} many{{count} хопов} other{{count} хопа}}", + "signalImageBlockedSingular": "Изображение нарушает правила контента и было заблокировано", + "signalImagesAddedCount": "{passedCount, plural, =1{Добавлено 1 изображение} few{Добавлено {passedCount} изображения} many{Добавлено {passedCount} изображений} other{Добавлено {passedCount} изображения}}", + "signalImagesBlockedAndAdded": "{failedCount, plural, =1{Заблокировано 1 изображение} few{Заблокировано {failedCount} изображения} many{Заблокировано {failedCount} изображений} other{Заблокировано {failedCount} изображения}}, добавлено {passedCount}", + "signalImagesBlockedPlural": "{failedCount, plural, =1{1 изображение заблокировано} few{{failedCount} изображения заблокированы} many{{failedCount} изображений заблокировано} other{{failedCount} изображения заблокированы}} правилами контента", + "signalImagesHiddenOffline": "Изображения скрыты в автономном режиме. Они вернутся при подключении к сети.", + "signalImagesRequireInternet": "Изображения требуют интернета. Изображения удалены.", + "signalImagesRestored": "Изображения восстановлены!", + "signalIntentLabel": "Цель", + "signalIosAirplaneModeWarning": "Режим полёта на iOS может приостанавливать BLE-трафик сети даже при наличии подключения. Если сигналы перестали поступать, отключите режим полёта или переключите Bluetooth.", + "signalKeepEditing": "Продолжить редактирование", + "signalLegendFiveMin": "< 5 мин", + "signalLegendOverTwoHrs": "> 2 ч", + "signalLegendThirtyMin": "< 30 мин", + "signalLegendTwoHrs": "< 2 ч", + "signalLetOthersKnowIntent": "Сообщите другим, зачем вы активны", + "signalLoadingComments": "Загрузка комментариев...", + "signalLocal": "Локальный", + "signalLocalBadge": "Локальный", + "signalLocalBadgeGallery": "Локальный", + "signalLocationBadge": "Местоположение", + "signalLocationPrivacyNote": "Местоположение сигнала использует позицию устройства в сети, округлённую до ~{radiusMeters}м.", + "signalLocationUnavailableSent": "Местоположение недоступно, сигнал отправлен без координат.", + "signalMaxFileSize": "Макс. {size} КБ", + "signalMaxImagesAllowed": "Максимум {maxImages, plural, =1{1 изображение} few{{maxImages} изображения} many{{maxImages} изображений} other{{maxImages} изображения}}", + "signalMeshOnlyDebugBanner": "Включён режим отладки (только Mesh). Сигналы используют локальную БД и только сеть.", + "signalMeshOnlyDebugCloudDisabled": "Включён режим отладки (только Mesh). Облачные функции отключены.", + "signalNoCommentsYet": "Комментариев пока нет", + "signalNoDeviceConnectedTooltip": "Устройство не подключено", + "signalNoDeviceLocation": "Местоположение подключённого устройства недоступно", + "signalNoFilterMatch": "Нет сигналов, соответствующих фильтру", + "signalNoIntent": "Цель не указана", + "signalNoLocationDescription": "Сигналы будут отображаться здесь, когда они содержат GPS-координаты", + "signalNoLocationTitle": "Нет сигналов с местоположением", + "signalNoSignals": "Нет сигналов", + "signalOfflineCloudUnavailable": "Автономный режим: изображения и облачные функции недоступны.", + "signalOnMapCount": "{count, plural, =1{1 на карте} few{{count} на карте} many{{count} на карте} other{{count} на карте}}", + "signalOriginCloud": "Облако", "signalOriginMesh": "Mesh", - "signalPeopleActiveCount": "{count} people active", - "signalProcessingImage": "Processing image...", - "signalProfile": "Profile", - "signalRemoveLocation": "Remove location", - "signalRemoveVoteFailed": "Failed to remove vote", - "signalRemovedFromSaved": "Removed from saved", - "signalReplyAction": "Reply", - "signalReplyWithCount": "Reply ({count})", - "signalReplyingTo": "Replying to {author}", - "signalReport": "Report", - "signalReportCopyright": "Copyright violation", - "signalReportFailed": "Failed to report: {error}", - "signalReportHarassment": "Harassment or bullying", - "signalReportNudity": "Nudity or sexual content", - "signalReportOther": "Other", - "signalReportSpam": "Spam or misleading", - "signalReportSubmitted": "Report submitted. Thank you.", - "signalReportViolence": "Violence or dangerous content", - "signalRespondToSignalHint": "Respond to this signal...", - "signalRestore": "Restore", - "signalRestored": "Signal restored", - "signalRetrievingDeviceLocation": "Retrieving device location...", - "signalSaved": "Signal saved", - "signalSavedBadge": "Saved", - "signalSearchHint": "Search signals", - "signalSeenCount": "Seen {formattedCount}", - "signalSelectUpToFourPhotos": "Select up to 4 photos", - "signalSendASignal": "Send a signal...", - "signalSendButton": "Send Signal", - "signalSendResponseFailed": "Failed to send response", - "signalSendSignal": "Send signal", - "signalSending": "Sending...", - "signalSendingLabel": "Sending...", - "signalSent": "Signal sent", - "signalSettings": "Settings", - "signalShortStatusHint": "e.g. \"On the trail near summit\"", - "signalShortStatusOptional": "Short Status (optional)", - "signalShowAll": "Show all signals", - "signalSignIn": "Sign in", - "signalSignInForCloudFeatures": "Sign in to enable images and cloud features.", - "signalSignInForImagesAndComments": "Sign in for images and comments", - "signalSignInRequiredToComment": "Sign in required to comment", - "signalSignInToViewMedia": "Sign in to view attached media", - "signalSignInToVote": "Sign in to vote on responses", - "signalSignalsNearbyCount": "{count} signals nearby", - "signalSomeone": "Someone", - "signalSortByProximity": "By Proximity", - "signalSortClosest": "Closest", - "signalSortExpiring": "Expiring", - "signalSortExpiringSoon": "Expiring Soon", - "signalSortMostRecent": "Most Recent", - "signalSortNewest": "Newest", - "signalSwipeSave": "Save", - "signalSwipeUnsave": "Unsave", - "signalSyncingMedia": "Syncing media", - "signalTakePhoto": "Take Photo", - "signalTapToSet": "Tap to set", - "signalTapToView": "Tap to view", - "signalTemporaryBanner": "Signals are temporary. They fade automatically and exist only while active.", - "signalTimeDaysAgo": "{days}d ago", - "signalTimeHoursAgo": "{hours}h ago", - "signalTimeJustNow": "Just now", - "signalTimeMinutesAgo": "{minutes}m ago", - "signalTimeNowCompact": "now", - "signalTimeWeeksAgo": "{weeks}w ago", - "signalTtlDaysLeft": "{days}d left", - "signalTtlExpired": "Expired", - "signalTtlHoursLeft": "{hours}h left", - "signalTtlMinutesLeft": "{minutes}m left", - "signalTtlSecondsLeft": "{seconds}s left", - "signalUnknownAuthor": "Unknown", - "signalUseCamera": "Use camera", - "signalValidateImagesFailed": "Failed to validate images", - "signalValidatingImages": "Validating {count} images...", - "signalViewButton": "View", - "signalViewGallery": "View gallery", - "signalViewGrid": "Grid view", - "signalViewList": "List view", - "signalViewLocation": "View Location", - "signalViewMap": "Map view", - "signalVoteFailed": "Failed to submit vote", - "signalWhatAreYouSignaling": "What are you signaling?", - "signalWhyReportComment": "Why are you reporting this comment?", - "signalWhyReportSignal": "Why are you reporting this signal?", - "signalWriteReplyHint": "Write a reply...", - "signalYouBadge": "you", - "signalYourIntent": "Your Intent", - "signalYourResponsibility": "Your Responsibility", - "signalsFadeAutomatically": "Signals fade automatically. Only what's still active can be seen.", - "signalsFeedTitle": "Signals", - "signalsPanelTitle": "Signals", - "socialAboutSensitiveContent": "About Sensitive Content", - "socialAccountGoodStanding": "Account in Good Standing", - "socialAccountGoodStandingDesc": "You have no active warnings or strikes.", - "socialAccountGoodStandingLabel": "Good Standing", - "socialAccountMaxStrikes": "Max Strikes", - "socialAccountRecentActivity": "Recent Activity", - "socialAccountStatusActive": "Active", - "socialAccountStatusError": "Error loading status: {error}", - "socialAccountStatusLabel": "Account Status", - "socialAccountStatusTitle": "Account Status", - "socialAccountStrikeMeter": "Strike Meter", - "socialAccountStrikes": "Strikes", - "socialAccountSuspended": "Suspended", - "socialAccountSuspendedTitle": "Account Suspended", - "socialAccountSuspendedMessage": "Your account is currently suspended. You cannot post or comment until the suspension is lifted.", - "socialAccountWarningStrikesActive": "Warning: Strikes Active", - "socialAccountWarnings": "Warnings", - "socialAccountWarningsActive": "Warnings Active", - "socialActiveStrikes": "Active Strikes", - "socialActiveWarnings": "Active Warnings", - "socialActivityClearAll": "Clear all", - "socialActivityClearConfirmLabel": "Clear", - "socialActivityClearConfirmMessage": "This will remove all activity items. This cannot be undone.", - "socialActivityClearConfirmTitle": "Clear all activity?", - "socialActivityCommentedSignal": " commented on your signal", - "socialActivityErrorLoading": "Failed to load activity", - "socialActivityGroupEarlier": "Earlier", - "socialActivityGroupThisMonth": "This Month", - "socialActivityGroupThisWeek": "This Week", - "socialActivityGroupToday": "Today", - "socialActivityGroupYesterday": "Yesterday", - "socialActivityInteracted": " interacted with your content", - "socialActivityLikedSignal": " liked your signal", - "socialActivityLoadingSignal": "Loading Signal...", - "socialActivityMarkAllRead": "Mark all as read", - "socialActivityRepliedComment": " replied to your comment", - "socialActivitySignalNotFound": "Signal not found", - "socialActivityTagline1": "No activity yet.\nInteractions with your posts appear here.", - "socialActivityTagline2": "Likes, comments, follows — all in one place.\nPost something to get started.", - "socialActivityTagline3": "Your social pulse starts here.\nConnect with others to see activity.", - "socialActivityTagline4": "Nothing yet. Activity appears as others\ninteract with your content.", - "socialActivityTitle": "Activity", - "socialActivityTitleKeyword": "activity", - "socialActivityTitlePrefix": "No ", - "socialActivityTitleSuffix": " yet", - "socialAdd": "Add", - "socialAddBanner": "Add banner", - "socialAlbumAll": "All Albums", - "socialAlbumFavorites": "Favorites", - "socialAlbumRecents": "Recents", - "socialAlbumVideos": "Videos", - "socialAppealDecision": "Appeal Decision", - "socialBanReasonHarassment": "Harassment / Bullying", - "socialBanReasonHateSpeech": "Hate speech / Discrimination", - "socialBanReasonIllegal": "Illegal activity", - "socialBanReasonImpersonation": "Impersonation", - "socialBanReasonOther": "Other violation", - "socialBanReasonPornography": "Pornography / Sexual content", - "socialBanReasonSpam": "Spam / Scam", - "socialBanReasonViolence": "Violence / Threats", - "socialBanUserAndDelete": "Ban User & Delete", - "socialBanUserButton": "Ban User", - "socialBanUserFailed": "Failed to ban user: {error}", - "socialBannerRemoveFailed": "Failed to remove banner: {error}", - "socialBannerRemoved": "Banner removed", - "socialBannerUpdated": "Banner updated", - "socialBannerUploadFailed": "Failed to upload banner: {error}", - "socialBlock": "Block", - "socialBlockUser": "Block User", - "socialBlockUserConfirm": "You will no longer see posts from this user.", - "socialBlurSensitiveDesc": "Blur potentially sensitive images and videos until you tap to reveal", - "socialBlurSensitiveMedia": "Blur Sensitive Media", - "socialCancel": "Cancel", - "socialCannotIdentifyUser": "Cannot identify user to ban", - "socialChangeBanner": "Change banner", - "socialClose": "Close", - "socialCommentActionFailed": "Failed: {error}", - "socialCommentDeleteConfirm": "Are you sure you want to delete this comment?", - "socialCommentDeleteFailed": "Failed to delete: {error}", - "socialCommentDeleteTitle": "Delete Comment", - "socialCommentHintAdd": "Add a comment...", - "socialCommentHintReply": "Write a reply...", - "socialCommentReply": "Reply", - "socialCommentReported": "Comment reported", - "socialCommentUnknown": "Unknown", - "socialComments": "Comments", - "socialCommunityGuidelines": "Community Guidelines", - "socialConfirm": "Confirm", - "socialConnectionsTitle": "Connections", - "socialContactSupport": "Questions? Contact Support", - "socialContactSupportButton": "Contact Support", - "socialContentApproved": "Content approved", - "socialContentIdNotFound": "Content ID not found", - "socialContentRemoved": "Content Removed", - "socialContentType": "Content Type", - "socialCreatePostAction": "Create Post", - "socialCreatePostAddImage": "Add image", - "socialCreatePostAddLocation": "Add location", - "socialCreatePostButton": "Post", - "socialCreatePostCreated": "Post created!", - "socialCreatePostCurrentDesc": "Share your GPS coordinates", - "socialCreatePostCurrentLocation": "Current Location", - "socialCreatePostDiscardMsgDraft": "Your draft will be lost.", - "socialCreatePostDiscardMsgImages": "Your uploaded images will be deleted.", - "socialCreatePostDiscardTitle": "Discard post?", - "socialCreatePostEnterLocation": "Enter Location", - "socialCreatePostEnterManually": "Enter Location Manually", - "socialCreatePostFailed": "Failed to create post: {error}", - "socialCreatePostHint": "What's happening on the mesh?", - "socialCreatePostImageCount": "{count}/{max} images", - "socialCreatePostImageViolation": "One or more images violated content policy.", - "socialCreatePostLocationDenied": "Location permission denied", - "socialCreatePostLocationHint": "e.g., San Francisco, CA", - "socialCreatePostLocationLabel": "Location", - "socialCreatePostLocationSheetTitle": "Add Location", - "socialCreatePostManualDesc": "Type in a place name", - "socialCreatePostMaxImages": "Maximum {max} images allowed", - "socialCreatePostNoNodes": "No nodes available. Connect to a mesh first.", - "socialCreatePostNodeLabel": "Node {nodeId}", - "socialCreatePostSignIn": "Sign in to create posts", - "socialCreatePostTagNode": "Tag node", - "socialCreatePostTagNodeTitle": "Tag a Node", - "socialCreatePostTitle": "Create Post", - "socialCreatePostUseCurrent": "Use Current Location", - "socialCreateStoryCamera": "Camera", - "socialCreateStoryCloseFriends": "Close Friends", - "socialCreateStoryDelete": "Delete", - "socialCreateStoryDragInstructions": "Drag to move • Pinch to resize • Long press to delete", - "socialCreateStoryEdit": "Edit", - "socialCreateStoryFailed": "Failed to create story", - "socialCreateStoryFollowers": "Followers", - "socialCreateStoryItemsCount": "{count} items", - "socialCreateStoryLinkNode": "Link to Node", - "socialCreateStoryLocationFailed": "Could not get location", - "socialCreateStoryLocationRequired": "Location permission required", - "socialCreateStoryPublic": "Public", - "socialCreateStoryShared": "Story shared!", - "socialCreateStorySignIn": "Sign in to create stories", - "socialCreateStoryTitle": "Add to Story", - "socialCreateStoryTypeSomething": "Type something...", - "socialCreateStoryUntitledAlbum": "Untitled Album", - "socialDate": "Date", - "socialDefault": "Default", - "socialDelete": "Delete", - "socialDeleteComment": "Delete Comment", - "socialDeleteCommentConfirm": "Are you sure you want to delete this comment?", - "socialDeletePost": "Delete Post", - "socialDeletePostConfirm": "Are you sure you want to delete this post?", - "socialDeleteStory": "Delete story", - "socialDeleteStoryConfirm": "This story will be permanently deleted.", - "socialDeleteType": "Delete {type}", - "socialDeleteTypeConfirm": "This will permanently delete the reported {type}. Continue?", - "socialDiscard": "Discard", - "socialDiscordCopied": "Discord username copied: {username}", - "socialDismiss": "Dismiss", - "socialDisplayOptions": "Display Options", - "socialDone": "Done", - "socialEditProfile": "Edit profile", - "socialEmailCopied": "Email copied to clipboard", - "socialEmptyPostsTagline1": "Share photos and stories about your mesh adventures.", - "socialEmptyPostsTagline2": "Post about your node setups, range tests, and discoveries.", - "socialEmptyPostsTagline3": "Your mesh community is waiting to see what you build.", - "socialEmptyPostsTagline4": "Document your adventures and share them with the mesh.", - "socialErrorLoadingReports": "Error loading reports", - "socialErrorLoadingViewers": "Error loading viewers", - "socialErrorWithDetails": "Error: {error}", - "socialExpires": "Expires", - "socialFailedToBlock": "Failed to block user: {error}", - "socialFailedToDelete": "Failed to delete: {error}", - "socialFailedToGetLocation": "Failed to get location: {error}", - "socialFailedToReport": "Failed to report: {error}", - "socialFailedToReportStory": "Failed to report story: {error}", - "socialFailedToUpdateLike": "Failed to update like", - "socialFailedToUploadImage": "Failed to upload image: {error}", - "socialFeedLocationFallback": "Location", - "socialFilterLevelLess": "Less", - "socialFilterLevelLessDesc": "You may see some content that could be upsetting or offensive. This setting errs on the side of showing more content.", - "socialFilterLevelStandard": "Standard", - "socialFilterLevelStandardDesc": "Content that may be upsetting or offensive is filtered. You may still see some borderline content.", - "socialFollow": "Follow", - "socialFollowActionFailed": "Failed: {error}", - "socialFollowFailed": "Failed to update follow: {error}", - "socialFollowRequestAcceptFailed": "Failed to accept request", - "socialFollowRequestAccepted": "Accepted {name}'s request", - "socialFollowRequestDeclineFailed": "Failed to decline request", - "socialFollowRequestDeclined": "Declined {name}'s request", - "socialFollowRequestsEmpty": "No pending requests", - "socialFollowRequestsEmptyDesc": "When someone requests to follow you, it will appear here.", - "socialFollowRequestsError": "Failed to load: {error}", - "socialFollowRequestsTitle": "Follow Requests", - "socialFollowersError": "Failed to load: {error}", - "socialFollowing": "Following", - "socialGuidelineNoExplicit": "No explicit or adult content", - "socialGuidelineNoHarassment": "No harassment, threats, or hate speech", - "socialGuidelineNoSpam": "No spam, scams, or misleading content", - "socialGuidelinesWarning": "Community Guidelines Warning", - "socialHubSignIn": "Sign in to access Social", - "socialHubSignInDesc": "Create posts, follow users, and connect with the mesh community.", - "socialHubTitle": "Social", - "socialIUnderstand": "I Understand", - "socialImageBlockedByModeration": "Image blocked by moderation", - "socialInvalidNodeId": "Invalid node ID", - "socialJoined": "Joined {date}", - "socialLike": "Like", - "socialLiked": "Liked", - "socialLikePlural": "likes", - "socialLikeSingular": "like", - "socialLinkNodeHint": "Link a mesh node to your next post", - "socialLocationFallback": "Location", - "socialModerationAdditionalNotes": "Additional notes (optional)", - "socialModerationApprove": "Approve", - "socialModerationApproved": "Content approved", - "socialModerationErrorLoading": "Error loading queue", - "socialModerationNoPending": "No items pending review", - "socialModerationNoStatus": "No {status} items", - "socialModerationQueueTitle": "Moderation Queue", - "socialModerationReasonHarassment": "Harassment or bullying", - "socialModerationReasonHateSpeech": "Hate speech or discrimination", - "socialModerationReasonIP": "Intellectual property violation", - "socialModerationReasonNudity": "Nudity or sexual content", - "socialModerationReasonOther": "Other policy violation", - "socialModerationReasonSpam": "Spam or misleading content", - "socialModerationReasonViolence": "Violence or dangerous content", - "socialModerationReject": "Reject", - "socialModerationRejected": "Content rejected", - "socialModerationRejectionReason": "Rejection Reason", - "socialModerationReviewedBy": "Reviewed by {reviewedBy}", - "socialModerationTabApproved": "Approved", - "socialModerationTabPending": "Pending", - "socialModerationTabRejected": "Rejected", - "socialModerationUserLabel": "User: {userId}", - "socialNext": "Next", - "socialNoAlbumsFound": "No albums found", - "socialNoCommentsYet": "No comments yet. Be the first!", - "socialNoContent": "No content", - "socialNoFollowersYet": "No followers yet", - "socialNoLocationPosts": "No location posts", - "socialNoNodePosts": "No node posts", - "socialNoPendingFilterReports": "No pending {filter} reports", - "socialNoPendingReports": "No pending reports", - "socialNoPhotoPosts": "No photo posts", - "socialNoPosts": "No posts", - "socialNoPostsYet": "No posts yet", - "socialNoRecentActivity": "No recent activity", - "socialNoSuggestions": "No suggestions available", - "socialNoUsersFound": "No users found", - "socialNoViewsYet": "No views yet", - "socialNodeLabel": "Node {nodeId}", - "socialNotFollowingAnyone": "Not following anyone yet", - "socialNoticesCount": "{current} of {total} notices", - "socialOK": "OK", - "socialOnline": "Online", - "socialOpenSettings": "Open Settings", - "socialPermanentlyBanned": "Permanently Banned", - "socialPhotoAccessDesc": "To create stories, we need access to your photo library.", - "socialPhotoAccessTitle": "Allow access to your photos", - "socialPostCardLocationFallback": "Location", - "socialPostCardNodeLabel": "Node {nodeId}", - "socialPostCardUnknownUser": "Unknown User", - "socialPostDeleted": "Post deleted", - "socialPostDetailTitle": "Post", - "socialPostNotFound": "Post not found", - "socialPostNotFoundForComment": "Post not found for this comment", - "socialPrivateAccount": "This Account is Private", - "socialPrivateAccountDesc": "Follow {name} to see their posts and linked devices.", - "socialProfileBlockLabel": "Block", - "socialProfileLoadFailed": "Failed to load profile", - "socialProfileNotFound": "Profile not found", - "socialProfileNotFoundDesc": "This profile may have been removed or is temporarily unavailable.", - "socialProfileReportLabel": "Report", - "socialProfileShareLabel": "Share Profile", - "socialReason": "Reason", - "socialRecentFailed": "Failed to load recent users", - "socialRecentlyActive": "Recently active", - "socialRejectDelete": "Reject & Delete", - "socialRejectDeleteMsg": "This will delete the {contentType} and warn the user.", - "socialRemoveBanner": "Remove banner", - "socialReply": "Reply", - "socialReplyingTo": "Replying to {name}", - "socialRepeatedViolationsWarning": "Repeated violations may result in account suspension.", - "socialReport": "Report", - "socialReportComment": "Report Comment", - "socialReportCommentWhy": "Why are you reporting this comment?", - "socialReportDescribeIssue": "Describe the issue...", - "socialReportDismissed": "Report dismissed", - "socialReportPost": "Report Post", - "socialReportPostWhy": "Why are you reporting this post?", - "socialReportProfileSubmitted": "Report submitted", - "socialReportReasonFalseInfo": "False information", - "socialReportReasonHarassment": "Harassment or bullying", - "socialReportReasonHateSpeech": "Hate speech", - "socialReportReasonNudity": "Nudity or sexual content", - "socialReportReasonOther": "Other", - "socialReportReasonSpam": "Spam", - "socialReportReasonViolence": "Violence or threats", - "socialReportStory": "Report story", - "socialReportStoryReasonCopyright": "Copyright violation", - "socialReportStoryReasonHarassment": "Harassment or bullying", - "socialReportStoryReasonNudity": "Nudity or sexual content", - "socialReportStoryReasonOther": "Other", - "socialReportStoryReasonSpam": "Spam or misleading", - "socialReportStoryReasonViolence": "Violence or dangerous content", - "socialReportStoryWhy": "Why are you reporting this story?", - "socialReportSubmitted": "Report submitted. Thank you.", - "socialReportedContentRejected": "Content rejected and user warned", - "socialReportedContentTitle": "Reported Content", - "socialReportedErrorLoading": "Error loading moderation queue", - "socialReportedNoFlagged": "No flagged content", - "socialReportedNoFlaggedDesc": "Auto-moderation has not flagged any content", - "socialReportedTabAll": "All", - "socialReportedTabAuto": "Auto", - "socialReportedTabComments": "Comments", - "socialReportedTabPosts": "Posts", - "socialReportedTabSigComments": "Sig. Comments", - "socialReportedTabSignals": "Signals", - "socialRequested": "Requested", - "socialRetry": "Retry", - "socialSearchFailed": "Search failed: {error}", - "socialSearchHint": "Search users...", - "socialSearchTitle": "Search", - "socialSearchTooltip": "Search", - "socialSendMessage": "Send Message", - "socialSensitiveContentControl": "Sensitive Content Control", - "socialSensitiveContentDescription": "Socialmesh uses automated systems to detect potentially sensitive content. You can adjust how this content is displayed.", - "socialSensitiveContentExplanation": "Control what type of content you see in your feed. This affects AI-moderated content filtering across posts, signals, and stories.", - "socialSensitiveContentTitle": "Sensitive Content", - "socialSettingsTooltip": "Settings", - "socialShare": "Share", - "socialShareFirstPostKeyword": "post", - "socialShareFirstPostPrefix": "Share your first ", - "socialSharePhotoHint": "Share a photo post to see it here", - "socialSignIn": "Sign In", - "socialSignInToLikePosts": "Sign in to like posts", - "socialSignInToUploadImages": "Sign in to upload images", - "socialSignInSubscriptions": "Sign in to manage subscriptions", - "socialStatFollower": "Follower", - "socialStatFollowers": "Followers", - "socialStatFollowing": "Following", - "socialStatPost": "Post", - "socialStatPosts": "Posts", - "socialStatsBarFollowers": "Followers", - "socialStatsBarFollowing": "Following", - "socialStatsBarPosts": "Posts", - "socialStatusFlagged": "FLAGGED", - "socialStatusPending": "PENDING", - "socialStatusRejected": "REJECTED", - "socialStatusStrike": "STRIKE", - "socialStatusSuspended": "SUSPENDED", - "socialStoryBarAdd": "Add", - "socialStoryContentUnavailable": "Content unavailable", - "socialStoryDeleteFailed": "Failed to delete story: {error}", - "socialStoryDeleted": "Story deleted", - "socialStoryMayBeRemoved": "This story may have been removed", - "socialStoryReported": "Story reported. We'll review it soon.", - "socialStoryUserFallback": "User", - "socialStrike3Suspension": "3 strikes result in account suspension", - "socialStrikeAcknowledge": "I Understand", - "socialStrikeAgainstAccount": "Strike Against Your Account", - "socialStrikeContentLabel": "Content: {type}", - "socialStrikeContentTitle": "Content {typeDisplayName}", - "socialStrikeError": "Error: {error}", - "socialStrikeNext": "Next", - "socialStrikeOfTotal": "{current} of {total}", - "socialStrikeReasonLabel": "Reason", - "socialStrikeReceivedStrike": "You have received a strike on your account due to a community guideline violation.", - "socialStrikeReceivedWarning": "You have received a warning. Please review our community guidelines.", - "socialStrikeTapReview": "You have {count} strike(s) - tap to review", - "socialStrikesExpireInfo": "Strikes expire after 90 days of no violations.", - "socialStrikesOnAccount": "{count} active strike(s) on your account", - "socialSubscribe": "Subscribe", - "socialSubscribed": "Subscribed", - "socialSubscriptionFailed": "Failed to update subscription: {error}", - "socialSuggestedForYou": "Suggested for you", - "socialSuggestionsFailed": "Failed to load suggestions", - "socialSuspendedContactSupport": "Contact support to appeal this decision", - "socialSuspendedDaysPlural": "{n} days", - "socialSuspendedDaysSingular": "{n} day", - "socialSuspendedDefaultReason": "Your account has been suspended due to repeated violations of our community guidelines.", - "socialSuspendedGoBack": "Go back", - "socialSuspendedHoursPlural": "{n} hours", - "socialSuspendedHoursSingular": "{n} hour", - "socialSuspendedIndefinite": "Indefinite suspension", - "socialSuspendedIndefinitely": "indefinitely", - "socialSuspendedLabel": "Suspended", - "socialSuspendedMinutesPlural": "{n} minutes", - "socialSuspendedMinutesSingular": "{n} minute", - "socialSuspendedPermanent": "Account Suspended", - "socialSuspendedRemaining": "Remaining: {duration}", - "socialSuspendedReviewGuidelines": "Review our community guidelines", - "socialSuspendedShortly": "shortly", - "socialSuspendedStrikesCount": "{count} strike(s) on your account", - "socialSuspendedTemporary": "Posting Temporarily Suspended", - "socialSuspendedWaitAppeal": "Wait for your appeal to be reviewed", - "socialSuspendedWaitPeriod": "Wait for the suspension period to end", - "socialSuspendedWhatCanIDo": "What can I do?", - "socialSuspendedWhyTitle": "Why am I seeing this?", - "socialSuspensionEnds": "Suspension Ends", - "socialTabFollowers": "Followers", - "socialTabFollowing": "Following", - "socialTagLocationHint": "Tag a location in your next post", - "socialTimeDaysAgo": "{n}d ago", - "socialTimeHoursAgo": "{n}h ago", - "socialTimeJustNow": "Just now", - "socialTimeMinutesAgo": "{n}m ago", - "socialTryDifferentFilter": "Try selecting a different filter", - "socialTryDifferentSearch": "Try a different search term", - "socialTypeDeleted": "{type} deleted", - "socialUnfollow": "Unfollow", - "socialUnknownUser": "Unknown User", - "socialUnsubscribed": "Unsubscribed", - "socialUnsuspend": "Unsuspend", - "socialUnsuspendConfirm": "Are you sure you want to lift the suspension on {displayName}?", - "socialUnsuspendUser": "Unsuspend User", - "socialUserBannedAndDeleted": "User banned and {type} deleted", - "socialUserBlocked": "User blocked", - "socialUserBlockedName": "{name} blocked", - "socialUserFallback": "User", - "socialUserUnsuspended": "User unsuspended successfully", - "socialView": "View", - "socialViewLabel": "view", - "socialViewLocation": "View location", - "socialViewOnMap": "View on Map", - "socialViewersTitle": "Viewers", - "socialViewsLabel": "views", - "socialViolationsDetected": "Violations Detected", - "socialVisibilityFollowers": "Followers", - "socialVisibilityFollowersDesc": "Only your followers can see this", - "socialVisibilityOnlyMe": "Only me", - "socialVisibilityOnlyMeDesc": "Only you can see this post", - "socialVisibilityPublic": "Public", - "socialVisibilityPublicDesc": "Anyone can see this post", - "socialVisibilityWhoCanSee": "Who can see this?", - "socialWarningsOnAccount": "{count} active warning(s) on your account", - "socialWarningsTapReview": "You have {count} warning(s) - tap to review", - "socialYourStory": "Your story", - "takAffiliationAssumedFriend": "Assumed Friend", - "takAffiliationFriendly": "Friendly", - "takAffiliationHostile": "Hostile", - "takAffiliationNeutral": "Neutral", - "takAffiliationPending": "Pending", - "takAffiliationSuspect": "Suspect", - "takAffiliationUnknown": "Unknown", - "takCompassE": "E", - "takCompassN": "N", - "takCompassNE": "NE", - "takCompassNW": "NW", - "takCompassS": "S", - "takCompassSE": "SE", - "takCompassSW": "SW", - "takCompassW": "W", + "signalPeopleActiveCount": "{count, plural, =1{1 активный пользователь} few{{count} активных пользователя} many{{count} активных пользователей} other{{count} активного пользователя}}", + "signalProcessingImage": "Обработка изображения...", + "signalProfile": "Профиль", + "signalRemoveLocation": "Удалить местоположение", + "signalRemoveVoteFailed": "Не удалось отменить голос", + "signalRemovedFromSaved": "Удалено из сохранённых", + "signalReplyAction": "Ответить", + "signalReplyWithCount": "Ответить ({count})", + "signalReplyingTo": "Ответ {author}", + "signalReport": "Пожаловаться", + "signalReportCopyright": "Нарушение авторских прав", + "signalReportFailed": "Не удалось отправить жалобу: {error}", + "signalReportHarassment": "Преследование или травля", + "signalReportNudity": "Откровенный или сексуальный контент", + "signalReportOther": "Другое", + "signalReportSpam": "Спам или дезинформация", + "signalReportSubmitted": "Жалоба отправлена. Спасибо.", + "signalReportViolence": "Насилие или опасный контент", + "signalRespondToSignalHint": "Ответьте на этот сигнал...", + "signalRestore": "Восстановить", + "signalRestored": "Сигнал восстановлен", + "signalRetrievingDeviceLocation": "Получение местоположения устройства...", + "signalSaved": "Сигнал сохранён", + "signalSavedBadge": "Сохранён", + "signalSearchHint": "Поиск сигналов", + "signalSeenCount": "Просмотрено {formattedCount}", + "signalSelectUpToFourPhotos": "Выберите до 4 фотографий", + "signalSendASignal": "Отправить сигнал...", + "signalSendButton": "Отправить сигнал", + "signalSendResponseFailed": "Не удалось отправить ответ", + "signalSendSignal": "Отправить сигнал", + "signalSending": "Отправка...", + "signalSendingLabel": "Отправка...", + "signalSent": "Сигнал отправлен", + "signalSettings": "Настройки", + "signalShortStatusHint": "например, «На тропе у вершины»", + "signalShortStatusOptional": "Краткий статус (необязательно)", + "signalShowAll": "Показать все сигналы", + "signalSignIn": "Войти", + "signalSignInForCloudFeatures": "Войдите, чтобы включить изображения и облачные функции.", + "signalSignInForImagesAndComments": "Войдите для доступа к изображениям и комментариям", + "signalSignInRequiredToComment": "Для комментирования необходимо войти", + "signalSignInToViewMedia": "Войдите, чтобы просмотреть прикреплённые медиафайлы", + "signalSignInToVote": "Войдите, чтобы голосовать за ответы", + "signalSignalsNearbyCount": "{count, plural, =1{1 сигнал рядом} few{{count} сигнала рядом} many{{count} сигналов рядом} other{{count} сигнала рядом}}", + "signalSomeone": "Кто-то", + "signalSortByProximity": "По расстоянию", + "signalSortClosest": "Ближайшие", + "signalSortExpiring": "Истекающие", + "signalSortExpiringSoon": "Скоро истекут", + "signalSortMostRecent": "Самые новые", + "signalSortNewest": "Новейшие", + "signalSwipeSave": "Сохранить", + "signalSwipeUnsave": "Убрать из сохранённых", + "signalSyncingMedia": "Синхронизация медиа", + "signalTakePhoto": "Сделать фото", + "signalTapToSet": "Нажмите для установки", + "signalTapToView": "Нажмите для просмотра", + "signalTemporaryBanner": "Сигналы временны. Они угасают автоматически и существуют только пока активны.", + "signalTimeDaysAgo": "{days}д назад", + "signalTimeHoursAgo": "{hours}ч назад", + "signalTimeJustNow": "Только что", + "signalTimeMinutesAgo": "{minutes}м назад", + "signalTimeNowCompact": "сейчас", + "signalTimeWeeksAgo": "{weeks}н назад", + "signalTtlDaysLeft": "Осталось {days}д", + "signalTtlExpired": "Истёк", + "signalTtlHoursLeft": "Осталось {hours}ч", + "signalTtlMinutesLeft": "Осталось {minutes}м", + "signalTtlSecondsLeft": "Осталось {seconds}с", + "signalUnknownAuthor": "Неизвестный", + "signalUseCamera": "Использовать камеру", + "signalValidateImagesFailed": "Не удалось проверить изображения", + "signalValidatingImages": "Проверка {count, plural, =1{1 изображения} few{{count} изображений} many{{count} изображений} other{{count} изображений}}...", + "signalViewButton": "Просмотреть", + "signalViewGallery": "Открыть галерею", + "signalViewGrid": "Сетка", + "signalViewList": "Список", + "signalViewLocation": "Посмотреть местоположение", + "signalViewMap": "Карта", + "signalVoteFailed": "Не удалось отправить голос", + "signalWhatAreYouSignaling": "Что вы сигналите?", + "signalWhyReportComment": "Почему вы жалуетесь на этот комментарий?", + "signalWhyReportSignal": "Почему вы жалуетесь на этот сигнал?", + "signalWriteReplyHint": "Написать ответ...", + "signalYouBadge": "вы", + "signalYourIntent": "Ваша цель", + "signalYourResponsibility": "Ваша ответственность", + "signalsFadeAutomatically": "Сигналы угасают автоматически. Видно только то, что ещё активно.", + "signalsFeedTitle": "Сигналы", + "signalsPanelTitle": "Сигналы", + "socialAboutSensitiveContent": "О контенте для взрослых", + "socialAccountGoodStanding": "Аккаунт в порядке", + "socialAccountGoodStandingDesc": "У вас нет активных предупреждений или нарушений.", + "socialAccountGoodStandingLabel": "В порядке", + "socialAccountMaxStrikes": "Максимальное число нарушений", + "socialAccountRecentActivity": "Недавняя активность", + "socialAccountStatusActive": "Активен", + "socialAccountStatusError": "Ошибка загрузки статуса: {error}", + "socialAccountStatusLabel": "Статус аккаунта", + "socialAccountStatusTitle": "Статус аккаунта", + "socialAccountStrikeMeter": "Счётчик нарушений", + "socialAccountStrikes": "Нарушения", + "socialAccountSuspended": "Заблокирован", + "socialAccountSuspendedTitle": "Аккаунт заблокирован", + "socialAccountSuspendedMessage": "Ваш аккаунт в данный момент заблокирован. Вы не можете публиковать посты или комментарии до снятия блокировки.", + "socialAccountWarningStrikesActive": "Предупреждение: есть активные нарушения", + "socialAccountWarnings": "Предупреждения", + "socialAccountWarningsActive": "Активные предупреждения", + "socialActiveStrikes": "Активные нарушения", + "socialActiveWarnings": "Активные предупреждения", + "socialActivityClearAll": "Очистить всё", + "socialActivityClearConfirmLabel": "Очистить", + "socialActivityClearConfirmMessage": "Все записи активности будут удалены. Это действие нельзя отменить.", + "socialActivityClearConfirmTitle": "Очистить всю активность?", + "socialActivityCommentedSignal": " прокомментировал(а) ваш сигнал", + "socialActivityErrorLoading": "Не удалось загрузить активность", + "socialActivityGroupEarlier": "Ранее", + "socialActivityGroupThisMonth": "В этом месяце", + "socialActivityGroupThisWeek": "На этой неделе", + "socialActivityGroupToday": "Сегодня", + "socialActivityGroupYesterday": "Вчера", + "socialActivityInteracted": " взаимодействовал(а) с вашим контентом", + "socialActivityLikedSignal": " оценил(а) ваш сигнал", + "socialActivityLoadingSignal": "Загрузка сигнала...", + "socialActivityMarkAllRead": "Отметить всё как прочитанное", + "socialActivityRepliedComment": " ответил(а) на ваш комментарий", + "socialActivitySignalNotFound": "Сигнал не найден", + "socialActivityTagline1": "Активности пока нет.\nВзаимодействия с вашими публикациями отображаются здесь.", + "socialActivityTagline2": "Лайки, комментарии, подписки — всё в одном месте.\nОпубликуйте что-нибудь, чтобы начать.", + "socialActivityTagline3": "Ваша социальная жизнь начинается здесь.\nПодключайтесь к другим, чтобы видеть активность.", + "socialActivityTagline4": "Пока ничего. Активность появится, когда другие\nбудут взаимодействовать с вашим контентом.", + "socialActivityTitle": "Активность", + "socialActivityTitleKeyword": "активность", + "socialActivityTitlePrefix": "Нет ", + "socialActivityTitleSuffix": " пока", + "socialAdd": "Добавить", + "socialAddBanner": "Добавить баннер", + "socialAlbumAll": "Все альбомы", + "socialAlbumFavorites": "Избранное", + "socialAlbumRecents": "Недавние", + "socialAlbumVideos": "Видео", + "socialAppealDecision": "Обжаловать решение", + "socialBanReasonHarassment": "Преследование / Травля", + "socialBanReasonHateSpeech": "Разжигание ненависти / Дискриминация", + "socialBanReasonIllegal": "Незаконная деятельность", + "socialBanReasonImpersonation": "Самозванство", + "socialBanReasonOther": "Другое нарушение", + "socialBanReasonPornography": "Порнография / Сексуальный контент", + "socialBanReasonSpam": "Спам / Мошенничество", + "socialBanReasonViolence": "Насилие / Угрозы", + "socialBanUserAndDelete": "Заблокировать пользователя и удалить", + "socialBanUserButton": "Заблокировать пользователя", + "socialBanUserFailed": "Не удалось заблокировать пользователя: {error}", + "socialBannerRemoveFailed": "Не удалось удалить баннер: {error}", + "socialBannerRemoved": "Баннер удалён", + "socialBannerUpdated": "Баннер обновлён", + "socialBannerUploadFailed": "Не удалось загрузить баннер: {error}", + "socialBlock": "Заблокировать", + "socialBlockUser": "Заблокировать пользователя", + "socialBlockUserConfirm": "Вы больше не будете видеть публикации этого пользователя.", + "socialBlurSensitiveDesc": "Размывать потенциально чувствительные изображения и видео до нажатия для просмотра", + "socialBlurSensitiveMedia": "Размывать чувствительный контент", + "socialCancel": "Отмена", + "socialCannotIdentifyUser": "Невозможно определить пользователя для блокировки", + "socialChangeBanner": "Изменить баннер", + "socialClose": "Закрыть", + "socialCommentActionFailed": "Ошибка: {error}", + "socialCommentDeleteConfirm": "Вы уверены, что хотите удалить этот комментарий?", + "socialCommentDeleteFailed": "Не удалось удалить: {error}", + "socialCommentDeleteTitle": "Удалить комментарий", + "socialCommentHintAdd": "Добавить комментарий...", + "socialCommentHintReply": "Написать ответ...", + "socialCommentReply": "Ответить", + "socialCommentReported": "Жалоба на комментарий отправлена", + "socialCommentUnknown": "Неизвестно", + "socialComments": "Комментарии", + "socialCommunityGuidelines": "Правила сообщества", + "socialConfirm": "Подтвердить", + "socialConnectionsTitle": "Контакты", + "socialContactSupport": "Вопросы? Обратитесь в поддержку", + "socialContactSupportButton": "Обратиться в поддержку", + "socialContentApproved": "Контент одобрен", + "socialContentIdNotFound": "Идентификатор контента не найден", + "socialContentRemoved": "Контент удалён", + "socialContentType": "Тип контента", + "socialCreatePostAction": "Создать публикацию", + "socialCreatePostAddImage": "Добавить изображение", + "socialCreatePostAddLocation": "Добавить местоположение", + "socialCreatePostButton": "Опубликовать", + "socialCreatePostCreated": "Публикация создана!", + "socialCreatePostCurrentDesc": "Поделиться координатами GPS", + "socialCreatePostCurrentLocation": "Текущее местоположение", + "socialCreatePostDiscardMsgDraft": "Ваш черновик будет потерян.", + "socialCreatePostDiscardMsgImages": "Загруженные изображения будут удалены.", + "socialCreatePostDiscardTitle": "Отменить публикацию?", + "socialCreatePostEnterLocation": "Введите местоположение", + "socialCreatePostEnterManually": "Ввести местоположение вручную", + "socialCreatePostFailed": "Не удалось создать публикацию: {error}", + "socialCreatePostHint": "Что происходит в сети?", + "socialCreatePostImageCount": "{count}/{max} изображений", + "socialCreatePostImageViolation": "Одно или несколько изображений нарушают правила контента.", + "socialCreatePostLocationDenied": "Доступ к местоположению запрещён", + "socialCreatePostLocationHint": "например, Москва", + "socialCreatePostLocationLabel": "Местоположение", + "socialCreatePostLocationSheetTitle": "Добавить местоположение", + "socialCreatePostManualDesc": "Введите название места", + "socialCreatePostMaxImages": "Максимально допустимо {max} изображений", + "socialCreatePostNoNodes": "Нет доступных узлов. Сначала подключитесь к сети.", + "socialCreatePostNodeLabel": "Узел {nodeId}", + "socialCreatePostSignIn": "Войдите, чтобы создавать публикации", + "socialCreatePostTagNode": "Отметить узел", + "socialCreatePostTagNodeTitle": "Отметить узел", + "socialCreatePostTitle": "Создать публикацию", + "socialCreatePostUseCurrent": "Использовать текущее местоположение", + "socialCreateStoryCamera": "Камера", + "socialCreateStoryCloseFriends": "Близкие друзья", + "socialCreateStoryDelete": "Удалить", + "socialCreateStoryDragInstructions": "Перетащите для перемещения • Сведите пальцы для изменения размера • Долгое нажатие для удаления", + "socialCreateStoryEdit": "Редактировать", + "socialCreateStoryFailed": "Не удалось создать историю", + "socialCreateStoryFollowers": "Подписчики", + "socialCreateStoryItemsCount": "{count} элементов", + "socialCreateStoryLinkNode": "Привязать узел", + "socialCreateStoryLocationFailed": "Не удалось определить местоположение", + "socialCreateStoryLocationRequired": "Требуется разрешение на доступ к местоположению", + "socialCreateStoryPublic": "Публично", + "socialCreateStoryShared": "История опубликована!", + "socialCreateStorySignIn": "Войдите, чтобы создавать истории", + "socialCreateStoryTitle": "Добавить в историю", + "socialCreateStoryTypeSomething": "Напишите что-нибудь...", + "socialCreateStoryUntitledAlbum": "Альбом без названия", + "socialDate": "Дата", + "socialDefault": "По умолчанию", + "socialDelete": "Удалить", + "socialDeleteComment": "Удалить комментарий", + "socialDeleteCommentConfirm": "Вы уверены, что хотите удалить этот комментарий?", + "socialDeletePost": "Удалить публикацию", + "socialDeletePostConfirm": "Вы уверены, что хотите удалить эту публикацию?", + "socialDeleteStory": "Удалить историю", + "socialDeleteStoryConfirm": "Эта история будет удалена без возможности восстановления.", + "socialDeleteType": "Удалить {type}", + "socialDeleteTypeConfirm": "Это действие навсегда удалит пожалованный объект типа {type}. Продолжить?", + "socialDiscard": "Отменить", + "socialDiscordCopied": "Имя пользователя Discord скопировано: {username}", + "socialDismiss": "Закрыть", + "socialDisplayOptions": "Параметры отображения", + "socialDone": "Готово", + "socialEditProfile": "Редактировать профиль", + "socialEmailCopied": "Электронная почта скопирована в буфер обмена", + "socialEmptyPostsTagline1": "Делитесь фото и историями о ваших приключениях в сети.", + "socialEmptyPostsTagline2": "Публикуйте о настройке узлов, тестах дальности и открытиях.", + "socialEmptyPostsTagline3": "Сообщество сети ждёт, чтобы увидеть, что вы создаёте.", + "socialEmptyPostsTagline4": "Документируйте свои приключения и делитесь ими с сетью.", + "socialErrorLoadingReports": "Ошибка загрузки жалоб", + "socialErrorLoadingViewers": "Ошибка загрузки просмотров", + "socialErrorWithDetails": "Ошибка: {error}", + "socialExpires": "Истекает", + "socialFailedToBlock": "Не удалось заблокировать пользователя: {error}", + "socialFailedToDelete": "Не удалось удалить: {error}", + "socialFailedToGetLocation": "Не удалось получить местоположение: {error}", + "socialFailedToReport": "Не удалось пожаловаться: {error}", + "socialFailedToReportStory": "Не удалось пожаловаться на историю: {error}", + "socialFailedToUpdateLike": "Не удалось обновить отметку «Нравится»", + "socialFailedToUploadImage": "Не удалось загрузить изображение: {error}", + "socialFeedLocationFallback": "Местоположение", + "socialFilterLevelLess": "Меньше", + "socialFilterLevelLessDesc": "Вы можете видеть контент, который может расстроить или оскорбить. Этот параметр склоняется к показу большего количества контента.", + "socialFilterLevelStandard": "Стандартный", + "socialFilterLevelStandardDesc": "Контент, который может расстроить или оскорбить, фильтруется. Вы всё же можете видеть некоторый пограничный контент.", + "socialFollow": "Подписаться", + "socialFollowActionFailed": "Ошибка: {error}", + "socialFollowFailed": "Не удалось обновить подписку: {error}", + "socialFollowRequestAcceptFailed": "Не удалось принять запрос", + "socialFollowRequestAccepted": "Запрос от {name} принят", + "socialFollowRequestDeclineFailed": "Не удалось отклонить запрос", + "socialFollowRequestDeclined": "Запрос от {name} отклонён", + "socialFollowRequestsEmpty": "Нет ожидающих запросов", + "socialFollowRequestsEmptyDesc": "Когда кто-то запросит подписку на вас, это появится здесь.", + "socialFollowRequestsError": "Не удалось загрузить: {error}", + "socialFollowRequestsTitle": "Запросы на подписку", + "socialFollowersError": "Не удалось загрузить: {error}", + "socialFollowing": "Подписки", + "socialGuidelineNoExplicit": "Запрещён откровенный или контент для взрослых", + "socialGuidelineNoHarassment": "Запрещены преследование, угрозы и разжигание ненависти", + "socialGuidelineNoSpam": "Запрещены спам, мошенничество и вводящий в заблуждение контент", + "socialGuidelinesWarning": "Предупреждение о нарушении правил сообщества", + "socialHubSignIn": "Войдите, чтобы получить доступ к разделу «Социальный»", + "socialHubSignInDesc": "Создавайте публикации, подписывайтесь на пользователей и общайтесь с сообществом сети.", + "socialHubTitle": "Социальный", + "socialIUnderstand": "Понятно", + "socialImageBlockedByModeration": "Изображение заблокировано модерацией", + "socialInvalidNodeId": "Недействительный идентификатор узла", + "socialJoined": "Присоединился {date}", + "socialLike": "Нравится", + "socialLiked": "Понравилось", + "socialLikePlural": "отметок «Нравится»", + "socialLikeSingular": "отметка «Нравится»", + "socialLinkNodeHint": "Привяжите узел сети к следующей публикации", + "socialLocationFallback": "Местоположение", + "socialModerationAdditionalNotes": "Дополнительные заметки (необязательно)", + "socialModerationApprove": "Одобрить", + "socialModerationApproved": "Контент одобрен", + "socialModerationErrorLoading": "Ошибка загрузки очереди", + "socialModerationNoPending": "Нет элементов на рассмотрении", + "socialModerationNoStatus": "Нет элементов со статусом «{status}»", + "socialModerationQueueTitle": "Очередь модерации", + "socialModerationReasonHarassment": "Преследование или травля", + "socialModerationReasonHateSpeech": "Разжигание ненависти или дискриминация", + "socialModerationReasonIP": "Нарушение прав интеллектуальной собственности", + "socialModerationReasonNudity": "Обнажённость или сексуальный контент", + "socialModerationReasonOther": "Другое нарушение правил", + "socialModerationReasonSpam": "Спам или вводящий в заблуждение контент", + "socialModerationReasonViolence": "Насилие или опасный контент", + "socialModerationReject": "Отклонить", + "socialModerationRejected": "Контент отклонён", + "socialModerationRejectionReason": "Причина отклонения", + "socialModerationReviewedBy": "Проверено: {reviewedBy}", + "socialModerationTabApproved": "Одобрено", + "socialModerationTabPending": "На рассмотрении", + "socialModerationTabRejected": "Отклонено", + "socialModerationUserLabel": "Пользователь: {userId}", + "socialNext": "Далее", + "socialNoAlbumsFound": "Альбомы не найдены", + "socialNoCommentsYet": "Комментариев пока нет. Будьте первым!", + "socialNoContent": "Нет контента", + "socialNoFollowersYet": "Подписчиков пока нет", + "socialNoLocationPosts": "Нет публикаций с геолокацией", + "socialNoNodePosts": "Нет публикаций от узлов", + "socialNoPendingFilterReports": "Нет ожидающих жалоб по фильтру «{filter}»", + "socialNoPendingReports": "Нет ожидающих жалоб", + "socialNoPhotoPosts": "Нет фотопубликаций", + "socialNoPosts": "Нет публикаций", + "socialNoPostsYet": "Публикаций пока нет", + "socialNoRecentActivity": "Нет недавней активности", + "socialNoSuggestions": "Нет доступных предложений", + "socialNoUsersFound": "Пользователи не найдены", + "socialNoViewsYet": "Просмотров пока нет", + "socialNodeLabel": "Узел {nodeId}", + "socialNotFollowingAnyone": "Вы пока ни на кого не подписаны", + "socialNoticesCount": "{current} из {total} уведомлений", + "socialOK": "ОК", + "socialOnline": "В сети", + "socialOpenSettings": "Открыть настройки", + "socialPermanentlyBanned": "Заблокирован навсегда", + "socialPhotoAccessDesc": "Для создания историй нам необходим доступ к вашей фотобиблиотеке.", + "socialPhotoAccessTitle": "Разрешить доступ к фотографиям", + "socialPostCardLocationFallback": "Местоположение", + "socialPostCardNodeLabel": "Узел {nodeId}", + "socialPostCardUnknownUser": "Неизвестный пользователь", + "socialPostDeleted": "Публикация удалена", + "socialPostDetailTitle": "Публикация", + "socialPostNotFound": "Публикация не найдена", + "socialPostNotFoundForComment": "Публикация для этого комментария не найдена", + "socialPrivateAccount": "Этот аккаунт закрытый", + "socialPrivateAccountDesc": "Подпишитесь на {name}, чтобы видеть публикации и подключённые устройства.", + "socialProfileBlockLabel": "Заблокировать", + "socialProfileLoadFailed": "Не удалось загрузить профиль", + "socialProfileNotFound": "Профиль не найден", + "socialProfileNotFoundDesc": "Этот профиль мог быть удалён или временно недоступен.", + "socialProfileReportLabel": "Пожаловаться", + "socialProfileShareLabel": "Поделиться профилем", + "socialReason": "Причина", + "socialRecentFailed": "Не удалось загрузить недавних пользователей", + "socialRecentlyActive": "Недавно активен", + "socialRejectDelete": "Отклонить и удалить", + "socialRejectDeleteMsg": "Это удалит {contentType} и вынесет предупреждение пользователю.", + "socialRemoveBanner": "Удалить баннер", + "socialReply": "Ответить", + "socialReplyingTo": "Ответ пользователю {name}", + "socialRepeatedViolationsWarning": "Повторные нарушения могут привести к блокировке аккаунта.", + "socialReport": "Пожаловаться", + "socialReportComment": "Пожаловаться на комментарий", + "socialReportCommentWhy": "Почему вы жалуетесь на этот комментарий?", + "socialReportDescribeIssue": "Опишите проблему...", + "socialReportDismissed": "Жалоба отклонена", + "socialReportPost": "Пожаловаться на публикацию", + "socialReportPostWhy": "Почему вы жалуетесь на эту публикацию?", + "socialReportProfileSubmitted": "Жалоба отправлена", + "socialReportReasonFalseInfo": "Ложная информация", + "socialReportReasonHarassment": "Преследование или травля", + "socialReportReasonHateSpeech": "Язык ненависти", + "socialReportReasonNudity": "Обнажённость или сексуальный контент", + "socialReportReasonOther": "Другое", + "socialReportReasonSpam": "Спам", + "socialReportReasonViolence": "Насилие или угрозы", + "socialReportStory": "Пожаловаться на историю", + "socialReportStoryReasonCopyright": "Нарушение авторских прав", + "socialReportStoryReasonHarassment": "Преследование или травля", + "socialReportStoryReasonNudity": "Обнажённость или сексуальный контент", + "socialReportStoryReasonOther": "Другое", + "socialReportStoryReasonSpam": "Спам или введение в заблуждение", + "socialReportStoryReasonViolence": "Насилие или опасный контент", + "socialReportStoryWhy": "Почему вы жалуетесь на эту историю?", + "socialReportSubmitted": "Жалоба отправлена. Спасибо.", + "socialReportedContentRejected": "Контент отклонён, пользователю вынесено предупреждение", + "socialReportedContentTitle": "Пожаловавшийся контент", + "socialReportedErrorLoading": "Ошибка загрузки очереди модерации", + "socialReportedNoFlagged": "Нет помеченного контента", + "socialReportedNoFlaggedDesc": "Автомодерация не пометила никакой контент", + "socialReportedTabAll": "Все", + "socialReportedTabAuto": "Авто", + "socialReportedTabComments": "Комментарии", + "socialReportedTabPosts": "Публикации", + "socialReportedTabSigComments": "Комм. к сигналам", + "socialReportedTabSignals": "Сигналы", + "socialRequested": "Запрошено", + "socialRetry": "Повторить", + "socialSearchFailed": "Ошибка поиска: {error}", + "socialSearchHint": "Поиск пользователей...", + "socialSearchTitle": "Поиск", + "socialSearchTooltip": "Поиск", + "socialSendMessage": "Отправить сообщение", + "socialSensitiveContentControl": "Управление чувствительным контентом", + "socialSensitiveContentDescription": "Socialmesh использует автоматизированные системы для обнаружения потенциально чувствительного контента. Вы можете настроить отображение такого контента.", + "socialSensitiveContentExplanation": "Управляйте тем, какой контент отображается в вашей ленте. Это влияет на фильтрацию публикаций, сигналов и историй с помощью ИИ-модерации.", + "socialSensitiveContentTitle": "Чувствительный контент", + "socialSettingsTooltip": "Настройки", + "socialShare": "Поделиться", + "socialShareFirstPostKeyword": "публикацию", + "socialShareFirstPostPrefix": "Поделитесь своей первой ", + "socialSharePhotoHint": "Поделитесь фотопубликацией, чтобы она отобразилась здесь", + "socialSignIn": "Войти", + "socialSignInToLikePosts": "Войдите, чтобы ставить отметки «Нравится»", + "socialSignInToUploadImages": "Войдите, чтобы загружать изображения", + "socialSignInSubscriptions": "Войдите, чтобы управлять подписками", + "socialStatFollower": "Подписчик", + "socialStatFollowers": "Подписчики", + "socialStatFollowing": "Подписки", + "socialStatPost": "Публикация", + "socialStatPosts": "Публикации", + "socialStatsBarFollowers": "Подписчики", + "socialStatsBarFollowing": "Подписки", + "socialStatsBarPosts": "Публикации", + "socialStatusFlagged": "ПОМЕЧЕНО", + "socialStatusPending": "НА РАССМОТРЕНИИ", + "socialStatusRejected": "ОТКЛОНЕНО", + "socialStatusStrike": "НАРУШЕНИЕ", + "socialStatusSuspended": "ЗАБЛОКИРОВАНО", + "socialStoryBarAdd": "Добавить", + "socialStoryContentUnavailable": "Контент недоступен", + "socialStoryDeleteFailed": "Не удалось удалить историю: {error}", + "socialStoryDeleted": "История удалена", + "socialStoryMayBeRemoved": "Эта история могла быть удалена", + "socialStoryReported": "Жалоба на историю отправлена. Мы скоро её рассмотрим.", + "socialStoryUserFallback": "Пользователь", + "socialStrike3Suspension": "3 нарушения приводят к блокировке аккаунта", + "socialStrikeAcknowledge": "Я понимаю", + "socialStrikeAgainstAccount": "Нарушение на вашем аккаунте", + "socialStrikeContentLabel": "Контент: {type}", + "socialStrikeContentTitle": "Контент {typeDisplayName}", + "socialStrikeError": "Ошибка: {error}", + "socialStrikeNext": "Далее", + "socialStrikeOfTotal": "{current} из {total}", + "socialStrikeReasonLabel": "Причина", + "socialStrikeReceivedStrike": "Вашему аккаунту засчитано нарушение в связи с несоблюдением правил сообщества.", + "socialStrikeReceivedWarning": "Вам вынесено предупреждение. Пожалуйста, ознакомьтесь с правилами сообщества.", + "socialStrikeTapReview": "У вас {count} нарушение(й) — нажмите для просмотра", + "socialStrikesExpireInfo": "Нарушения аннулируются через 90 дней без новых нарушений.", + "socialStrikesOnAccount": "{count} активное(ых) нарушение(й) на вашем аккаунте", + "socialSubscribe": "Подписаться", + "socialSubscribed": "Подписка оформлена", + "socialSubscriptionFailed": "Не удалось обновить подписку: {error}", + "socialSuggestedForYou": "Рекомендуем вам", + "socialSuggestionsFailed": "Не удалось загрузить предложения", + "socialSuspendedContactSupport": "Обратитесь в поддержку, чтобы обжаловать это решение", + "socialSuspendedDaysPlural": "{n} дней", + "socialSuspendedDaysSingular": "{n} день", + "socialSuspendedDefaultReason": "Ваш аккаунт заблокирован из-за повторных нарушений правил сообщества.", + "socialSuspendedGoBack": "Назад", + "socialSuspendedHoursPlural": "{n} часов", + "socialSuspendedHoursSingular": "{n} час", + "socialSuspendedIndefinite": "Бессрочная блокировка", + "socialSuspendedIndefinitely": "бессрочно", + "socialSuspendedLabel": "Заблокирован", + "socialSuspendedMinutesPlural": "{n} минут", + "socialSuspendedMinutesSingular": "{n} минута", + "socialSuspendedPermanent": "Аккаунт заблокирован", + "socialSuspendedRemaining": "Осталось: {duration}", + "socialSuspendedReviewGuidelines": "Ознакомьтесь с правилами сообщества", + "socialSuspendedShortly": "скоро", + "socialSuspendedStrikesCount": "{count} нарушение(й) на вашем аккаунте", + "socialSuspendedTemporary": "Публикация временно заблокирована", + "socialSuspendedWaitAppeal": "Дождитесь рассмотрения вашей апелляции", + "socialSuspendedWaitPeriod": "Дождитесь окончания срока блокировки", + "socialSuspendedWhatCanIDo": "Что я могу сделать?", + "socialSuspendedWhyTitle": "Почему я вижу это?", + "socialSuspensionEnds": "Блокировка заканчивается", + "socialTabFollowers": "Подписчики", + "socialTabFollowing": "Подписки", + "socialTagLocationHint": "Отметьте местоположение в следующей публикации", + "socialTimeDaysAgo": "{n}д. назад", + "socialTimeHoursAgo": "{n}ч. назад", + "socialTimeJustNow": "Только что", + "socialTimeMinutesAgo": "{n}мин. назад", + "socialTryDifferentFilter": "Попробуйте выбрать другой фильтр", + "socialTryDifferentSearch": "Попробуйте другой поисковый запрос", + "socialTypeDeleted": "{type} удалено", + "socialUnfollow": "Отписаться", + "socialUnknownUser": "Неизвестный пользователь", + "socialUnsubscribed": "Подписка отменена", + "socialUnsuspend": "Снять блокировку", + "socialUnsuspendConfirm": "Вы уверены, что хотите снять блокировку с {displayName}?", + "socialUnsuspendUser": "Снять блокировку с пользователя", + "socialUserBannedAndDeleted": "Пользователь заблокирован, {type} удалено", + "socialUserBlocked": "Пользователь заблокирован", + "socialUserBlockedName": "{name} заблокирован", + "socialUserFallback": "Пользователь", + "socialUserUnsuspended": "Блокировка с пользователя снята", + "socialView": "Просмотр", + "socialViewLabel": "просмотр", + "socialViewLocation": "Посмотреть местоположение", + "socialViewOnMap": "Открыть на карте", + "socialViewersTitle": "Зрители", + "socialViewsLabel": "просмотров", + "socialViolationsDetected": "Обнаружены нарушения", + "socialVisibilityFollowers": "Подписчики", + "socialVisibilityFollowersDesc": "Это видят только ваши подписчики", + "socialVisibilityOnlyMe": "Только я", + "socialVisibilityOnlyMeDesc": "Эту публикацию видите только вы", + "socialVisibilityPublic": "Публично", + "socialVisibilityPublicDesc": "Эту публикацию может видеть любой", + "socialVisibilityWhoCanSee": "Кто может видеть это?", + "socialWarningsOnAccount": "{count} активное(ых) предупреждение(й) на вашем аккаунте", + "socialWarningsTapReview": "У вас {count} предупреждение(й) — нажмите для просмотра", + "socialYourStory": "Ваша история", + "takAffiliationAssumedFriend": "Предположительно союзник", + "takAffiliationFriendly": "Дружественный", + "takAffiliationHostile": "Враждебный", + "takAffiliationNeutral": "Нейтральный", + "takAffiliationPending": "Ожидает определения", + "takAffiliationSuspect": "Подозрительный", + "takAffiliationUnknown": "Неизвестный", + "takCompassE": "В", + "takCompassN": "С", + "takCompassNE": "СВ", + "takCompassNW": "СЗ", + "takCompassS": "Ю", + "takCompassSE": "ЮВ", + "takCompassSW": "ЮЗ", + "takCompassW": "З", "takCotTypeAtom": "Atom", "takCotTypeBits": "Bits", - "takCotTypeFriendly": "Friendly", - "takCotTypeHostile": "Hostile", - "takCotTypeNeutral": "Neutral", - "takCotTypeTasking": "Tasking", - "takCotTypeUnknown": "Unknown", - "takDashboardConnected": "Connected", - "takDashboardConnection": "Connection", - "takDashboardDisconnected": "Disconnected", - "takDashboardForceDisposition": "Entity Summary", - "takDashboardFriendly": "Friendly", - "takDashboardHostile": "Hostile", - "takDashboardLastEvent": "Last event", - "takDashboardLastEventNone": "None", - "takDashboardNearestHostile": "Nearest hostile: {callsign}", - "takDashboardNearestUnknown": "Nearest unknown: {callsign}", - "takDashboardNeutral": "Neutral", - "takDashboardNoHostileContacts": "No hostile contacts", - "takDashboardNoUnknownContacts": "No unknown contacts", - "takDashboardPositionPublishing": "Position publishing", - "takDashboardPublishingActive": "Active ({intervalSeconds}s)", - "takDashboardPublishingDisabled": "Disabled", - "takDashboardRelativeTimeDays": "{count}d ago", - "takDashboardRelativeTimeHours": "{count}h ago", - "takDashboardRelativeTimeMinutes": "{count}m ago", - "takDashboardRelativeTimeSeconds": "{count}s ago", - "takDashboardStaleEntities": "Stale entities", - "takDashboardStatusHeader": "Status", - "takDashboardThreatProximity": "Entity Proximity", - "takDashboardTitle": "TAK Dashboard", - "takDashboardTotalEntities": "Total entities", - "takDashboardTracked": "Tracked", - "takDashboardUnknown": "Unknown", - "takDistanceKilometers": "{km} km", - "takDistanceMeters": "{meters} m", - "takEventAltitudeFormat": "{meters} m ({feet} ft)", + "takCotTypeFriendly": "Дружественный", + "takCotTypeHostile": "Враждебный", + "takCotTypeNeutral": "Нейтральный", + "takCotTypeTasking": "Задание", + "takCotTypeUnknown": "Неизвестный", + "takDashboardConnected": "Подключено", + "takDashboardConnection": "Соединение", + "takDashboardDisconnected": "Отключено", + "takDashboardForceDisposition": "Сводка объектов", + "takDashboardFriendly": "Дружественные", + "takDashboardHostile": "Враждебные", + "takDashboardLastEvent": "Последнее событие", + "takDashboardLastEventNone": "Нет", + "takDashboardNearestHostile": "Ближайший враждебный: {callsign}", + "takDashboardNearestUnknown": "Ближайший неизвестный: {callsign}", + "takDashboardNeutral": "Нейтральные", + "takDashboardNoHostileContacts": "Враждебных контактов нет", + "takDashboardNoUnknownContacts": "Неизвестных контактов нет", + "takDashboardPositionPublishing": "Публикация позиции", + "takDashboardPublishingActive": "Активно ({intervalSeconds}с)", + "takDashboardPublishingDisabled": "Отключено", + "takDashboardRelativeTimeDays": "{count}д назад", + "takDashboardRelativeTimeHours": "{count}ч назад", + "takDashboardRelativeTimeMinutes": "{count}м назад", + "takDashboardRelativeTimeSeconds": "{count}с назад", + "takDashboardStaleEntities": "Устаревшие объекты", + "takDashboardStatusHeader": "Статус", + "takDashboardThreatProximity": "Близость объектов", + "takDashboardTitle": "TAK Панель управления", + "takDashboardTotalEntities": "Всего объектов", + "takDashboardTracked": "Отслеживаемые", + "takDashboardUnknown": "Неизвестные", + "takDistanceKilometers": "{km} км", + "takDistanceMeters": "{meters} м", + "takEventAltitudeFormat": "{meters} м ({feet} фут.)", "takEventCourseFormat": "{degrees}° ({compassDirection})", - "takEventDetailHelpAffiliation": "Affiliation", - "takEventDetailHelpCotType": "CoT Type String", - "takEventDetailHelpIdentity": "Identity", - "takEventDetailHelpMotion": "Motion Data", - "takEventDetailHelpPosition": "Position", - "takEventDetailHelpRawPayload": "Raw Payload", - "takEventDetailHelpTimestamps": "Timestamps", - "takEventDetailHelpTracking": "Tracking", - "takEventDetailJsonCopied": "Event JSON copied", - "takEventDetailLabelAltitude": "Altitude", + "takEventDetailHelpAffiliation": "Принадлежность", + "takEventDetailHelpCotType": "Строка типа CoT", + "takEventDetailHelpIdentity": "Идентификация", + "takEventDetailHelpMotion": "Данные движения", + "takEventDetailHelpPosition": "Позиция", + "takEventDetailHelpRawPayload": "Необработанные данные", + "takEventDetailHelpTimestamps": "Временные метки", + "takEventDetailHelpTracking": "Отслеживание", + "takEventDetailJsonCopied": "JSON события скопирован", + "takEventDetailLabelAltitude": "Высота", "takEventDetailLabelCallsign": "Callsign", - "takEventDetailLabelCourse": "Course", - "takEventDetailLabelDescription": "Description", - "takEventDetailLabelEventTime": "Event Time", - "takEventDetailLabelLatitude": "Latitude", - "takEventDetailLabelLongitude": "Longitude", - "takEventDetailLabelReceived": "Received", - "takEventDetailLabelSpeed": "Speed", - "takEventDetailLabelStaleTime": "Stale Time", - "takEventDetailLabelStatus": "Status", - "takEventDetailLabelType": "Type", + "takEventDetailLabelCourse": "Курс", + "takEventDetailLabelDescription": "Описание", + "takEventDetailLabelEventTime": "Время события", + "takEventDetailLabelLatitude": "Широта", + "takEventDetailLabelLongitude": "Долгота", + "takEventDetailLabelReceived": "Получено", + "takEventDetailLabelSpeed": "Скорость", + "takEventDetailLabelStaleTime": "Время устаревания", + "takEventDetailLabelStatus": "Статус", + "takEventDetailLabelType": "Тип", "takEventDetailLabelUid": "UID", - "takEventDetailNavigateTo": "Navigate to", - "takEventDetailNoMovement": "No movement recorded", - "takEventDetailPositionCount": "({count} positions)", - "takEventDetailSectionIdentity": "Identity", - "takEventDetailSectionMotion": "Motion", - "takEventDetailSectionPosition": "Position", - "takEventDetailSectionPositionHistory": "POSITION HISTORY", - "takEventDetailSectionRawPayload": "Raw Payload", - "takEventDetailSectionTimestamps": "Timestamps", - "takEventDetailShowAllPositions": "Show all {count} positions", - "takEventDetailShowLess": "Show less", - "takEventDetailStatusActive": "ACTIVE", - "takEventDetailStatusStale": "STALE", - "takEventDetailTooltipCopyJson": "Copy JSON", - "takEventDetailTooltipShowOnMap": "Show on Map", - "takEventDetailTooltipTrack": "Track", - "takEventDetailTooltipUntrack": "Untrack", - "takEventSpeedFormat": "{kmh} km/h ({knots} kn)", - "takEventSpeedStationary": "Stationary", - "takEventTileActive": "Active", - "takEventTileRelativeTimeHours": "{count}h ago", - "takEventTileRelativeTimeMinutes": "{count}m ago", - "takEventTileRelativeTimeSeconds": "{count}s ago", - "takEventTileStale": "Stale", - "takFilterBarClear": "Clear", - "takFilterBarSearchHint": "Search callsign or UID...", - "takFilterBarStaleModeActive": "Active", - "takFilterBarStaleModeAll": "All", - "takFilterBarStaleModeStale": "Stale", - "takNavigateEta": "ETA: {eta}", - "takNavigateLastUpdate": "Last update", - "takNavigateNoPosition": "Position unavailable\nConnect to a node with GPS", - "takNavigatePosition": "Position", - "takNavigateRelativeTimeDays": "{count}d ago", - "takNavigateRelativeTimeHours": "{count}h ago", - "takNavigateRelativeTimeMinutes": "{count}m ago", - "takNavigateRelativeTimeSeconds": "{count}s ago", - "takNavigateTitle": "Navigate to {callsign}", - "takScreenButtonConnect": "Connect", - "takScreenButtonSignIn": "Sign In to Connect", - "takScreenEmptyDisconnected": "Connect to the TAK Gateway to start streaming CoT entities.", - "takScreenEmptyListening": "Listening for CoT events from the TAK Gateway...", - "takScreenEmptySignIn": "Sign in and connect to start receiving live CoT entities.", - "takScreenEmptyTitle": "No TAK Entities", - "takScreenFilterAll": "All", - "takScreenHelpTitleDefault": "Info", - "takScreenHelpTitleFilters": "Filters", - "takScreenHelpTitleSettings": "Settings", - "takScreenHelpTitleStatus": "Connection Status", - "takScreenOverflowDashboard": "TAK Dashboard", - "takScreenOverflowSettings": "TAK Settings", - "takScreenSearchHint": "Search callsign or UID", - "takScreenStaleModeActiveOnly": "Active Only", - "takScreenStaleModeAll": "Status: All", - "takScreenStaleModeStaleOnly": "Stale Only", - "takScreenTitle": "TAK Gateway", - "takScreenTooltipConnect": "Connect", - "takScreenTooltipDisconnect": "Disconnect", - "takScreenTooltipSignInToConnect": "Sign in to connect", - "takSettingsAlertHostile": "Hostile", - "takSettingsAlertOn": "Alert on:", - "takSettingsAlertSuspect": "Suspect", - "takSettingsAlertUnknown": "Unknown", - "takSettingsAutoConnectSubtitle": "Automatically connect when TAK screens open", - "takSettingsAutoConnectTitle": "Auto-connect on open", - "takSettingsCallsignDefault": "Using node name", - "takSettingsCallsignEditorHint": "Leave empty to use your node name", - "takSettingsCallsignEditorPlaceholder": "e.g., HIKER-7", - "takSettingsCallsignEditorTitle": "Callsign Override", - "takSettingsCallsignTitle": "Callsign override", - "takSettingsError": "Error: {error}", - "takSettingsGatewayEditorHint": "Leave empty to use the default gateway", + "takEventDetailNavigateTo": "Навигация к", + "takEventDetailNoMovement": "Движение не зафиксировано", + "takEventDetailPositionCount": "({count} позиций)", + "takEventDetailSectionIdentity": "Идентификация", + "takEventDetailSectionMotion": "Движение", + "takEventDetailSectionPosition": "Позиция", + "takEventDetailSectionPositionHistory": "ИСТОРИЯ ПОЗИЦИЙ", + "takEventDetailSectionRawPayload": "Необработанные данные", + "takEventDetailSectionTimestamps": "Временные метки", + "takEventDetailShowAllPositions": "Показать все {count} позиций", + "takEventDetailShowLess": "Свернуть", + "takEventDetailStatusActive": "АКТИВЕН", + "takEventDetailStatusStale": "УСТАРЕЛ", + "takEventDetailTooltipCopyJson": "Копировать JSON", + "takEventDetailTooltipShowOnMap": "Показать на карте", + "takEventDetailTooltipTrack": "Отслеживать", + "takEventDetailTooltipUntrack": "Прекратить отслеживание", + "takEventSpeedFormat": "{kmh} км/ч ({knots} уз.)", + "takEventSpeedStationary": "Неподвижен", + "takEventTileActive": "Активен", + "takEventTileRelativeTimeHours": "{count}ч назад", + "takEventTileRelativeTimeMinutes": "{count}м назад", + "takEventTileRelativeTimeSeconds": "{count}с назад", + "takEventTileStale": "Устарел", + "takFilterBarClear": "Очистить", + "takFilterBarSearchHint": "Поиск по callsign или UID...", + "takFilterBarStaleModeActive": "Активные", + "takFilterBarStaleModeAll": "Все", + "takFilterBarStaleModeStale": "Устаревшие", + "takNavigateEta": "ОВП: {eta}", + "takNavigateLastUpdate": "Последнее обновление", + "takNavigateNoPosition": "Позиция недоступна\nПодключитесь к узлу с GPS", + "takNavigatePosition": "Позиция", + "takNavigateRelativeTimeDays": "{count}д назад", + "takNavigateRelativeTimeHours": "{count}ч назад", + "takNavigateRelativeTimeMinutes": "{count}м назад", + "takNavigateRelativeTimeSeconds": "{count}с назад", + "takNavigateTitle": "Навигация к {callsign}", + "takScreenButtonConnect": "Подключить", + "takScreenButtonSignIn": "Войдите для подключения", + "takScreenEmptyDisconnected": "Подключитесь к TAK Шлюзу, чтобы начать получать CoT объекты.", + "takScreenEmptyListening": "Ожидание CoT событий от TAK Шлюза...", + "takScreenEmptySignIn": "Войдите и подключитесь, чтобы начать получать CoT объекты в реальном времени.", + "takScreenEmptyTitle": "Нет TAK объектов", + "takScreenFilterAll": "Все", + "takScreenHelpTitleDefault": "Информация", + "takScreenHelpTitleFilters": "Фильтры", + "takScreenHelpTitleSettings": "Настройки", + "takScreenHelpTitleStatus": "Статус соединения", + "takScreenOverflowDashboard": "TAK Панель управления", + "takScreenOverflowSettings": "TAK Настройки", + "takScreenSearchHint": "Поиск по callsign или UID", + "takScreenStaleModeActiveOnly": "Только активные", + "takScreenStaleModeAll": "Статус: все", + "takScreenStaleModeStaleOnly": "Только устаревшие", + "takScreenTitle": "TAK Шлюз", + "takScreenTooltipConnect": "Подключить", + "takScreenTooltipDisconnect": "Отключить", + "takScreenTooltipSignInToConnect": "Войдите для подключения", + "takSettingsAlertHostile": "Враждебный", + "takSettingsAlertOn": "Оповещать при:", + "takSettingsAlertSuspect": "Подозрительный", + "takSettingsAlertUnknown": "Неизвестный", + "takSettingsAutoConnectSubtitle": "Автоматически подключаться при открытии TAK экранов", + "takSettingsAutoConnectTitle": "Автоподключение при открытии", + "takSettingsCallsignDefault": "Используется имя узла", + "takSettingsCallsignEditorHint": "Оставьте пустым, чтобы использовать имя вашего узла", + "takSettingsCallsignEditorPlaceholder": "например, HIKER-7", + "takSettingsCallsignEditorTitle": "Переопределение callsign", + "takSettingsCallsignTitle": "Переопределение callsign", + "takSettingsError": "Ошибка: {error}", + "takSettingsGatewayEditorHint": "Оставьте пустым для использования шлюза по умолчанию", "takSettingsGatewayEditorPlaceholder": "https://tak.socialmesh.app", - "takSettingsGatewayEditorTitle": "Gateway URL", - "takSettingsGatewayUrlDefault": "Default (tak.socialmesh.app)", - "takSettingsGatewayUrlTitle": "Gateway URL", - "takSettingsIntervalSubtitle": "How often to send your position", - "takSettingsIntervalTitle": "Publish interval", - "takSettingsMapLayerSubtitle": "Display TAK entity markers on the dedicated map", - "takSettingsMapLayerTitle": "Show TAK layer on map", - "takSettingsProximitySubtitle": "Notify when unrecognized entities enter radius", - "takSettingsProximityTitle": "Enable proximity alerts", - "takSettingsPublishSubtitle": "Share your node position with ATAK/WinTAK operators", - "takSettingsPublishTitle": "Publish my position", - "takSettingsRadiusSubtitle": "{km} km", - "takSettingsRadiusTitle": "Alert radius", - "takSettingsSave": "Save", - "takSettingsSectionConnection": "CONNECTION", - "takSettingsSectionMap": "MAP", - "takSettingsSectionProximity": "PROXIMITY ALERTS", - "takSettingsSectionPublishing": "POSITION PUBLISHING", - "takSettingsTitle": "TAK Settings", - "takStatusCardConnected": "Connected", - "takStatusCardConnecting": "Connecting...", - "takStatusCardCounterEntities": "Entities", - "takStatusCardCounterEvents": "Events", - "takStatusCardCounterUptime": "Uptime", - "takStatusCardDisconnected": "Disconnected", - "takStatusCardLabel": "TAK Gateway", - "takStatusCardReconnecting": "Reconnecting...", - "takStatusCardUptimeHoursMinutes": "{hours}h {minutes}m", - "takStatusCardUptimeMinutes": "{minutes}m", - "takStatusCardUptimeSeconds": "{seconds}s", - "tapbackReact": "React", - "taskErrorCompleteTaskDenied": "completeTask denied for role {roleName}", - "taskErrorCompletionNoteRequired": "Completion requires a note with at least 10 characters", - "taskErrorCreateDenied": "createTask denied for role {roleName}", - "taskErrorFailureReasonRequired": "Failure requires a reason with at least 10 characters", - "taskErrorInvalidTransition": "{fromState} -> {toState} is not a valid transition", - "taskErrorOnlyAssigneeCanAcknowledge": "Only the assignee can acknowledge a task", - "taskErrorOnlyAssigneeCanReportFailure": "Only the assignee can report task failure", - "taskErrorOnlyAssigneeCanStartWork": "Only the assignee can start work on a task", - "taskErrorReassignmentRequiresAssignee": "Reassignment requires a newAssigneeId", - "taskErrorRequiresSupervisorOrAdmin": "{action} requires supervisor or admin role, current role: {roleName}", - "taskErrorTerminalState": "Cannot transition from {stateName}: terminal state: {stateName}", - "taskPriorityImmediate": "immediate", - "taskPriorityPriority": "priority", - "taskPriorityRoutine": "routine", - "taskStateAcknowledged": "acknowledged", - "taskStateAssigned": "assigned", - "taskStateCancelled": "cancelled", - "taskStateCompleted": "completed", - "taskStateCreated": "created", - "taskStateFailed": "failed", - "taskStateInProgress": "inProgress", - "taskStateReassigned": "reassigned", - "telemetryAirQualityNoData": "No air quality data recorded yet", + "takSettingsGatewayEditorTitle": "URL шлюза", + "takSettingsGatewayUrlDefault": "По умолчанию (tak.socialmesh.app)", + "takSettingsGatewayUrlTitle": "URL шлюза", + "takSettingsIntervalSubtitle": "Как часто отправлять вашу позицию", + "takSettingsIntervalTitle": "Интервал публикации", + "takSettingsMapLayerSubtitle": "Отображать маркеры TAK объектов на специальной карте", + "takSettingsMapLayerTitle": "Показывать TAK слой на карте", + "takSettingsProximitySubtitle": "Уведомлять, когда неопознанные объекты входят в радиус", + "takSettingsProximityTitle": "Включить оповещения о близости", + "takSettingsPublishSubtitle": "Публиковать позицию вашего узла для операторов ATAK/WinTAK", + "takSettingsPublishTitle": "Публиковать мою позицию", + "takSettingsRadiusSubtitle": "{km} км", + "takSettingsRadiusTitle": "Радиус оповещения", + "takSettingsSave": "Сохранить", + "takSettingsSectionConnection": "СОЕДИНЕНИЕ", + "takSettingsSectionMap": "КАРТА", + "takSettingsSectionProximity": "ОПОВЕЩЕНИЯ О БЛИЗОСТИ", + "takSettingsSectionPublishing": "ПУБЛИКАЦИЯ ПОЗИЦИИ", + "takSettingsTitle": "TAK Настройки", + "takStatusCardConnected": "Подключено", + "takStatusCardConnecting": "Подключение...", + "takStatusCardCounterEntities": "Объекты", + "takStatusCardCounterEvents": "События", + "takStatusCardCounterUptime": "Время работы", + "takStatusCardDisconnected": "Отключено", + "takStatusCardLabel": "TAK Шлюз", + "takStatusCardReconnecting": "Переподключение...", + "takStatusCardUptimeHoursMinutes": "{hours}ч {minutes}м", + "takStatusCardUptimeMinutes": "{minutes}м", + "takStatusCardUptimeSeconds": "{seconds}с", + "tapbackReact": "Реакция", + "taskErrorCompleteTaskDenied": "completeTask запрещено для роли {roleName}", + "taskErrorCompletionNoteRequired": "Для завершения требуется заметка не менее 10 символов", + "taskErrorCreateDenied": "createTask запрещено для роли {roleName}", + "taskErrorFailureReasonRequired": "Для фиксации ошибки требуется причина не менее 10 символов", + "taskErrorInvalidTransition": "{fromState} -> {toState} — недопустимый переход", + "taskErrorOnlyAssigneeCanAcknowledge": "Только назначенный исполнитель может подтвердить задачу", + "taskErrorOnlyAssigneeCanReportFailure": "Только назначенный исполнитель может сообщить об ошибке задачи", + "taskErrorOnlyAssigneeCanStartWork": "Только назначенный исполнитель может начать работу над задачей", + "taskErrorReassignmentRequiresAssignee": "Переназначение требует newAssigneeId", + "taskErrorRequiresSupervisorOrAdmin": "{action} требует роли супервизора или администратора, текущая роль: {roleName}", + "taskErrorTerminalState": "Невозможно перейти из {stateName}: конечное состояние: {stateName}", + "taskPriorityImmediate": "немедленно", + "taskPriorityPriority": "приоритетно", + "taskPriorityRoutine": "обычно", + "taskStateAcknowledged": "подтверждено", + "taskStateAssigned": "назначено", + "taskStateCancelled": "отменено", + "taskStateCompleted": "завершено", + "taskStateCreated": "создано", + "taskStateFailed": "ошибка", + "taskStateInProgress": "в процессе", + "taskStateReassigned": "переназначено", + "telemetryAirQualityNoData": "Данные о качестве воздуха ещё не записаны", "telemetryAirQualityParticle03um": ">0.3µm", "telemetryAirQualityParticle05um": ">0.5µm", "telemetryAirQualityParticle100um": ">10µm", "telemetryAirQualityParticle10um": ">1.0µm", "telemetryAirQualityParticle25um": ">2.5µm", "telemetryAirQualityParticle50um": ">5.0µm", - "telemetryAirQualityParticleCounts": "Particle Counts (per 0.1L)", + "telemetryAirQualityParticleCounts": "Количество частиц (на 0.1 л)", "telemetryAirQualityPm100Label": "PM10", "telemetryAirQualityPm10Label": "PM1.0", "telemetryAirQualityPm25Label": "PM2.5", - "telemetryAirQualityPmEnvironmental": "Particulate Matter (Environmental)", - "telemetryAirQualityPmStandard": "Particulate Matter (Standard)", - "telemetryAirQualityTitle": "Air Quality Log", + "telemetryAirQualityPmEnvironmental": "Взвешенные частицы (окружающая среда)", + "telemetryAirQualityPmStandard": "Взвешенные частицы (стандарт)", + "telemetryAirQualityTitle": "Журнал качества воздуха", "telemetryAirQualityUnitMicrogram": "µg/m³", - "telemetryAllNodes": "All Nodes", - "telemetryAqiGood": "Good", - "telemetryAqiHazardous": "Hazardous", - "telemetryAqiModerate": "Moderate", - "telemetryAqiUnhealthy": "Unhealthy", - "telemetryAqiUnhealthySensitive": "Unhealthy (S)", - "telemetryClearAllFilters": "Clear all filters", - "telemetryClearData": "Clear Data", - "telemetryClearDateFilterTooltip": "Clear date filter", - "telemetryCo2Excellent": "Excellent", - "telemetryCo2Fair": "Fair", - "telemetryCo2Good": "Good", - "telemetryCo2Label": "CO₂ - {rating}", - "telemetryCo2Poor": "Poor", - "telemetryConfigAirQualityDesc": "PM1.0, PM2.5, PM10, particle counts, CO2", - "telemetryConfigAirtimeWarning": "Telemetry data is shared with all nodes on the mesh network. Shorter intervals increase airtime usage.", - "telemetryConfigDeviceMetricsDesc": "Battery level, voltage, channel utilization, air util TX", - "telemetryConfigDisplayFahrenheit": "Display Fahrenheit", - "telemetryConfigDisplayFahrenheitSubtitle": "Show temperature in Fahrenheit instead of Celsius", - "telemetryConfigDisplayOnScreen": "Display on Screen", - "telemetryConfigDisplayOnScreenSubtitle": "Show environment data on device screen", - "telemetryConfigEnabled": "Enabled", - "telemetryConfigEnvironmentMetricsDesc": "Temperature, humidity, barometric pressure, gas resistance", - "telemetryConfigMinutes": " minutes", - "telemetryConfigPowerMetricsDesc": "Voltage and current for channels 1-3", - "telemetryConfigSave": "Save", - "telemetryConfigSaveError": "Failed to save: {error}", - "telemetryConfigSaved": "Telemetry config saved", - "telemetryConfigSectionAirQuality": "Air Quality", - "telemetryConfigSectionDeviceMetrics": "Device Metrics", - "telemetryConfigSectionEnvironmentMetrics": "Environment Metrics", - "telemetryConfigSectionPowerMetrics": "Power Metrics", - "telemetryConfigTitle": "Telemetry", - "telemetryConfigUpdateInterval": "Update Interval", - "telemetryDateRangeTooltip": "Date range", - "telemetryDetectionClearBadge": "Clear", - "telemetryDetectionDescription": "Detection sensors report motion and presence", - "telemetryDetectionDetected": "DETECTED", - "telemetryDetectionNoData": "No sensor events recorded yet", - "telemetryDetectionSensor": "Detection Sensor", - "telemetryDetectionTitle": "Detection Sensor Log", - "telemetryDeviceCharging": "Charging", - "telemetryDeviceFilterAirUtil": "Air Util", - "telemetryDeviceFilterBattery": "Battery", - "telemetryDeviceFilterChannel": "Channel", - "telemetryDeviceFilterUptime": "Uptime", - "telemetryDeviceFilterVoltage": "Voltage", - "telemetryDeviceLegendAirUtil": "Air Util", - "telemetryDeviceLegendBattery": "Battery", - "telemetryDeviceLegendChUtil": "Ch Util", - "telemetryDeviceLegendVoltage": "Voltage", - "telemetryDeviceMetricsAirUtil": "Air {percent}%", - "telemetryDeviceMetricsChannelUtil": "Ch {percent}%", - "telemetryDeviceMetricsTitle": "Device Metrics", + "telemetryAllNodes": "Все узлы", + "telemetryAqiGood": "Хорошее", + "telemetryAqiHazardous": "Опасное", + "telemetryAqiModerate": "Умеренное", + "telemetryAqiUnhealthy": "Вредное", + "telemetryAqiUnhealthySensitive": "Вредное (Ч)", + "telemetryClearAllFilters": "Сбросить все фильтры", + "telemetryClearData": "Очистить данные", + "telemetryClearDateFilterTooltip": "Сбросить фильтр по дате", + "telemetryCo2Excellent": "Отличное", + "telemetryCo2Fair": "Удовлетворительное", + "telemetryCo2Good": "Хорошее", + "telemetryCo2Label": "CO₂ — {rating}", + "telemetryCo2Poor": "Плохое", + "telemetryConfigAirQualityDesc": "PM1.0, PM2.5, PM10, количество частиц, CO2", + "telemetryConfigAirtimeWarning": "Данные телеметрии передаются всем узлам сети. Более короткие интервалы увеличивают использование эфирного времени.", + "telemetryConfigDeviceMetricsDesc": "Уровень заряда аккумулятора, напряжение, загруженность канала, TX эфирного времени", + "telemetryConfigDisplayFahrenheit": "Отображать в Фаренгейтах", + "telemetryConfigDisplayFahrenheitSubtitle": "Показывать температуру в градусах Фаренгейта вместо Цельсия", + "telemetryConfigDisplayOnScreen": "Отображать на экране", + "telemetryConfigDisplayOnScreenSubtitle": "Показывать данные об окружающей среде на экране устройства", + "telemetryConfigEnabled": "Включено", + "telemetryConfigEnvironmentMetricsDesc": "Температура, влажность, атмосферное давление, сопротивление газа", + "telemetryConfigMinutes": " минут", + "telemetryConfigPowerMetricsDesc": "Напряжение и ток для каналов 1–3", + "telemetryConfigSave": "Сохранить", + "telemetryConfigSaveError": "Не удалось сохранить: {error}", + "telemetryConfigSaved": "Конфигурация телеметрии сохранена", + "telemetryConfigSectionAirQuality": "Качество воздуха", + "telemetryConfigSectionDeviceMetrics": "Метрики устройства", + "telemetryConfigSectionEnvironmentMetrics": "Метрики окружающей среды", + "telemetryConfigSectionPowerMetrics": "Метрики питания", + "telemetryConfigTitle": "Телеметрия", + "telemetryConfigUpdateInterval": "Интервал обновления", + "telemetryDateRangeTooltip": "Диапазон дат", + "telemetryDetectionClearBadge": "Очистить", + "telemetryDetectionDescription": "Датчики обнаружения фиксируют движение и присутствие", + "telemetryDetectionDetected": "ОБНАРУЖЕНО", + "telemetryDetectionNoData": "События датчика ещё не записаны", + "telemetryDetectionSensor": "Датчик обнаружения", + "telemetryDetectionTitle": "Журнал датчика обнаружения", + "telemetryDeviceCharging": "Зарядка", + "telemetryDeviceFilterAirUtil": "Эфирное время", + "telemetryDeviceFilterBattery": "Аккумулятор", + "telemetryDeviceFilterChannel": "Канал", + "telemetryDeviceFilterUptime": "Время работы", + "telemetryDeviceFilterVoltage": "Напряжение", + "telemetryDeviceLegendAirUtil": "Эфирное время", + "telemetryDeviceLegendBattery": "Аккумулятор", + "telemetryDeviceLegendChUtil": "Загр. кан.", + "telemetryDeviceLegendVoltage": "Напряжение", + "telemetryDeviceMetricsAirUtil": "Эфир {percent}%", + "telemetryDeviceMetricsChannelUtil": "Кан. {percent}%", + "telemetryDeviceMetricsTitle": "Метрики устройства", "telemetryDeviceMetricsVoltageValue": "{voltage}V", - "telemetryDeviceNoMetrics": "No device metrics yet", - "telemetryEndDate": "End Date", + "telemetryDeviceNoMetrics": "Метрики устройства ещё отсутствуют", + "telemetryEndDate": "Дата окончания", "telemetryEnvGasResistanceValue": "{value} Ω", "telemetryEnvHumidityValue": "{value}%", "telemetryEnvIaqValue": "IAQ {value}", @@ -5166,3513 +5166,3513 @@ "telemetryEnvPressureValue": "{value} hPa", "telemetryEnvTemperatureValue": "{value}°C", "telemetryEnvWindSpeedValue": "{value} m/s", - "telemetryEnvironmentFilterGas": "Gas", - "telemetryEnvironmentFilterHumidity": "Humidity", + "telemetryEnvironmentFilterGas": "Газ", + "telemetryEnvironmentFilterHumidity": "Влажность", "telemetryEnvironmentFilterIaq": "IAQ", - "telemetryEnvironmentFilterLight": "Light", - "telemetryEnvironmentFilterPressure": "Pressure", - "telemetryEnvironmentFilterTemp": "Temp", - "telemetryEnvironmentFilterWind": "Wind", - "telemetryEnvironmentLegendHumidity": "Humidity", - "telemetryEnvironmentLegendTemperature": "Temperature", - "telemetryEnvironmentNoMetrics": "No environment metrics yet", - "telemetryEnvironmentTitle": "Environment Metrics", - "telemetryError": "Error: {error}", - "telemetryExportCsv": "Export CSV", - "telemetryExportFailed": "Export failed: {error}", - "telemetryExporting": "Exporting...", - "telemetryFailedToClear": "Failed to clear data: {error}", - "telemetryFilterAll": "All", - "telemetryHelp": "Help", - "telemetryMetricsWillAppear": "Metrics will appear when your device reports telemetry", - "telemetryNoMetricsMatchFilters": "No metrics match filters", + "telemetryEnvironmentFilterLight": "Освещённость", + "telemetryEnvironmentFilterPressure": "Давление", + "telemetryEnvironmentFilterTemp": "Темп.", + "telemetryEnvironmentFilterWind": "Ветер", + "telemetryEnvironmentLegendHumidity": "Влажность", + "telemetryEnvironmentLegendTemperature": "Температура", + "telemetryEnvironmentNoMetrics": "Метрики окружающей среды ещё отсутствуют", + "telemetryEnvironmentTitle": "Метрики окружающей среды", + "telemetryError": "Ошибка: {error}", + "telemetryExportCsv": "Экспорт CSV", + "telemetryExportFailed": "Экспорт не выполнен: {error}", + "telemetryExporting": "Экспорт...", + "telemetryFailedToClear": "Не удалось очистить данные: {error}", + "telemetryFilterAll": "Все", + "telemetryHelp": "Справка", + "telemetryMetricsWillAppear": "Метрики появятся, когда устройство передаст данные телеметрии", + "telemetryNoMetricsMatchFilters": "Нет метрик, соответствующих фильтрам", "telemetryPaxBluetooth": "Bluetooth", - "telemetryPaxDescription": "PAX counter detects nearby devices", - "telemetryPaxNoData": "No PAX data recorded yet", - "telemetryPaxTitle": "PAX Counter Log", - "telemetryPaxUptime": "Uptime: {uptime}", + "telemetryPaxDescription": "PAX-счётчик обнаруживает устройства поблизости", + "telemetryPaxNoData": "Данные PAX ещё не записаны", + "telemetryPaxTitle": "Журнал PAX-счётчика", + "telemetryPaxUptime": "Время работы: {uptime}", "telemetryPaxWifi": "WiFi", - "telemetryPositionAllNodesDescription": "Show positions from all nodes", - "telemetryPositionAllNodesOption": "All Nodes", - "telemetryPositionClearLabel": "Clear", - "telemetryPositionClearMessage": "This will permanently delete all position history for all nodes. This cannot be undone.", - "telemetryPositionClearTitle": "Clear Position Data", - "telemetryPositionCleared": "Position data cleared", - "telemetryPositionCount": "{count} position{count, plural, =1{} other{s}}", - "telemetryPositionDateRange": "Date range", - "telemetryPositionDrawerTitle": "Nodes", - "telemetryPositionExportSubject": "Socialmesh Position Export", - "telemetryPositionExportedCount": "Exported {count} positions", - "telemetryPositionFilterGoodFix": "Good Fix", - "telemetryPositionFilterMyNode": "My Node", - "telemetryPositionFilterThisWeek": "This Week", - "telemetryPositionFilterToday": "Today", - "telemetryPositionListView": "List view", - "telemetryPositionMapStyle": "Map Style", - "telemetryPositionMapView": "Map view", - "telemetryPositionNoDisplay": "No positions to display", - "telemetryPositionNoExportData": "No position data to export", - "telemetryPositionNoHistory": "No position history", - "telemetryPositionNoMatch": "No positions match filters", - "telemetryPositionNodesCount": "{count} nodes", - "telemetryPositionStatDistance": "Distance", - "telemetryPositionStatNodes": "Nodes", - "telemetryPositionStatPoints": "Points", - "telemetryPositionTitle": "Position", - "telemetryReadingsCount": "{count} readings", - "telemetrySearchByNode": "Search by node", - "telemetrySearchByNodeName": "Search by node name", - "telemetrySettings": "Settings", - "telemetryStartDate": "Start Date", - "telemetryTracerouteClearLabel": "Clear", - "telemetryTracerouteClearMessage": "This will permanently delete all traceroute history for {scope}. This cannot be undone.", - "telemetryTracerouteClearTitle": "Clear Traceroute Data", - "telemetryTracerouteCleared": "Traceroute data cleared", - "telemetryTracerouteDirectConnection": "Direct connection — no intermediate hops", - "telemetryTracerouteEmptyHint": "Send a traceroute from a node to see network paths", - "telemetryTracerouteExportSubject": "Socialmesh Traceroute Export ({scope})", - "telemetryTracerouteExportedCount": "Exported {count} traceroutes", - "telemetryTracerouteFilterNoResponse": "No Response", - "telemetryTracerouteFilterResponse": "Response", - "telemetryTracerouteForwardPath": "Forward Path", - "telemetryTracerouteHopsBack": "Hops ←", - "telemetryTracerouteHopsForward": "Hops →", - "telemetryTracerouteMoreActions": "More actions", - "telemetryTracerouteNoData": "No traceroutes recorded yet", - "telemetryTracerouteNoExportData": "No traceroute data to export", - "telemetryTracerouteNoMatch": "No traceroutes match filters", - "telemetryTracerouteNoResponseBadge": "No Response", - "telemetryTracerouteResponseBadge": "Response", - "telemetryTracerouteReturnPath": "Return Path", - "telemetryTracerouteTitle": "Traceroute History", - "telemetryTracerouteTo": "To", - "telemetryTryAdjustingFilters": "Try adjusting your search or filters", - "timelineActivityWillAppear": "Activity will appear here as it happens", - "timelineFilterAll": "All", - "timelineFilterMessages": "Messages", - "timelineFilterNodes": "Nodes", - "timelineFilterSignals": "Signals", - "timelineFilterWaypoints": "Waypoints", - "timelineFriday": "Friday", - "timelineLastHeard": "Last heard {timeAgo}", - "timelineMonday": "Monday", - "timelineNoEvents": "No events yet", - "timelineNoFilterResults": "No events match this filter", - "timelineNoSearchResults": "No events match your search", - "timelineNodeActive": "{name} is active", - "timelineNodeInactive": "{name} became inactive", + "telemetryPositionAllNodesDescription": "Показать местоположения всех узлов", + "telemetryPositionAllNodesOption": "Все узлы", + "telemetryPositionClearLabel": "Очистить", + "telemetryPositionClearMessage": "Это действие безвозвратно удалит всю историю местоположений для всех узлов. Отменить невозможно.", + "telemetryPositionClearTitle": "Очистить данные о местоположении", + "telemetryPositionCleared": "Данные о местоположении очищены", + "telemetryPositionCount": "{count, plural, =1{{count} местоположение} few{{count} местоположения} many{{count} местоположений} other{{count} местоположения}}", + "telemetryPositionDateRange": "Диапазон дат", + "telemetryPositionDrawerTitle": "Узлы", + "telemetryPositionExportSubject": "Экспорт местоположений Socialmesh", + "telemetryPositionExportedCount": "Экспортировано {count} местоположений", + "telemetryPositionFilterGoodFix": "Хороший сигнал", + "telemetryPositionFilterMyNode": "Мой узел", + "telemetryPositionFilterThisWeek": "На этой неделе", + "telemetryPositionFilterToday": "Сегодня", + "telemetryPositionListView": "Список", + "telemetryPositionMapStyle": "Стиль карты", + "telemetryPositionMapView": "Карта", + "telemetryPositionNoDisplay": "Нет местоположений для отображения", + "telemetryPositionNoExportData": "Нет данных о местоположении для экспорта", + "telemetryPositionNoHistory": "История местоположений отсутствует", + "telemetryPositionNoMatch": "Нет местоположений, соответствующих фильтрам", + "telemetryPositionNodesCount": "{count} узлов", + "telemetryPositionStatDistance": "Расстояние", + "telemetryPositionStatNodes": "Узлы", + "telemetryPositionStatPoints": "Точки", + "telemetryPositionTitle": "Местоположение", + "telemetryReadingsCount": "{count} показаний", + "telemetrySearchByNode": "Поиск по узлу", + "telemetrySearchByNodeName": "Поиск по имени узла", + "telemetrySettings": "Настройки", + "telemetryStartDate": "Дата начала", + "telemetryTracerouteClearLabel": "Очистить", + "telemetryTracerouteClearMessage": "Это действие безвозвратно удалит всю историю трассировки для {scope}. Отменить невозможно.", + "telemetryTracerouteClearTitle": "Очистить данные трассировки", + "telemetryTracerouteCleared": "Данные трассировки очищены", + "telemetryTracerouteDirectConnection": "Прямое соединение — промежуточные узлы отсутствуют", + "telemetryTracerouteEmptyHint": "Запустите трассировку с узла, чтобы увидеть сетевые пути", + "telemetryTracerouteExportSubject": "Экспорт трассировки Socialmesh ({scope})", + "telemetryTracerouteExportedCount": "Экспортировано {count} трассировок", + "telemetryTracerouteFilterNoResponse": "Нет ответа", + "telemetryTracerouteFilterResponse": "Ответ", + "telemetryTracerouteForwardPath": "Прямой путь", + "telemetryTracerouteHopsBack": "Хопов ←", + "telemetryTracerouteHopsForward": "Хопов →", + "telemetryTracerouteMoreActions": "Дополнительные действия", + "telemetryTracerouteNoData": "Трассировки ещё не записаны", + "telemetryTracerouteNoExportData": "Нет данных трассировки для экспорта", + "telemetryTracerouteNoMatch": "Нет трассировок, соответствующих фильтрам", + "telemetryTracerouteNoResponseBadge": "Нет ответа", + "telemetryTracerouteResponseBadge": "Ответ", + "telemetryTracerouteReturnPath": "Обратный путь", + "telemetryTracerouteTitle": "История трассировок", + "telemetryTracerouteTo": "Кому", + "telemetryTryAdjustingFilters": "Попробуйте изменить поисковый запрос или фильтры", + "timelineActivityWillAppear": "Активность будет отображаться здесь по мере возникновения", + "timelineFilterAll": "Все", + "timelineFilterMessages": "Сообщения", + "timelineFilterNodes": "Узлы", + "timelineFilterSignals": "Сигналы", + "timelineFilterWaypoints": "Точки маршрута", + "timelineFriday": "Пятница", + "timelineLastHeard": "Последний сигнал {timeAgo}", + "timelineMonday": "Понедельник", + "timelineNoEvents": "Событий пока нет", + "timelineNoFilterResults": "Нет событий, соответствующих фильтру", + "timelineNoSearchResults": "Нет событий, соответствующих поиску", + "timelineNodeActive": "{name} активен", + "timelineNodeInactive": "{name} стал неактивным", "timelineRssiValue": "RSSI: {value} dBm", - "timelineSaturday": "Saturday", - "timelineSearchHint": "Search events", - "timelineShowAllEvents": "Show all events", + "timelineSaturday": "Суббота", + "timelineSearchHint": "Поиск событий", + "timelineShowAllEvents": "Показать все события", "timelineSnrValue": "SNR: {value} dB", - "timelineSunday": "Sunday", - "timelineThursday": "Thursday", - "timelineTitle": "Timeline", - "timelineToday": "Today", - "timelineTryDifferent": "Try a different search or filter", - "timelineTuesday": "Tuesday", - "timelineWeakSignal": "Weak signal from {name}", - "timelineWednesday": "Wednesday", - "timelineYesterday": "Yesterday", - "widgetBuilderActionCopyToClipboard": "Copy to Clipboard", - "widgetBuilderActionEmergencySos": "Emergency SOS", - "widgetBuilderActionNavigateLabel": "Navigate", - "widgetBuilderActionNoAction": "No Action", - "widgetBuilderActionOpenUrl": "Open URL", - "widgetBuilderActionRequestPositions": "Request Positions", - "widgetBuilderActionRequestPositionsDesc": "Ask all nodes to report their position", - "widgetBuilderActionRequestPositionsLabel": "Request Positions", - "widgetBuilderActionSendMessage": "Send Message", - "widgetBuilderActionSendMessageDesc": "Open message composer to send a message", - "widgetBuilderActionSendMessageLabel": "Send Message", - "widgetBuilderActionShareLocation": "Share Location", - "widgetBuilderActionShareLocationDesc": "Share your current GPS position", - "widgetBuilderActionShareLocationLabel": "Share Location", - "widgetBuilderActionSosAlert": "SOS Alert", - "widgetBuilderActionSosAlertDesc": "Send emergency alert to all nodes", + "timelineSunday": "Воскресенье", + "timelineThursday": "Четверг", + "timelineTitle": "Хронология", + "timelineToday": "Сегодня", + "timelineTryDifferent": "Попробуйте другой поисковый запрос или фильтр", + "timelineTuesday": "Вторник", + "timelineWeakSignal": "Слабый сигнал от {name}", + "timelineWednesday": "Среда", + "timelineYesterday": "Вчера", + "widgetBuilderActionCopyToClipboard": "Копировать в буфер обмена", + "widgetBuilderActionEmergencySos": "Экстренный SOS", + "widgetBuilderActionNavigateLabel": "Навигация", + "widgetBuilderActionNoAction": "Без действия", + "widgetBuilderActionOpenUrl": "Открыть URL", + "widgetBuilderActionRequestPositions": "Запросить позиции", + "widgetBuilderActionRequestPositionsDesc": "Запросить у всех узлов передать своё местоположение", + "widgetBuilderActionRequestPositionsLabel": "Запросить позиции", + "widgetBuilderActionSendMessage": "Отправить сообщение", + "widgetBuilderActionSendMessageDesc": "Открыть редактор для отправки сообщения", + "widgetBuilderActionSendMessageLabel": "Отправить сообщение", + "widgetBuilderActionShareLocation": "Поделиться местоположением", + "widgetBuilderActionShareLocationDesc": "Передать текущие координаты GPS", + "widgetBuilderActionShareLocationLabel": "Поделиться местоположением", + "widgetBuilderActionSosAlert": "SOS-оповещение", + "widgetBuilderActionSosAlertDesc": "Отправить экстренное оповещение всем узлам", "widgetBuilderActionTraceroute": "Traceroute", - "widgetBuilderActionTracerouteDesc": "Trace the route to a node", + "widgetBuilderActionTracerouteDesc": "Проследить маршрут до узла", "widgetBuilderActionTracerouteLabel": "Traceroute", - "widgetBuilderAddAction": "Add Action", - "widgetBuilderAddBlock": "Add Block", - "widgetBuilderAddElement": "Add Element", - "widgetBuilderAddIcon": "Icon", - "widgetBuilderAddIconDesc": "Add a symbol or emoji", - "widgetBuilderAddItemCount": "Add item ({count} items)", - "widgetBuilderAddProgressBar": "Progress Bar", - "widgetBuilderAddProgressBarDesc": "Show a value visually", - "widgetBuilderAddReferenceLines": "Add reference lines at specific values", - "widgetBuilderAddSpace": "Space", - "widgetBuilderAddSpaceDesc": "Add empty space between items", - "widgetBuilderAddTapAction": "Add tap action...", - "widgetBuilderAddText": "Text", - "widgetBuilderAddTextDesc": "Add a label or value", - "widgetBuilderAddToDashboard": "Add to Dashboard", - "widgetBuilderAddedToDashboard": "{name} added to Dashboard", - "widgetBuilderAll": "All", - "widgetBuilderAllNodes": "All Nodes", - "widgetBuilderApprovedSuccess": "{name} approved", - "widgetBuilderBindingActiveMeshNodes": "Active Mesh Nodes", - "widgetBuilderBindingActiveMeshNodesDesc": "Nodes heard recently", - "widgetBuilderBindingActiveMeshNodesLegacy": "Active Mesh Nodes (legacy)", - "widgetBuilderBindingActiveMeshNodesLegacyDesc": "Alias for active node count (back-compat)", - "widgetBuilderBindingAirtimeTx": "Airtime TX", - "widgetBuilderBindingAirtimeTxDesc": "Transmission airtime utilization", - "widgetBuilderBindingAltitude": "Altitude", - "widgetBuilderBindingAltitudeDesc": "Altitude above sea level", - "widgetBuilderBindingBadPacketsRx": "Bad Packets RX", - "widgetBuilderBindingBadPacketsRxDesc": "Bad packets received", - "widgetBuilderBindingBatteryLevel": "Battery Level", - "widgetBuilderBindingBatteryLevelDesc": "Battery percentage (0-100)", - "widgetBuilderBindingBatteryVoltage": "Battery Voltage", - "widgetBuilderBindingBatteryVoltageDesc": "Battery voltage", - "widgetBuilderBindingCategoryAirQuality": "Air Quality", - "widgetBuilderBindingCategoryDevice": "Device", - "widgetBuilderBindingCategoryEnvironment": "Environment", + "widgetBuilderAddAction": "Добавить действие", + "widgetBuilderAddBlock": "Добавить блок", + "widgetBuilderAddElement": "Добавить элемент", + "widgetBuilderAddIcon": "Иконка", + "widgetBuilderAddIconDesc": "Добавить символ или эмодзи", + "widgetBuilderAddItemCount": "Добавить элемент ({count} эл.)", + "widgetBuilderAddProgressBar": "Индикатор прогресса", + "widgetBuilderAddProgressBarDesc": "Отобразить значение визуально", + "widgetBuilderAddReferenceLines": "Добавить опорные линии на заданных значениях", + "widgetBuilderAddSpace": "Пробел", + "widgetBuilderAddSpaceDesc": "Добавить пустое пространство между элементами", + "widgetBuilderAddTapAction": "Добавить действие по нажатию...", + "widgetBuilderAddText": "Текст", + "widgetBuilderAddTextDesc": "Добавить метку или значение", + "widgetBuilderAddToDashboard": "Добавить на панель", + "widgetBuilderAddedToDashboard": "{name} добавлен на панель", + "widgetBuilderAll": "Все", + "widgetBuilderAllNodes": "Все узлы", + "widgetBuilderApprovedSuccess": "{name} одобрен", + "widgetBuilderBindingActiveMeshNodes": "Активные узлы сети", + "widgetBuilderBindingActiveMeshNodesDesc": "Узлы, от которых недавно поступал сигнал", + "widgetBuilderBindingActiveMeshNodesLegacy": "Активные узлы сети (устаревшее)", + "widgetBuilderBindingActiveMeshNodesLegacyDesc": "Псевдоним счётчика активных узлов (для обратной совместимости)", + "widgetBuilderBindingAirtimeTx": "Эфирное время TX", + "widgetBuilderBindingAirtimeTxDesc": "Использование эфирного времени при передаче", + "widgetBuilderBindingAltitude": "Высота", + "widgetBuilderBindingAltitudeDesc": "Высота над уровнем моря", + "widgetBuilderBindingBadPacketsRx": "Повреждённые пакеты RX", + "widgetBuilderBindingBadPacketsRxDesc": "Количество полученных повреждённых пакетов", + "widgetBuilderBindingBatteryLevel": "Уровень заряда", + "widgetBuilderBindingBatteryLevelDesc": "Заряд батареи в процентах (0–100)", + "widgetBuilderBindingBatteryVoltage": "Напряжение батареи", + "widgetBuilderBindingBatteryVoltageDesc": "Напряжение батареи", + "widgetBuilderBindingCategoryAirQuality": "Качество воздуха", + "widgetBuilderBindingCategoryDevice": "Устройство", + "widgetBuilderBindingCategoryEnvironment": "Окружающая среда", "widgetBuilderBindingCategoryGps": "GPS", - "widgetBuilderBindingCategoryMessages": "Messages", - "widgetBuilderBindingCategoryNetwork": "Network", - "widgetBuilderBindingCategoryNodeInfo": "Node Info", - "widgetBuilderBindingCategoryPower": "Power", - "widgetBuilderBindingCh1Current": "Channel 1 Current", - "widgetBuilderBindingCh1CurrentDesc": "Power channel 1 current", - "widgetBuilderBindingCh1Voltage": "Channel 1 Voltage", - "widgetBuilderBindingCh1VoltageDesc": "Power channel 1 voltage", - "widgetBuilderBindingCh2Current": "Channel 2 Current", - "widgetBuilderBindingCh2CurrentDesc": "Power channel 2 current", - "widgetBuilderBindingCh2Voltage": "Channel 2 Voltage", - "widgetBuilderBindingCh2VoltageDesc": "Power channel 2 voltage", - "widgetBuilderBindingCh3Current": "Channel 3 Current", - "widgetBuilderBindingCh3CurrentDesc": "Power channel 3 current", - "widgetBuilderBindingCh3Voltage": "Channel 3 Voltage", - "widgetBuilderBindingCh3VoltageDesc": "Power channel 3 voltage", - "widgetBuilderBindingChannelUtil": "Channel Utilization", - "widgetBuilderBindingChannelUtilDesc": "Current channel utilization percentage", + "widgetBuilderBindingCategoryMessages": "Сообщения", + "widgetBuilderBindingCategoryNetwork": "Сеть", + "widgetBuilderBindingCategoryNodeInfo": "Информация об узле", + "widgetBuilderBindingCategoryPower": "Питание", + "widgetBuilderBindingCh1Current": "Ток канала 1", + "widgetBuilderBindingCh1CurrentDesc": "Ток силового канала 1", + "widgetBuilderBindingCh1Voltage": "Напряжение канала 1", + "widgetBuilderBindingCh1VoltageDesc": "Напряжение силового канала 1", + "widgetBuilderBindingCh2Current": "Ток канала 2", + "widgetBuilderBindingCh2CurrentDesc": "Ток силового канала 2", + "widgetBuilderBindingCh2Voltage": "Напряжение канала 2", + "widgetBuilderBindingCh2VoltageDesc": "Напряжение силового канала 2", + "widgetBuilderBindingCh3Current": "Ток канала 3", + "widgetBuilderBindingCh3CurrentDesc": "Ток силового канала 3", + "widgetBuilderBindingCh3Voltage": "Напряжение канала 3", + "widgetBuilderBindingCh3VoltageDesc": "Напряжение силового канала 3", + "widgetBuilderBindingChannelUtil": "Загрузка канала", + "widgetBuilderBindingChannelUtilDesc": "Текущий процент загрузки канала", "widgetBuilderBindingCo2": "CO2", - "widgetBuilderBindingCo2Desc": "CO2 concentration", - "widgetBuilderBindingDisplayName": "Display Name", - "widgetBuilderBindingDisplayNameDesc": "Node display name (long name or short name)", - "widgetBuilderBindingDistance": "Distance", - "widgetBuilderBindingDistanceDesc": "Distance to node in meters", - "widgetBuilderBindingFirmwareVersion": "Firmware Version", - "widgetBuilderBindingFirmwareVersionDesc": "Current firmware version", - "widgetBuilderBindingFirstHeard": "First Heard", - "widgetBuilderBindingFirstHeardDesc": "When the node was first discovered", - "widgetBuilderBindingGroundSpeed": "Ground Speed", - "widgetBuilderBindingGroundSpeedDesc": "Ground speed", - "widgetBuilderBindingHardwareModel": "Hardware Model", - "widgetBuilderBindingHardwareModelDesc": "Device hardware model", - "widgetBuilderBindingHeading": "Heading", - "widgetBuilderBindingHeadingDesc": "Ground track/heading in degrees", - "widgetBuilderBindingHopCount": "Hop Count", - "widgetBuilderBindingHopCountDesc": "Number of hops from this node (0 = direct neighbor)", - "widgetBuilderBindingHumidity": "Humidity", - "widgetBuilderBindingHumidityDesc": "Relative humidity percentage", - "widgetBuilderBindingIaqIndex": "IAQ Index", - "widgetBuilderBindingIaqIndexDesc": "Indoor air quality index", - "widgetBuilderBindingLastHeard": "Last Heard", - "widgetBuilderBindingLastHeardDesc": "When the node was last heard from", - "widgetBuilderBindingLatitude": "Latitude", - "widgetBuilderBindingLatitudeDesc": "GPS latitude coordinate", - "widgetBuilderBindingLightLevel": "Light Level", - "widgetBuilderBindingLightLevelDesc": "Ambient light level", - "widgetBuilderBindingLongitude": "Longitude", - "widgetBuilderBindingLongitudeDesc": "GPS longitude coordinate", - "widgetBuilderBindingNodeName": "Node Name", - "widgetBuilderBindingNodeNameDesc": "Full name of the node", - "widgetBuilderBindingNodeNumber": "Node Number", - "widgetBuilderBindingNodeNumberDesc": "Unique node number", - "widgetBuilderBindingNodeRole": "Node Role", - "widgetBuilderBindingNodeRoleDesc": "Role in the mesh (CLIENT, ROUTER, etc.)", - "widgetBuilderBindingNodeStatus": "Node Status", - "widgetBuilderBindingNodeStatusDesc": "Custom status message from the node", - "widgetBuilderBindingNodesHeard2h": "Nodes Heard (2h)", - "widgetBuilderBindingNodesHeard2hDesc": "Meshtastic metric: nodes heard in the last 2 hours", - "widgetBuilderBindingNoiseFloor": "Noise Floor", - "widgetBuilderBindingNoiseFloorDesc": "Measured noise floor in dBm", - "widgetBuilderBindingPacketsRx": "Packets RX", - "widgetBuilderBindingPacketsRxDesc": "Total packets received", - "widgetBuilderBindingPacketsTx": "Packets TX", - "widgetBuilderBindingPacketsTxDesc": "Total packets transmitted", - "widgetBuilderBindingPacketsTxDropped": "Packets TX Dropped", - "widgetBuilderBindingPacketsTxDroppedDesc": "Packets dropped due to full TX queue", + "widgetBuilderBindingCo2Desc": "Концентрация CO2", + "widgetBuilderBindingDisplayName": "Отображаемое имя", + "widgetBuilderBindingDisplayNameDesc": "Отображаемое имя узла (полное или короткое)", + "widgetBuilderBindingDistance": "Расстояние", + "widgetBuilderBindingDistanceDesc": "Расстояние до узла в метрах", + "widgetBuilderBindingFirmwareVersion": "Версия прошивки", + "widgetBuilderBindingFirmwareVersionDesc": "Текущая версия прошивки", + "widgetBuilderBindingFirstHeard": "Первый контакт", + "widgetBuilderBindingFirstHeardDesc": "Когда узел был обнаружен впервые", + "widgetBuilderBindingGroundSpeed": "Скорость", + "widgetBuilderBindingGroundSpeedDesc": "Скорость относительно земли", + "widgetBuilderBindingHardwareModel": "Модель оборудования", + "widgetBuilderBindingHardwareModelDesc": "Аппаратная модель устройства", + "widgetBuilderBindingHeading": "Курс", + "widgetBuilderBindingHeadingDesc": "Курс движения в градусах", + "widgetBuilderBindingHopCount": "Количество хопов", + "widgetBuilderBindingHopCountDesc": "Число хопов от данного узла (0 = прямой сосед)", + "widgetBuilderBindingHumidity": "Влажность", + "widgetBuilderBindingHumidityDesc": "Относительная влажность в процентах", + "widgetBuilderBindingIaqIndex": "Индекс IAQ", + "widgetBuilderBindingIaqIndexDesc": "Индекс качества воздуха в помещении", + "widgetBuilderBindingLastHeard": "Последний контакт", + "widgetBuilderBindingLastHeardDesc": "Когда от узла последний раз поступал сигнал", + "widgetBuilderBindingLatitude": "Широта", + "widgetBuilderBindingLatitudeDesc": "Координата широты GPS", + "widgetBuilderBindingLightLevel": "Освещённость", + "widgetBuilderBindingLightLevelDesc": "Уровень окружающего освещения", + "widgetBuilderBindingLongitude": "Долгота", + "widgetBuilderBindingLongitudeDesc": "Координата долготы GPS", + "widgetBuilderBindingNodeName": "Имя узла", + "widgetBuilderBindingNodeNameDesc": "Полное имя узла", + "widgetBuilderBindingNodeNumber": "Номер узла", + "widgetBuilderBindingNodeNumberDesc": "Уникальный номер узла", + "widgetBuilderBindingNodeRole": "Роль узла", + "widgetBuilderBindingNodeRoleDesc": "Роль в сети (CLIENT, ROUTER и др.)", + "widgetBuilderBindingNodeStatus": "Статус узла", + "widgetBuilderBindingNodeStatusDesc": "Пользовательский статус-сообщение от узла", + "widgetBuilderBindingNodesHeard2h": "Узлы в эфире (2 ч)", + "widgetBuilderBindingNodesHeard2hDesc": "Метрика Meshtastic: узлы, от которых поступал сигнал за последние 2 часа", + "widgetBuilderBindingNoiseFloor": "Шумовой порог", + "widgetBuilderBindingNoiseFloorDesc": "Измеренный уровень шума в dBm", + "widgetBuilderBindingPacketsRx": "Пакеты RX", + "widgetBuilderBindingPacketsRxDesc": "Всего получено пакетов", + "widgetBuilderBindingPacketsTx": "Пакеты TX", + "widgetBuilderBindingPacketsTxDesc": "Всего отправлено пакетов", + "widgetBuilderBindingPacketsTxDropped": "Пакеты TX отброшены", + "widgetBuilderBindingPacketsTxDroppedDesc": "Пакеты, отброшенные из-за переполнения очереди TX", "widgetBuilderBindingPm10Large": "PM10", - "widgetBuilderBindingPm10LargeDesc": "PM10 particulate matter", + "widgetBuilderBindingPm10LargeDesc": "Взвешенные частицы PM10", "widgetBuilderBindingPm10Small": "PM1.0", - "widgetBuilderBindingPm10SmallDesc": "PM1.0 particulate matter", + "widgetBuilderBindingPm10SmallDesc": "Взвешенные частицы PM1.0", "widgetBuilderBindingPm25": "PM2.5", - "widgetBuilderBindingPm25Desc": "PM2.5 particulate matter", - "widgetBuilderBindingPresenceConfidence": "Presence Confidence", - "widgetBuilderBindingPresenceConfidenceDesc": "Inferred presence: active, fading, stale, unknown", - "widgetBuilderBindingPressure": "Pressure", - "widgetBuilderBindingPressureDesc": "Barometric pressure", - "widgetBuilderBindingRainfall1h": "Rainfall (1h)", - "widgetBuilderBindingRainfall1hDesc": "Rainfall in last hour", - "widgetBuilderBindingRainfall24h": "Rainfall (24h)", - "widgetBuilderBindingRainfall24hDesc": "Rainfall in last 24 hours", - "widgetBuilderBindingRecentMessages": "Recent Messages", - "widgetBuilderBindingRecentMessagesDesc": "Number of recent messages", + "widgetBuilderBindingPm25Desc": "Взвешенные частицы PM2.5", + "widgetBuilderBindingPresenceConfidence": "Достоверность присутствия", + "widgetBuilderBindingPresenceConfidenceDesc": "Расчётное присутствие: активен, угасает, устарело, неизвестно", + "widgetBuilderBindingPressure": "Давление", + "widgetBuilderBindingPressureDesc": "Атмосферное давление", + "widgetBuilderBindingRainfall1h": "Осадки (1 ч)", + "widgetBuilderBindingRainfall1hDesc": "Количество осадков за последний час", + "widgetBuilderBindingRainfall24h": "Осадки (24 ч)", + "widgetBuilderBindingRainfall24hDesc": "Количество осадков за последние 24 часа", + "widgetBuilderBindingRecentMessages": "Последние сообщения", + "widgetBuilderBindingRecentMessagesDesc": "Количество последних сообщений", "widgetBuilderBindingRssi": "RSSI", - "widgetBuilderBindingRssiDesc": "Received signal strength indicator", - "widgetBuilderBindingSatellites": "Satellites", - "widgetBuilderBindingSatellitesDesc": "Number of GPS satellites in view", - "widgetBuilderBindingShortName": "Short Name", - "widgetBuilderBindingShortNameDesc": "Short 4-character node identifier", + "widgetBuilderBindingRssiDesc": "Уровень принимаемого сигнала", + "widgetBuilderBindingSatellites": "Спутники", + "widgetBuilderBindingSatellitesDesc": "Количество видимых спутников GPS", + "widgetBuilderBindingShortName": "Короткое имя", + "widgetBuilderBindingShortNameDesc": "Короткий 4-символьный идентификатор узла", "widgetBuilderBindingSnr": "SNR", - "widgetBuilderBindingSnrDesc": "Signal-to-noise ratio", - "widgetBuilderBindingSoilMoisture": "Soil Moisture", - "widgetBuilderBindingSoilMoistureDesc": "Soil moisture percentage", - "widgetBuilderBindingSoilTemperature": "Soil Temperature", - "widgetBuilderBindingSoilTemperatureDesc": "Soil temperature", - "widgetBuilderBindingTemperature": "Temperature", - "widgetBuilderBindingTemperatureDesc": "Ambient temperature", - "widgetBuilderBindingTotalMeshNodes": "Total Mesh Nodes", - "widgetBuilderBindingTotalMeshNodesDesc": "Total nodes in the mesh network", - "widgetBuilderBindingTotalNodes": "Total Nodes", - "widgetBuilderBindingTotalNodesDesc": "Total number of known nodes", - "widgetBuilderBindingUnreadMessages": "Unread Messages", - "widgetBuilderBindingUnreadMessagesDesc": "Number of unread messages", - "widgetBuilderBindingUptime": "Uptime", - "widgetBuilderBindingUptimeDesc": "Device uptime in seconds", - "widgetBuilderBindingViaMqtt": "Via MQTT", - "widgetBuilderBindingViaMqttDesc": "Whether this node was last heard via MQTT transport", - "widgetBuilderBindingWindDirection": "Wind Direction", - "widgetBuilderBindingWindDirectionDesc": "Wind direction in degrees", - "widgetBuilderBindingWindGust": "Wind Gust", - "widgetBuilderBindingWindGustDesc": "Wind gust speed", - "widgetBuilderBindingWindSpeed": "Wind Speed", - "widgetBuilderBindingWindSpeedDesc": "Current wind speed", - "widgetBuilderBlockActionButton": "Action Button", - "widgetBuilderBlockActionButtonDesc": "Tappable button with action", - "widgetBuilderBlockInfoBlock": "Info Block", - "widgetBuilderBlockInfoBlockDesc": "Icon + Label + Data Value", - "widgetBuilderBlockMetric": "Metric", - "widgetBuilderBlockMetricDesc": "Large value with label", - "widgetBuilderBlockNewRow": "New Row", - "widgetBuilderBlockNewRowDesc": "Add a row for more blocks", - "widgetBuilderBlockStatus": "Status", - "widgetBuilderBlockStatusDesc": "Status indicator with binding", - "widgetBuilderBoolNo": "No", - "widgetBuilderBoolYes": "Yes", - "widgetBuilderBroadcastSubtitle": "Broadcast to everyone on channel", - "widgetBuilderBrowseMarketplace": "Browse Marketplace", - "widgetBuilderByAuthor": "by {author}", - "widgetBuilderCancel": "Cancel", - "widgetBuilderCannotSaveMessage": "{message}\n\nGo back to Step 1 to change your template, or Step 3 to update your selections.", - "widgetBuilderCannotSaveTitle": "Cannot Save Widget", - "widgetBuilderCategoryCharts": "Charts", - "widgetBuilderCategoryDeviceStatus": "Device Status", - "widgetBuilderCategoryLocation": "Location", - "widgetBuilderCategoryMeshNetwork": "Mesh Network", - "widgetBuilderCategoryMetrics": "Metrics", - "widgetBuilderCategoryOther": "Other", - "widgetBuilderCategoryUtility": "Utility", - "widgetBuilderCategoryWeather": "Weather", - "widgetBuilderChooseAction": "Choose an action for this element", - "widgetBuilderChooseColor": "Choose Color", - "widgetBuilderColorSectionLabel": "COLOR", - "widgetBuilderChooseStyle": "Choose a style that fits your needs", - "widgetBuilderCreateFirstWidget": "Create Your First Widget", - "widgetBuilderCreateFirstWidgetDesc": "Use the wizard to build a custom widget with your preferred data and layout", - "widgetBuilderCreateWidgetTooltip": "Create Widget", - "widgetBuilderCustomDashboardWidgets": "Custom Dashboard Widgets", - "widgetBuilderCustomWidget": "Custom widget", - "widgetBuilderDeleteAction": "Delete", - "widgetBuilderDeleteButton": "Delete", - "widgetBuilderDeleteWidgetTitle": "Delete Widget?", - "widgetBuilderDiscard": "Discard", - "widgetBuilderDiscardChangesMessage": "You have unsaved changes. Are you sure you want to close without saving?", - "widgetBuilderDiscardChangesTitle": "Discard Changes?", - "widgetBuilderDiscoverCommunity": "Discover widgets created by the community", - "widgetBuilderDuplicate": "Duplicate", - "widgetBuilderEdit": "Edit", - "widgetBuilderElementNotFound": "Element not found", - "widgetBuilderEnablePhoneLocation": "Enable \"Provide phone location\" in Settings to share your position", - "widgetBuilderEnterThresholdValue": "Enter threshold value", - "widgetBuilderEnterWidgetName": "Enter widget name", - "widgetBuilderFailedToApprove": "Failed to approve: {error}", - "widgetBuilderFailedToImport": "Failed to import: {error}", - "widgetBuilderFailedToInstall": "Failed to install: {error}", - "widgetBuilderFailedToReject": "Failed to reject: {error}", - "widgetBuilderFailedToRequestPositions": "Failed to request positions: {error}", - "widgetBuilderFailedToSaveWidget": "Failed to save widget: {error}", - "widgetBuilderFailedToShareLocation": "Failed to share location: {error}", - "widgetBuilderFailedToSubmit": "Failed to submit: {error}", - "widgetBuilderHelp": "Help", - "widgetBuilderHeroDescription": "Build personalized widgets to display mesh data exactly how you want. Monitor battery, signal strength, location, and more at a glance.", - "widgetBuilderIconAdd": "Add", - "widgetBuilderIconAir": "Air", - "widgetBuilderIconAlert": "Alert", - "widgetBuilderIconAnalytics": "Analytics", + "widgetBuilderBindingSnrDesc": "Отношение сигнал/шум", + "widgetBuilderBindingSoilMoisture": "Влажность почвы", + "widgetBuilderBindingSoilMoistureDesc": "Влажность почвы в процентах", + "widgetBuilderBindingSoilTemperature": "Температура почвы", + "widgetBuilderBindingSoilTemperatureDesc": "Температура почвы", + "widgetBuilderBindingTemperature": "Температура", + "widgetBuilderBindingTemperatureDesc": "Температура окружающей среды", + "widgetBuilderBindingTotalMeshNodes": "Всего узлов сети", + "widgetBuilderBindingTotalMeshNodesDesc": "Общее количество узлов в сети", + "widgetBuilderBindingTotalNodes": "Всего узлов", + "widgetBuilderBindingTotalNodesDesc": "Общее количество известных узлов", + "widgetBuilderBindingUnreadMessages": "Непрочитанные сообщения", + "widgetBuilderBindingUnreadMessagesDesc": "Количество непрочитанных сообщений", + "widgetBuilderBindingUptime": "Время работы", + "widgetBuilderBindingUptimeDesc": "Время работы устройства в секундах", + "widgetBuilderBindingViaMqtt": "Через MQTT", + "widgetBuilderBindingViaMqttDesc": "Получен ли последний сигнал от узла через MQTT", + "widgetBuilderBindingWindDirection": "Направление ветра", + "widgetBuilderBindingWindDirectionDesc": "Направление ветра в градусах", + "widgetBuilderBindingWindGust": "Порыв ветра", + "widgetBuilderBindingWindGustDesc": "Скорость порыва ветра", + "widgetBuilderBindingWindSpeed": "Скорость ветра", + "widgetBuilderBindingWindSpeedDesc": "Текущая скорость ветра", + "widgetBuilderBlockActionButton": "Кнопка действия", + "widgetBuilderBlockActionButtonDesc": "Кнопка с назначенным действием", + "widgetBuilderBlockInfoBlock": "Информационный блок", + "widgetBuilderBlockInfoBlockDesc": "Иконка + Метка + Значение", + "widgetBuilderBlockMetric": "Метрика", + "widgetBuilderBlockMetricDesc": "Крупное значение с подписью", + "widgetBuilderBlockNewRow": "Новая строка", + "widgetBuilderBlockNewRowDesc": "Добавить строку для дополнительных блоков", + "widgetBuilderBlockStatus": "Статус", + "widgetBuilderBlockStatusDesc": "Индикатор статуса с привязкой данных", + "widgetBuilderBoolNo": "Нет", + "widgetBuilderBoolYes": "Да", + "widgetBuilderBroadcastSubtitle": "Трансляция всем в канале", + "widgetBuilderBrowseMarketplace": "Открыть маркетплейс", + "widgetBuilderByAuthor": "автор: {author}", + "widgetBuilderCancel": "Отмена", + "widgetBuilderCannotSaveMessage": "{message}\n\nВернитесь к шагу 1, чтобы изменить шаблон, или к шагу 3, чтобы обновить выбор.", + "widgetBuilderCannotSaveTitle": "Невозможно сохранить виджет", + "widgetBuilderCategoryCharts": "Графики", + "widgetBuilderCategoryDeviceStatus": "Статус устройства", + "widgetBuilderCategoryLocation": "Местоположение", + "widgetBuilderCategoryMeshNetwork": "Mesh-сеть", + "widgetBuilderCategoryMetrics": "Метрики", + "widgetBuilderCategoryOther": "Прочее", + "widgetBuilderCategoryUtility": "Утилиты", + "widgetBuilderCategoryWeather": "Погода", + "widgetBuilderChooseAction": "Выберите действие для этого элемента", + "widgetBuilderChooseColor": "Выбрать цвет", + "widgetBuilderColorSectionLabel": "ЦВЕТ", + "widgetBuilderChooseStyle": "Выберите подходящий стиль", + "widgetBuilderCreateFirstWidget": "Создайте первый виджет", + "widgetBuilderCreateFirstWidgetDesc": "Используйте мастер для создания виджета с нужными данными и макетом", + "widgetBuilderCreateWidgetTooltip": "Создать виджет", + "widgetBuilderCustomDashboardWidgets": "Пользовательские виджеты панели", + "widgetBuilderCustomWidget": "Пользовательский виджет", + "widgetBuilderDeleteAction": "Удалить", + "widgetBuilderDeleteButton": "Удалить", + "widgetBuilderDeleteWidgetTitle": "Удалить виджет?", + "widgetBuilderDiscard": "Отклонить", + "widgetBuilderDiscardChangesMessage": "Есть несохранённые изменения. Закрыть без сохранения?", + "widgetBuilderDiscardChangesTitle": "Отклонить изменения?", + "widgetBuilderDiscoverCommunity": "Откройте для себя виджеты, созданные сообществом", + "widgetBuilderDuplicate": "Дублировать", + "widgetBuilderEdit": "Редактировать", + "widgetBuilderElementNotFound": "Элемент не найден", + "widgetBuilderEnablePhoneLocation": "Включите «Передавать местоположение телефона» в настройках, чтобы делиться своим положением", + "widgetBuilderEnterThresholdValue": "Введите пороговое значение", + "widgetBuilderEnterWidgetName": "Введите название виджета", + "widgetBuilderFailedToApprove": "Ошибка одобрения: {error}", + "widgetBuilderFailedToImport": "Ошибка импорта: {error}", + "widgetBuilderFailedToInstall": "Ошибка установки: {error}", + "widgetBuilderFailedToReject": "Ошибка отклонения: {error}", + "widgetBuilderFailedToRequestPositions": "Ошибка запроса позиций: {error}", + "widgetBuilderFailedToSaveWidget": "Ошибка сохранения виджета: {error}", + "widgetBuilderFailedToShareLocation": "Ошибка передачи местоположения: {error}", + "widgetBuilderFailedToSubmit": "Ошибка отправки: {error}", + "widgetBuilderHelp": "Справка", + "widgetBuilderHeroDescription": "Создавайте персональные виджеты для отображения данных сети так, как вам удобно. Отслеживайте заряд батареи, уровень сигнала, местоположение и многое другое с одного взгляда.", + "widgetBuilderIconAdd": "Добавить", + "widgetBuilderIconAir": "Воздух", + "widgetBuilderIconAlert": "Оповещение", + "widgetBuilderIconAnalytics": "Аналитика", "widgetBuilderIconBluetooth": "Bluetooth", - "widgetBuilderIconBookmark": "Bookmark", - "widgetBuilderIconCall": "Call", - "widgetBuilderIconCategoryActions": "Actions", - "widgetBuilderIconCategoryBatteryPower": "Battery & Power", - "widgetBuilderIconCategoryCommunication": "Communication", - "widgetBuilderIconCategoryConnectivity": "Connectivity", - "widgetBuilderIconCategoryDataCharts": "Data & Charts", - "widgetBuilderIconCategoryEnvironment": "Environment", - "widgetBuilderIconCategoryFavorites": "Favorites", - "widgetBuilderIconCategoryLocationMaps": "Location & Maps", - "widgetBuilderIconCategoryStatus": "Status", - "widgetBuilderIconCharging": "Charging", - "widgetBuilderIconChart": "Chart", - "widgetBuilderIconChat": "Chat", - "widgetBuilderIconCheck": "Check", - "widgetBuilderIconCloud": "Cloud", - "widgetBuilderIconDelete": "Delete", - "widgetBuilderIconDevices": "Devices", - "widgetBuilderIconDown": "Down", - "widgetBuilderIconEdit": "Edit", - "widgetBuilderIconError": "Error", - "widgetBuilderIconExplore": "Explore", - "widgetBuilderIconFlash": "Flash", - "widgetBuilderIconFull": "Full", + "widgetBuilderIconBookmark": "Закладка", + "widgetBuilderIconCall": "Звонок", + "widgetBuilderIconCategoryActions": "Действия", + "widgetBuilderIconCategoryBatteryPower": "Батарея и питание", + "widgetBuilderIconCategoryCommunication": "Связь", + "widgetBuilderIconCategoryConnectivity": "Подключение", + "widgetBuilderIconCategoryDataCharts": "Данные и графики", + "widgetBuilderIconCategoryEnvironment": "Окружающая среда", + "widgetBuilderIconCategoryFavorites": "Избранное", + "widgetBuilderIconCategoryLocationMaps": "Местоположение и карты", + "widgetBuilderIconCategoryStatus": "Статус", + "widgetBuilderIconCharging": "Зарядка", + "widgetBuilderIconChart": "График", + "widgetBuilderIconChat": "Чат", + "widgetBuilderIconCheck": "Галочка", + "widgetBuilderIconCloud": "Облако", + "widgetBuilderIconDelete": "Удалить", + "widgetBuilderIconDevices": "Устройства", + "widgetBuilderIconDown": "Вниз", + "widgetBuilderIconEdit": "Изменить", + "widgetBuilderIconError": "Ошибка", + "widgetBuilderIconExplore": "Обзор", + "widgetBuilderIconFlash": "Вспышка", + "widgetBuilderIconFull": "Полный", "widgetBuilderIconGps": "GPS", - "widgetBuilderIconHeart": "Heart", - "widgetBuilderIconHelp": "Help", - "widgetBuilderIconHub": "Hub", - "widgetBuilderIconHumidity": "Humidity", - "widgetBuilderIconInfo": "Info", - "widgetBuilderIconLocation": "Location", - "widgetBuilderIconMap": "Map", - "widgetBuilderIconMessage": "Message", - "widgetBuilderIconNavigate": "Navigate", - "widgetBuilderIconNearMe": "Near Me", - "widgetBuilderIconNetwork": "Network", - "widgetBuilderIconNotification": "Notification", - "widgetBuilderIconPower": "Power", - "widgetBuilderIconPressure": "Pressure", - "widgetBuilderIconRefresh": "Refresh", - "widgetBuilderIconRemove": "Remove", - "widgetBuilderIconRoute": "Route", - "widgetBuilderIconRouter": "Router", - "widgetBuilderIconSend": "Send", - "widgetBuilderIconSettings": "Settings", - "widgetBuilderIconSignal": "Signal", - "widgetBuilderIconSpeed": "Speed", - "widgetBuilderIconStar": "Star", - "widgetBuilderIconSun": "Sun", - "widgetBuilderIconTemperature": "Temperature", - "widgetBuilderIconThumbsUp": "Thumbs Up", - "widgetBuilderIconTimeline": "Timeline", - "widgetBuilderIconUp": "Up", - "widgetBuilderIconWarning": "Warning", + "widgetBuilderIconHeart": "Сердце", + "widgetBuilderIconHelp": "Помощь", + "widgetBuilderIconHub": "Концентратор", + "widgetBuilderIconHumidity": "Влажность", + "widgetBuilderIconInfo": "Инфо", + "widgetBuilderIconLocation": "Местоположение", + "widgetBuilderIconMap": "Карта", + "widgetBuilderIconMessage": "Сообщение", + "widgetBuilderIconNavigate": "Навигация", + "widgetBuilderIconNearMe": "Рядом со мной", + "widgetBuilderIconNetwork": "Сеть", + "widgetBuilderIconNotification": "Уведомление", + "widgetBuilderIconPower": "Питание", + "widgetBuilderIconPressure": "Давление", + "widgetBuilderIconRefresh": "Обновить", + "widgetBuilderIconRemove": "Удалить", + "widgetBuilderIconRoute": "Маршрут", + "widgetBuilderIconRouter": "Маршрутизатор", + "widgetBuilderIconSend": "Отправить", + "widgetBuilderIconSettings": "Настройки", + "widgetBuilderIconSignal": "Сигнал", + "widgetBuilderIconSpeed": "Скорость", + "widgetBuilderIconStar": "Звезда", + "widgetBuilderIconSun": "Солнце", + "widgetBuilderIconTemperature": "Температура", + "widgetBuilderIconThumbsUp": "Нравится", + "widgetBuilderIconTimeline": "Хронология", + "widgetBuilderIconUp": "Вверх", + "widgetBuilderIconWarning": "Предупреждение", "widgetBuilderIconWifi": "WiFi", - "widgetBuilderImportButton": "Import", - "widgetBuilderImportEditFirst": "Edit First", - "widgetBuilderImportFailed2": "Import Failed", - "widgetBuilderImportGoBack": "Go Back", - "widgetBuilderImportInfoNotice": "This widget will be added to your custom widgets. You can edit it anytime.", - "widgetBuilderImportNoData": "No widget data provided", - "widgetBuilderImportNotFound": "Widget not found or has been deleted", - "widgetBuilderImportPreview": "Preview", - "widgetBuilderImportSize": "Size", - "widgetBuilderImportTags": "Tags", - "widgetBuilderImportTitle": "Import Widget", - "widgetBuilderImportedSuccess": "Widget imported successfully", - "widgetBuilderImportedSuccessAction": "Widget imported successfully", - "widgetBuilderInstalledSuccess": "{name} installed!", - "widgetBuilderKeepCurrent": "Keep Current", - "widgetBuilderLabelAccent": "Accent", - "widgetBuilderLabelBindTo": "Bind to", - "widgetBuilderLabelGap": "Gap between items", - "widgetBuilderLabelHintExample": "e.g., \"Warning\", \"Critical\"", - "widgetBuilderLabelIcon": "Icon", - "widgetBuilderLabelIconColor": "Icon Color", - "widgetBuilderLabelMax": "Max", - "widgetBuilderLabelMin": "Min", - "widgetBuilderLabelScreen": "Screen", - "widgetBuilderLabelShape": "Shape", - "widgetBuilderLabelText": "Text", - "widgetBuilderLabelType": "Type", + "widgetBuilderImportButton": "Импорт", + "widgetBuilderImportEditFirst": "Сначала изменить", + "widgetBuilderImportFailed2": "Ошибка импорта", + "widgetBuilderImportGoBack": "Назад", + "widgetBuilderImportInfoNotice": "Этот виджет будет добавлен в ваши пользовательские виджеты. Вы можете изменить его в любое время.", + "widgetBuilderImportNoData": "Данные виджета не предоставлены", + "widgetBuilderImportNotFound": "Виджет не найден или был удалён", + "widgetBuilderImportPreview": "Предпросмотр", + "widgetBuilderImportSize": "Размер", + "widgetBuilderImportTags": "Теги", + "widgetBuilderImportTitle": "Импорт виджета", + "widgetBuilderImportedSuccess": "Виджет успешно импортирован", + "widgetBuilderImportedSuccessAction": "Виджет успешно импортирован", + "widgetBuilderInstalledSuccess": "{name} установлен!", + "widgetBuilderKeepCurrent": "Оставить текущий", + "widgetBuilderLabelAccent": "Акцент", + "widgetBuilderLabelBindTo": "Привязать к", + "widgetBuilderLabelGap": "Отступ между элементами", + "widgetBuilderLabelHintExample": "например, «Предупреждение», «Критично»", + "widgetBuilderLabelIcon": "Значок", + "widgetBuilderLabelIconColor": "Цвет значка", + "widgetBuilderLabelMax": "Макс.", + "widgetBuilderLabelMin": "Мин.", + "widgetBuilderLabelScreen": "Экран", + "widgetBuilderLabelShape": "Форма", + "widgetBuilderLabelText": "Текст", + "widgetBuilderLabelType": "Тип", "widgetBuilderLabelUrl": "URL", - "widgetBuilderLargeMaxTwoRows": "Large widgets allow max 2 rows", - "widgetBuilderLargeOnlyTwoRowsMax": "Large widgets only allow 2 rows max", - "widgetBuilderLivePreview": "Live Preview", - "widgetBuilderLocationSharedMesh": "Location shared with mesh", - "widgetBuilderLocationSharedRecently": "Location was shared recently — please wait before sharing again", - "widgetBuilderLocationSharedWithNode": "Location shared with {name}", - "widgetBuilderMakeUnique": "Consider making your widget more unique before submitting.", - "widgetBuilderMapView": "Map View", - "widgetBuilderMarketplace": "Marketplace", - "widgetBuilderMarketplaceAlreadyInstalled": "Already Installed", - "widgetBuilderMarketplaceApprove": "Approve", - "widgetBuilderMarketplaceCancel": "Cancel", - "widgetBuilderMarketplaceDescription": "Description", + "widgetBuilderLargeMaxTwoRows": "Большие виджеты допускают не более 2 строк", + "widgetBuilderLargeOnlyTwoRowsMax": "Большие виджеты допускают не более 2 строк", + "widgetBuilderLivePreview": "Предпросмотр в реальном времени", + "widgetBuilderLocationSharedMesh": "Местоположение передано в сеть", + "widgetBuilderLocationSharedRecently": "Местоположение было недавно передано — подождите перед повторной отправкой", + "widgetBuilderLocationSharedWithNode": "Местоположение передано узлу {name}", + "widgetBuilderMakeUnique": "Сделайте виджет более уникальным перед отправкой.", + "widgetBuilderMapView": "Вид карты", + "widgetBuilderMarketplace": "Маркетплейс", + "widgetBuilderMarketplaceAlreadyInstalled": "Уже установлен", + "widgetBuilderMarketplaceApprove": "Одобрить", + "widgetBuilderMarketplaceCancel": "Отмена", + "widgetBuilderMarketplaceDescription": "Описание", "widgetBuilderMarketplaceRatingWithCount": "{rating} ({count})", - "widgetBuilderMarketplaceEnterReason": "Enter reason...", - "widgetBuilderMarketplaceFailedLoadPending": "Failed to load pending widgets: {error}", - "widgetBuilderMarketplaceFailedLoadCategory": "Failed to load category", - "widgetBuilderMarketplaceFailedNewest": "Failed to load newest widgets", - "widgetBuilderMarketplaceFailedPopular": "Failed to load popular widgets", - "widgetBuilderMarketplaceFavoritesHint": "Tap the heart icon on any widget to add it here", - "widgetBuilderMarketplaceFavoritesWithCount": "Favorites ({count})", - "widgetBuilderMarketplaceHelpTooltip": "Help", - "widgetBuilderMarketplaceInstallWidget": "Install Widget", - "widgetBuilderMarketplaceDaysAgo": "{count}d ago", - "widgetBuilderMarketplaceHoursAgo": "{count}h ago", - "widgetBuilderMarketplaceInstallsCount": "{count} installs", - "widgetBuilderMarketplaceJustNow": "Just now", - "widgetBuilderMarketplaceMinutesAgo": "{count}m ago", - "widgetBuilderMarketplaceLoadingPreview": "Loading preview...", - "widgetBuilderMarketplaceNoFavorites": "No favorite widgets yet", - "widgetBuilderMarketplaceNoFeatured": "No featured widgets", - "widgetBuilderMarketplaceNoNew": "No new widgets yet", - "widgetBuilderMarketplaceNoPending": "No widgets pending approval", - "widgetBuilderMarketplaceNoPopular": "No popular widgets yet", - "widgetBuilderMarketplaceNoWidgets": "No widgets available", - "widgetBuilderMarketplaceNoWidgetsFound": "No widgets found", - "widgetBuilderMarketplaceNoWidgetsInCategory": "No widgets in this category", - "widgetBuilderMarketplaceNotAuthenticated": "Not authenticated", - "widgetBuilderMarketplacePending": "PENDING", - "widgetBuilderMarketplacePleaseEnterReason": "Please enter a reason", - "widgetBuilderMarketplaceProcessing": "Processing...", - "widgetBuilderMarketplaceRejectButton": "Reject", - "widgetBuilderMarketplaceRejectWidget": "Reject Widget", - "widgetBuilderMarketplaceRequiresInternet": "Installing widgets requires an internet connection.", - "widgetBuilderMarketplaceRetry": "Retry", - "widgetBuilderMarketplaceSearchHint": "Search widgets...", - "widgetBuilderMarketplaceShareTooltip": "Share Widget", - "widgetBuilderMarketplaceSharingRequiresInternet": "Sharing widgets requires an internet connection.", - "widgetBuilderMarketplaceTabCategories": "Categories", - "widgetBuilderMarketplaceTabFavorites": "Favorites", - "widgetBuilderMarketplaceTabFeatured": "Featured", - "widgetBuilderMarketplaceTabNew": "New", - "widgetBuilderMarketplaceTabPopular": "Popular", - "widgetBuilderMarketplaceTags": "Tags", - "widgetBuilderMarketplaceTitle": "Widget Marketplace", - "widgetBuilderMarketplaceUnableToLoad": "Unable to load marketplace", - "widgetBuilderMarketplaceWidgetApproval": "Widget Approval", - "widgetBuilderMediumOnlyOneRow": "Medium widgets only allow 1 row", - "widgetBuilderMediumOnlyOneRowLimit": "Medium widgets only allow 1 row", - "widgetBuilderMerge": "Merge", - "widgetBuilderMyWidgets": "My Widgets", - "widgetBuilderNameHint": "e.g., My Battery Widget", - "widgetBuilderNewWidget": "New Widget", - "widgetBuilderNoAdditionalOptions": "No additional options", - "widgetBuilderNoDataBinding": "No data binding - use static text", - "widgetBuilderNoDataSelected": "No data selected", - "widgetBuilderNoIconsFound": "No icons found", - "widgetBuilderNoInfoSelected": "No info selected", - "widgetBuilderNoLocationDataSelected": "No location data selected", - "widgetBuilderNoSensorDataSelected": "No sensor data selected", - "widgetBuilderNone": "None", - "widgetBuilderOk": "OK", - "widgetBuilderOptions": "Options", - "widgetBuilderPickNodeThenSend": "Pick node, then send", - "widgetBuilderPickNodeToTrace": "Pick node to trace", - "widgetBuilderPrebuiltWidgets": "Pre-built widgets ready to customize", - "widgetBuilderQuickMessageSheet": "Quick message sheet", - "widgetBuilderQuickStartTemplates": "Quick Start Templates", - "widgetBuilderRejectedSuccess": "{name} rejected", - "widgetBuilderRemoveExtraRows": "Remove extra rows first - medium allows only 1 row", - "widgetBuilderRemoveFromDashboard": "Remove from Dashboard", - "widgetBuilderRemovedFromDashboard": "{name} removed from Dashboard", - "widgetBuilderReviewGuidelines": "Review Guidelines", - "widgetBuilderReviewGuidelinesText": "• Widget will be reviewed for quality\n• Similar widgets may be rejected\n• You'll be credited as the author", - "widgetBuilderSave": "Save", - "widgetBuilderSearchIcons": "Search icons...", - "widgetBuilderSearchVariables": "Search variables...", - "widgetBuilderSectionActionBlocks": "Action Blocks", - "widgetBuilderSectionDisplayBlocks": "Display Blocks", - "widgetBuilderSectionEmergency": "EMERGENCY", - "widgetBuilderSectionLayout": "Layout", - "widgetBuilderSectionMessaging": "MESSAGING", - "widgetBuilderSectionNetwork": "NETWORK", - "widgetBuilderSelectAnAction": "Select an action", - "widgetBuilderSelectIcon": "Select Icon", - "widgetBuilderSelectVariable": "Select Variable", - "widgetBuilderShareInfoText": "Scan this QR code in Socialmesh to import this widget", - "widgetBuilderShareLocationWith": "Share Location With", - "widgetBuilderShareMessage": "Check out this widget on Socialmesh!", - "widgetBuilderShareSubject": "Socialmesh Widget: {name}", - "widgetBuilderShareTitle": "Share Widget", - "widgetBuilderShowChannelPicker": "Show channel picker", - "widgetBuilderShowChannelPickerDesc": "Let user choose which channel", - "widgetBuilderShowNodePickerFirst": "Show node picker first", - "widgetBuilderShowNodePickerFirstDesc": "Let user choose which node to message", - "widgetBuilderShowNodePickerTrace": "Show node picker first", - "widgetBuilderShowNodePickerTraceDesc": "Let user choose which node to trace", - "widgetBuilderSignInAction": "Sign In", - "widgetBuilderSignInToShare": "Sign in to share widgets", - "widgetBuilderSignInToSubmit": "Sign in to submit widgets", - "widgetBuilderSimilarWidgetExists": "A similar widget already exists in the marketplace:", - "widgetBuilderSimilarWidgetExistsError": "Similar widget already exists: {name}", - "widgetBuilderSimilarWidgetFound": "Similar Widget Found", - "widgetBuilderSizeCustom": "Custom size", - "widgetBuilderSizeLarge": "Large (2x2)", - "widgetBuilderSizeMedium": "Medium (2x1)", - "widgetBuilderSubmitButton": "Submit", - "widgetBuilderSubmitCancel": "Cancel", - "widgetBuilderSubmitTitle": "Submit to Marketplace", - "widgetBuilderSubmitToMarketplace": "Submit to Marketplace", - "widgetBuilderSubmittedForReview": "{name} submitted for review", - "widgetBuilderSwitch": "Switch", - "widgetBuilderSwitchTemplateIncompatible": "\"{templateName}\" uses {newDataType} instead, so your current selections won't be used.", - "widgetBuilderSwitchTemplateItemCount": "You have {count} {dataType} selected.", - "widgetBuilderSwitchTemplateTitle": "Switch Template?", - "widgetBuilderTemplateBatteryStatus": "Battery Status", - "widgetBuilderTemplateBatteryStatusDesc": "Monitor power levels", - "widgetBuilderTemplateEnvironment": "Environment", - "widgetBuilderTemplateEnvironmentDesc": "Weather & sensors", - "widgetBuilderTemplateGpsPosition": "GPS Position", - "widgetBuilderTemplateGpsPositionDesc": "Location tracking", - "widgetBuilderTemplateNetworkOverview": "Network Overview", - "widgetBuilderTemplateNetworkOverviewDesc": "Mesh at a glance", - "widgetBuilderTemplateSignalStrength": "Signal Strength", - "widgetBuilderTemplateSignalStrengthDesc": "Track connectivity", - "widgetBuilderThresholdLines": "Threshold Lines", - "widgetBuilderToggleToolbox": "Toggle Toolbox", - "widgetBuilderTraceRouteToNode": "Trace route to node", - "widgetBuilderTypeDecimal": "decimal", - "widgetBuilderTypeGauge": "Gauge", - "widgetBuilderTypeGaugeDesc": "Big visual meter", - "widgetBuilderTypeGraph": "Graph", - "widgetBuilderTypeGraphDesc": "Charts over time", - "widgetBuilderTypeInfoCard": "Info Card", - "widgetBuilderTypeInfoCardDesc": "Text & details", - "widgetBuilderTypeLocation": "Location", - "widgetBuilderTypeLocationDesc": "GPS coordinates", - "widgetBuilderTypeNumber": "number", - "widgetBuilderTypeQuickActions": "Quick Actions", - "widgetBuilderTypeQuickActionsDesc": "Tap to trigger", - "widgetBuilderTypeStatusDisplay": "Status Display", - "widgetBuilderTypeStatusDisplayDesc": "Values with progress bars", - "widgetBuilderTypeText": "text", - "widgetBuilderTypeTime": "time", - "widgetBuilderTypeValue": "value", - "widgetBuilderTypeYesNo": "yes/no", - "widgetBuilderUnableToGetLocation": "Unable to get your location", - "widgetBuilderUse": "Use", - "widgetBuilderValidationActionsRequired": "Quick Actions requires at least one action selected. You have data bindings but no actions.", - "widgetBuilderValidationDataRequired": "This template requires data bindings. You have actions selected but no data.", - "widgetBuilderView": "View", - "widgetBuilderWhatShouldHappen": "What should happen when tapped?", - "widgetBuilderWhatToAdd": "What would you like to add?", - "widgetBuilderWhatWouldYouLikeToDo": "What would you like to do?", - "widgetBuilderWidgetCreated": "Widget created!", - "widgetBuilderWidgetName": "Widget Name", - "widgetBuilderWidgetTypes": "Widget Types", - "widgetBuilderWidgetUpdated": "Widget updated!", - "widgetBuilderWizardStep1Subtitle": "How do you want your widget to look?", - "widgetBuilderWizardStep1Title": "Choose a Style", - "widgetBuilderWizardStep2Subtitle": "Give it a memorable name", - "widgetBuilderWizardStep2Title": "Name Your Widget", - "widgetBuilderWizardStep3SubtitleActions": "Which actions do you want quick access to?", - "widgetBuilderWizardStep3SubtitleData": "What info do you want to see?", - "widgetBuilderWizardStep3TitleActions": "Choose Actions", - "widgetBuilderWizardStep3TitleData": "Pick Your Data", - "widgetBuilderWizardStep4Subtitle": "Customize colors and layout", - "widgetBuilderWizardStep4Title": "Make it Yours", - "worldMeshAddToFavorites": "Add to favorites", - "worldMeshAddedToFavorites": "Added to favorites", - "worldMeshBadgeActive": "ACTIVE", - "worldMeshCoordinatesCopied": "Coordinates copied to clipboard", - "worldMeshCopyCoordinates": "Copy Coordinates", - "worldMeshCopyCoordinatesSubtitle": "Both A and B coordinates", - "worldMeshCopyId": "Copy ID", - "worldMeshCopySummary": "Copy Summary", - "worldMeshErrorTitle": "Unable to load mesh map", - "worldMeshExitMeasureMode": "Exit measure mode", - "worldMeshFavoritesTooltip": "Favorites", - "worldMeshFilterActiveCount": "{count} active", - "worldMeshFilterAny": "Any", - "worldMeshFilterBatteryInfo": "Battery Info", - "worldMeshFilterCatBatteryInfo": "Battery Info", - "worldMeshFilterCatEnvSensors": "Environment Sensors", - "worldMeshFilterCatFirmware": "Firmware", - "worldMeshFilterCatHardware": "Hardware", - "worldMeshFilterCatModemPreset": "Modem Preset", - "worldMeshFilterCatRegion": "Region", - "worldMeshFilterCatRole": "Role", - "worldMeshFilterCatStatus": "Status", - "worldMeshFilterClearAll": "Clear All", - "worldMeshFilterEnvironmentSensors": "Environment Sensors", - "worldMeshFilterFirmwareVersion": "Firmware Version", - "worldMeshFilterHardwareModel": "Hardware Model", - "worldMeshFilterModemPreset": "Modem Preset", - "worldMeshFilterNo": "No", - "worldMeshFilterNoOptions": "No options available", - "worldMeshFilterNodeCount": "{filteredCount} of {totalCount} nodes", - "worldMeshFilterNodeRole": "Node Role", - "worldMeshFilterNodesWithBattery": "{count} nodes with battery data", - "worldMeshFilterNodesWithSensors": "{count} nodes with sensors", - "worldMeshFilterRegion": "Region", - "worldMeshFilterStatus": "Status", - "worldMeshFilterStatusActive": "Active (≤2m)", - "worldMeshFilterStatusFading": "Fading (2-10m)", - "worldMeshFilterStatusInactive": "Inactive (10-60m)", - "worldMeshFilterStatusUnknown": "Unknown (>60m)", - "worldMeshFilterTitle": "Filter Nodes", - "worldMeshFilterTooltip": "Filter nodes", - "worldMeshFilterYes": "Yes", - "worldMeshFocus": "Focus", - "worldMeshFsplSubtitle": "FSPL: {db} dB", - "worldMeshHelp": "Help", - "worldMeshInfoAltitude": "Altitude", - "worldMeshInfoCoordinates": "Coordinates", - "worldMeshInfoFirmware": "Firmware", - "worldMeshInfoHardware": "Hardware", - "worldMeshInfoLocalNodes": "Local Nodes", - "worldMeshInfoModem": "Modem", - "worldMeshInfoPrecision": "Precision", - "worldMeshInfoRegion": "Region", - "worldMeshInfoRole": "Role", - "worldMeshLastSeen": "Last seen: {time}", - "worldMeshLegendActive": "Active (<1h)", - "worldMeshLegendIdle": "Idle (1-24h)", - "worldMeshLegendOffline": "Offline (>24h)", - "worldMeshLinkBudgetCopied": "Link budget copied to clipboard", - "worldMeshLoadingNodeInfo": "Loading node info...", - "worldMeshLongPressHint": "Long-press for actions", - "worldMeshLosAnalysis": "LOS Analysis", - "worldMeshLosBulgeAndFresnel": "Bulge: {bulge}m · F1: {fresnel}m", - "worldMeshLosSubtitle": "Earth curvature + Fresnel zone check", + "widgetBuilderMarketplaceEnterReason": "Укажите причину...", + "widgetBuilderMarketplaceFailedLoadPending": "Не удалось загрузить ожидающие виджеты: {error}", + "widgetBuilderMarketplaceFailedLoadCategory": "Не удалось загрузить категорию", + "widgetBuilderMarketplaceFailedNewest": "Не удалось загрузить новые виджеты", + "widgetBuilderMarketplaceFailedPopular": "Не удалось загрузить популярные виджеты", + "widgetBuilderMarketplaceFavoritesHint": "Нажмите на значок сердца на любом виджете, чтобы добавить его сюда", + "widgetBuilderMarketplaceFavoritesWithCount": "Избранное ({count})", + "widgetBuilderMarketplaceHelpTooltip": "Помощь", + "widgetBuilderMarketplaceInstallWidget": "Установить виджет", + "widgetBuilderMarketplaceDaysAgo": "{count} д. назад", + "widgetBuilderMarketplaceHoursAgo": "{count} ч. назад", + "widgetBuilderMarketplaceInstallsCount": "{count} установок", + "widgetBuilderMarketplaceJustNow": "Только что", + "widgetBuilderMarketplaceMinutesAgo": "{count} мин. назад", + "widgetBuilderMarketplaceLoadingPreview": "Загрузка предпросмотра...", + "widgetBuilderMarketplaceNoFavorites": "Нет избранных виджетов", + "widgetBuilderMarketplaceNoFeatured": "Нет рекомендуемых виджетов", + "widgetBuilderMarketplaceNoNew": "Новых виджетов пока нет", + "widgetBuilderMarketplaceNoPending": "Нет виджетов, ожидающих проверки", + "widgetBuilderMarketplaceNoPopular": "Популярных виджетов пока нет", + "widgetBuilderMarketplaceNoWidgets": "Нет доступных виджетов", + "widgetBuilderMarketplaceNoWidgetsFound": "Виджеты не найдены", + "widgetBuilderMarketplaceNoWidgetsInCategory": "В этой категории нет виджетов", + "widgetBuilderMarketplaceNotAuthenticated": "Не авторизован", + "widgetBuilderMarketplacePending": "НА ПРОВЕРКЕ", + "widgetBuilderMarketplacePleaseEnterReason": "Пожалуйста, укажите причину", + "widgetBuilderMarketplaceProcessing": "Обработка...", + "widgetBuilderMarketplaceRejectButton": "Отклонить", + "widgetBuilderMarketplaceRejectWidget": "Отклонить виджет", + "widgetBuilderMarketplaceRequiresInternet": "Для установки виджетов необходимо подключение к интернету.", + "widgetBuilderMarketplaceRetry": "Повторить", + "widgetBuilderMarketplaceSearchHint": "Поиск виджетов...", + "widgetBuilderMarketplaceShareTooltip": "Поделиться виджетом", + "widgetBuilderMarketplaceSharingRequiresInternet": "Для публикации виджетов необходимо подключение к интернету.", + "widgetBuilderMarketplaceTabCategories": "Категории", + "widgetBuilderMarketplaceTabFavorites": "Избранное", + "widgetBuilderMarketplaceTabFeatured": "Рекомендуемые", + "widgetBuilderMarketplaceTabNew": "Новые", + "widgetBuilderMarketplaceTabPopular": "Популярные", + "widgetBuilderMarketplaceTags": "Теги", + "widgetBuilderMarketplaceTitle": "Маркетплейс виджетов", + "widgetBuilderMarketplaceUnableToLoad": "Не удалось загрузить маркетплейс", + "widgetBuilderMarketplaceWidgetApproval": "Проверка виджета", + "widgetBuilderMediumOnlyOneRow": "Средние виджеты допускают только 1 строку", + "widgetBuilderMediumOnlyOneRowLimit": "Средние виджеты допускают только 1 строку", + "widgetBuilderMerge": "Объединить", + "widgetBuilderMyWidgets": "Мои виджеты", + "widgetBuilderNameHint": "например, Мой виджет батареи", + "widgetBuilderNewWidget": "Новый виджет", + "widgetBuilderNoAdditionalOptions": "Нет дополнительных параметров", + "widgetBuilderNoDataBinding": "Нет привязки данных — используется статический текст", + "widgetBuilderNoDataSelected": "Данные не выбраны", + "widgetBuilderNoIconsFound": "Значки не найдены", + "widgetBuilderNoInfoSelected": "Информация не выбрана", + "widgetBuilderNoLocationDataSelected": "Данные о местоположении не выбраны", + "widgetBuilderNoSensorDataSelected": "Данные датчиков не выбраны", + "widgetBuilderNone": "Нет", + "widgetBuilderOk": "ОК", + "widgetBuilderOptions": "Параметры", + "widgetBuilderPickNodeThenSend": "Выберите узел, затем отправьте", + "widgetBuilderPickNodeToTrace": "Выберите узел для трассировки", + "widgetBuilderPrebuiltWidgets": "Готовые виджеты для настройки", + "widgetBuilderQuickMessageSheet": "Быстрая отправка сообщения", + "widgetBuilderQuickStartTemplates": "Шаблоны для быстрого старта", + "widgetBuilderRejectedSuccess": "{name} отклонён", + "widgetBuilderRemoveExtraRows": "Сначала удалите лишние строки — средний размер допускает только 1 строку", + "widgetBuilderRemoveFromDashboard": "Убрать с панели", + "widgetBuilderRemovedFromDashboard": "{name} удалён с панели", + "widgetBuilderReviewGuidelines": "Правила проверки", + "widgetBuilderReviewGuidelinesText": "• Виджет будет проверен на качество\n• Похожие виджеты могут быть отклонены\n• Вы будете указаны как автор", + "widgetBuilderSave": "Сохранить", + "widgetBuilderSearchIcons": "Поиск значков...", + "widgetBuilderSearchVariables": "Поиск переменных...", + "widgetBuilderSectionActionBlocks": "Блоки действий", + "widgetBuilderSectionDisplayBlocks": "Блоки отображения", + "widgetBuilderSectionEmergency": "ЭКСТРЕННЫЕ", + "widgetBuilderSectionLayout": "Макет", + "widgetBuilderSectionMessaging": "СООБЩЕНИЯ", + "widgetBuilderSectionNetwork": "СЕТЬ", + "widgetBuilderSelectAnAction": "Выберите действие", + "widgetBuilderSelectIcon": "Выбрать значок", + "widgetBuilderSelectVariable": "Выбрать переменную", + "widgetBuilderShareInfoText": "Отсканируйте этот QR-код в Socialmesh, чтобы импортировать виджет", + "widgetBuilderShareLocationWith": "Поделиться местоположением с", + "widgetBuilderShareMessage": "Посмотрите этот виджет в Socialmesh!", + "widgetBuilderShareSubject": "Виджет Socialmesh: {name}", + "widgetBuilderShareTitle": "Поделиться виджетом", + "widgetBuilderShowChannelPicker": "Показать выбор канала", + "widgetBuilderShowChannelPickerDesc": "Позволить пользователю выбрать канал", + "widgetBuilderShowNodePickerFirst": "Сначала показать выбор узла", + "widgetBuilderShowNodePickerFirstDesc": "Позволить пользователю выбрать узел для сообщения", + "widgetBuilderShowNodePickerTrace": "Сначала показать выбор узла", + "widgetBuilderShowNodePickerTraceDesc": "Позволить пользователю выбрать узел для трассировки", + "widgetBuilderSignInAction": "Войти", + "widgetBuilderSignInToShare": "Войдите, чтобы делиться виджетами", + "widgetBuilderSignInToSubmit": "Войдите, чтобы публиковать виджеты", + "widgetBuilderSimilarWidgetExists": "Похожий виджет уже есть в маркетплейсе:", + "widgetBuilderSimilarWidgetExistsError": "Похожий виджет уже существует: {name}", + "widgetBuilderSimilarWidgetFound": "Найден похожий виджет", + "widgetBuilderSizeCustom": "Произвольный размер", + "widgetBuilderSizeLarge": "Большой (2×2)", + "widgetBuilderSizeMedium": "Средний (2×1)", + "widgetBuilderSubmitButton": "Отправить", + "widgetBuilderSubmitCancel": "Отмена", + "widgetBuilderSubmitTitle": "Отправить в маркетплейс", + "widgetBuilderSubmitToMarketplace": "Отправить в маркетплейс", + "widgetBuilderSubmittedForReview": "{name} отправлен на проверку", + "widgetBuilderSwitch": "Переключить", + "widgetBuilderSwitchTemplateIncompatible": "«{templateName}» использует {newDataType}, поэтому текущие выборы не будут применены.", + "widgetBuilderSwitchTemplateItemCount": "Вы выбрали {count} {dataType}.", + "widgetBuilderSwitchTemplateTitle": "Сменить шаблон?", + "widgetBuilderTemplateBatteryStatus": "Статус батареи", + "widgetBuilderTemplateBatteryStatusDesc": "Мониторинг уровня заряда", + "widgetBuilderTemplateEnvironment": "Окружающая среда", + "widgetBuilderTemplateEnvironmentDesc": "Погода и датчики", + "widgetBuilderTemplateGpsPosition": "GPS-позиция", + "widgetBuilderTemplateGpsPositionDesc": "Отслеживание местоположения", + "widgetBuilderTemplateNetworkOverview": "Обзор сети", + "widgetBuilderTemplateNetworkOverviewDesc": "Состояние сети с первого взгляда", + "widgetBuilderTemplateSignalStrength": "Уровень сигнала", + "widgetBuilderTemplateSignalStrengthDesc": "Отслеживание подключения", + "widgetBuilderThresholdLines": "Пороговые линии", + "widgetBuilderToggleToolbox": "Показать/скрыть панель инструментов", + "widgetBuilderTraceRouteToNode": "Трассировать маршрут до узла", + "widgetBuilderTypeDecimal": "десятичное", + "widgetBuilderTypeGauge": "Шкала", + "widgetBuilderTypeGaugeDesc": "Большой визуальный индикатор", + "widgetBuilderTypeGraph": "График", + "widgetBuilderTypeGraphDesc": "Диаграммы по времени", + "widgetBuilderTypeInfoCard": "Информационная карточка", + "widgetBuilderTypeInfoCardDesc": "Текст и подробности", + "widgetBuilderTypeLocation": "Местоположение", + "widgetBuilderTypeLocationDesc": "GPS-координаты", + "widgetBuilderTypeNumber": "число", + "widgetBuilderTypeQuickActions": "Быстрые действия", + "widgetBuilderTypeQuickActionsDesc": "Нажмите для запуска", + "widgetBuilderTypeStatusDisplay": "Отображение статуса", + "widgetBuilderTypeStatusDisplayDesc": "Значения с индикаторами прогресса", + "widgetBuilderTypeText": "текст", + "widgetBuilderTypeTime": "время", + "widgetBuilderTypeValue": "значение", + "widgetBuilderTypeYesNo": "да/нет", + "widgetBuilderUnableToGetLocation": "Не удалось определить ваше местоположение", + "widgetBuilderUse": "Использовать", + "widgetBuilderValidationActionsRequired": "Для быстрых действий необходимо выбрать хотя бы одно действие. Привязки данных заданы, но действия не выбраны.", + "widgetBuilderValidationDataRequired": "Для этого шаблона необходима привязка данных. Действия выбраны, но данные не заданы.", + "widgetBuilderView": "Просмотр", + "widgetBuilderWhatShouldHappen": "Что должно произойти при нажатии?", + "widgetBuilderWhatToAdd": "Что вы хотите добавить?", + "widgetBuilderWhatWouldYouLikeToDo": "Что вы хотите сделать?", + "widgetBuilderWidgetCreated": "Виджет создан!", + "widgetBuilderWidgetName": "Название виджета", + "widgetBuilderWidgetTypes": "Типы виджетов", + "widgetBuilderWidgetUpdated": "Виджет обновлён!", + "widgetBuilderWizardStep1Subtitle": "Как должен выглядеть ваш виджет?", + "widgetBuilderWizardStep1Title": "Выберите стиль", + "widgetBuilderWizardStep2Subtitle": "Придумайте запоминающееся название", + "widgetBuilderWizardStep2Title": "Назовите виджет", + "widgetBuilderWizardStep3SubtitleActions": "К каким действиям нужен быстрый доступ?", + "widgetBuilderWizardStep3SubtitleData": "Какую информацию вы хотите видеть?", + "widgetBuilderWizardStep3TitleActions": "Выберите действия", + "widgetBuilderWizardStep3TitleData": "Выберите данные", + "widgetBuilderWizardStep4Subtitle": "Настройте цвета и макет", + "widgetBuilderWizardStep4Title": "Сделайте его своим", + "worldMeshAddToFavorites": "Добавить в избранное", + "worldMeshAddedToFavorites": "Добавлено в избранное", + "worldMeshBadgeActive": "АКТИВЕН", + "worldMeshCoordinatesCopied": "Координаты скопированы в буфер обмена", + "worldMeshCopyCoordinates": "Копировать координаты", + "worldMeshCopyCoordinatesSubtitle": "Координаты обеих точек A и B", + "worldMeshCopyId": "Копировать ID", + "worldMeshCopySummary": "Копировать сводку", + "worldMeshErrorTitle": "Не удалось загрузить карту сети Mesh", + "worldMeshExitMeasureMode": "Выйти из режима измерения", + "worldMeshFavoritesTooltip": "Избранное", + "worldMeshFilterActiveCount": "{count} активных", + "worldMeshFilterAny": "Любой", + "worldMeshFilterBatteryInfo": "Сведения о батарее", + "worldMeshFilterCatBatteryInfo": "Сведения о батарее", + "worldMeshFilterCatEnvSensors": "Датчики окружающей среды", + "worldMeshFilterCatFirmware": "Прошивка", + "worldMeshFilterCatHardware": "Аппаратное обеспечение", + "worldMeshFilterCatModemPreset": "Пресет модема", + "worldMeshFilterCatRegion": "Регион", + "worldMeshFilterCatRole": "Роль", + "worldMeshFilterCatStatus": "Статус", + "worldMeshFilterClearAll": "Очистить всё", + "worldMeshFilterEnvironmentSensors": "Датчики окружающей среды", + "worldMeshFilterFirmwareVersion": "Версия прошивки", + "worldMeshFilterHardwareModel": "Модель оборудования", + "worldMeshFilterModemPreset": "Пресет модема", + "worldMeshFilterNo": "Нет", + "worldMeshFilterNoOptions": "Нет доступных вариантов", + "worldMeshFilterNodeCount": "{filteredCount} из {totalCount} узлов", + "worldMeshFilterNodeRole": "Роль узла", + "worldMeshFilterNodesWithBattery": "{count} узлов с данными о батарее", + "worldMeshFilterNodesWithSensors": "{count} узлов с датчиками", + "worldMeshFilterRegion": "Регион", + "worldMeshFilterStatus": "Статус", + "worldMeshFilterStatusActive": "Активен (≤2 мин)", + "worldMeshFilterStatusFading": "Затухает (2–10 мин)", + "worldMeshFilterStatusInactive": "Неактивен (10–60 мин)", + "worldMeshFilterStatusUnknown": "Неизвестно (>60 мин)", + "worldMeshFilterTitle": "Фильтр узлов", + "worldMeshFilterTooltip": "Фильтровать узлы", + "worldMeshFilterYes": "Да", + "worldMeshFocus": "Фокус", + "worldMeshFsplSubtitle": "FSPL: {db} дБ", + "worldMeshHelp": "Справка", + "worldMeshInfoAltitude": "Высота", + "worldMeshInfoCoordinates": "Координаты", + "worldMeshInfoFirmware": "Прошивка", + "worldMeshInfoHardware": "Оборудование", + "worldMeshInfoLocalNodes": "Локальные узлы", + "worldMeshInfoModem": "Модем", + "worldMeshInfoPrecision": "Точность", + "worldMeshInfoRegion": "Регион", + "worldMeshInfoRole": "Роль", + "worldMeshLastSeen": "Последний раз: {time}", + "worldMeshLegendActive": "Активен (<1 ч)", + "worldMeshLegendIdle": "Простаивает (1–24 ч)", + "worldMeshLegendOffline": "Офлайн (>24 ч)", + "worldMeshLinkBudgetCopied": "Энергетический бюджет скопирован в буфер обмена", + "worldMeshLoadingNodeInfo": "Загрузка информации об узле...", + "worldMeshLongPressHint": "Удерживайте для вызова действий", + "worldMeshLosAnalysis": "Анализ прямой видимости", + "worldMeshLosBulgeAndFresnel": "Выпуклость: {bulge} м · F1: {fresnel} м", + "worldMeshLosSubtitle": "Проверка кривизны Земли и зоны Френеля", "worldMeshLosVerdict": "LOS: {verdict}", - "worldMeshMapStyleDark": "Dark Map", - "worldMeshMapStyleLight": "Light Map", - "worldMeshMapStyleSatellite": "Satellite", - "worldMeshMapStyleTerrain": "Terrain", + "worldMeshMapStyleDark": "Тёмная карта", + "worldMeshMapStyleLight": "Светлая карта", + "worldMeshMapStyleSatellite": "Спутник", + "worldMeshMapStyleTerrain": "Рельеф", "worldMeshMeasurePointA": "A", "worldMeshMeasurePointB": "B", - "worldMeshMeasureTapA": "Tap node or map for point A", - "worldMeshMeasureTapB": "Tap node or map for point B", - "worldMeshMeasurementActions": "Measurement Actions", - "worldMeshMeasurementCopied": "Measurement copied to clipboard", - "worldMeshMoreGateways": " +{count} more", - "worldMeshNewMeasurement": "New measurement", - "worldMeshNodeIdCopied": "Node ID copied", - "worldMeshOpenMidpointInMaps": "Open Midpoint in Maps", - "worldMeshOpenMidpointSubtitle": "Open in external map app", - "worldMeshRefresh": "Refresh", - "worldMeshRefreshing": "Refreshing world mesh data...", - "worldMeshRemoveFromFavorites": "Remove from favorites", - "worldMeshRemovedFromFavorites": "Removed from favorites", - "worldMeshRetry": "Retry", - "worldMeshRfLinkBudget": "RF Link Budget", - "worldMeshRfLinkBudgetClipboard": "RF Link Budget (free-space path loss)\nDistance: {distance}\nFrequency: {frequency}\nPath Loss: {pathLoss}\nLink Margin: {linkMargin}", - "worldMeshScrollForMore": "Scroll for more...", - "worldMeshSearchHint": "Find a node", - "worldMeshSearchResultCount": "{count} results", - "worldMeshSectionDevice": "Device", - "worldMeshSectionDeviceMetrics": "Device Metrics", - "worldMeshSectionEnvironment": "Environment", - "worldMeshSectionNeighbors": "Neighbors ({count})", - "worldMeshSectionPosition": "Position", - "worldMeshSectionSeenBy": "Seen By ({count} gateways)", - "worldMeshStatsFiltered": "filtered", - "worldMeshStatsTotal": "total", - "worldMeshStatsVisible": "visible", - "worldMeshSwapAB": "Swap A ↔ B", - "worldMeshSwapSubtitle": "Reverse measurement direction", - "worldMeshTimeHoursAgo": "{hours}h ago", - "worldMeshTimeJustNow": "just now", - "worldMeshTimeMinutesAgo": "{minutes}m ago", - "worldMeshTitle": "World Map", - "worldMeshUptimeLabel": "Uptime: {uptime}", - "deepLinkLoadingSignal": "Loading Signal", - "deepLinkErrorLoadingSignal": "Error loading signal: {error}", - "deepLinkSignalNotFound": "Signal not found", - "deepLinkLoadingFlight": "Loading Flight", - "deepLinkErrorLoadingFlight": "Error loading flight: {error}", - "deepLinkFlightNotFound": "Flight not found", - "deepLinkImportChannel": "Import Channel", - "deepLinkErrorLoadingChannel": "Error loading channel: {error}", - "deepLinkChannelNotAvailable": "Channel not available", - "deepLinkChannelNotAvailableDescription": "You may not have access to this channel,\nor the owner needs to re-share it.", - "deepLinkJoinChannel": "Join Channel", - "deepLinkJoiningChannel": "Joining channel...", - "deepLinkInviteExpired": "This invite has expired", - "deepLinkInviteRevoked": "This invite has been revoked", - "deepLinkInviteUsageLimitReached": "This invite has reached its usage limit", - "deepLinkInviteLinkInvalid": "Invalid invite link", - "deepLinkChannelNoLongerExists": "This channel no longer exists", - "deepLinkInviteNotFound": "Invite not found", - "deepLinkPleaseSignIn": "Please sign in to join", - "deepLinkFailedToJoinChannel": "Failed to join channel", - "deepLinkLoadingWidget": "Loading Widget", - "deepLinkErrorLoadingWidget": "Error loading widget: {error}", - "deepLinkSomethingWentWrong": "Something went wrong", + "worldMeshMeasureTapA": "Нажмите на узел или карту для точки A", + "worldMeshMeasureTapB": "Нажмите на узел или карту для точки B", + "worldMeshMeasurementActions": "Действия с измерением", + "worldMeshMeasurementCopied": "Измерение скопировано в буфер обмена", + "worldMeshMoreGateways": " +{count} ещё", + "worldMeshNewMeasurement": "Новое измерение", + "worldMeshNodeIdCopied": "ID узла скопирован", + "worldMeshOpenMidpointInMaps": "Открыть середину в картах", + "worldMeshOpenMidpointSubtitle": "Открыть во внешнем картографическом приложении", + "worldMeshRefresh": "Обновить", + "worldMeshRefreshing": "Обновление данных мировой сети Mesh...", + "worldMeshRemoveFromFavorites": "Удалить из избранного", + "worldMeshRemovedFromFavorites": "Удалено из избранного", + "worldMeshRetry": "Повторить", + "worldMeshRfLinkBudget": "Энергетический бюджет RF", + "worldMeshRfLinkBudgetClipboard": "Энергетический бюджет RF (потери в свободном пространстве)\nРасстояние: {distance}\nЧастота: {frequency}\nПотери пути: {pathLoss}\nЗапас линии: {linkMargin}", + "worldMeshScrollForMore": "Прокрутите для просмотра...", + "worldMeshSearchHint": "Найти узел", + "worldMeshSearchResultCount": "{count} результатов", + "worldMeshSectionDevice": "Устройство", + "worldMeshSectionDeviceMetrics": "Метрики устройства", + "worldMeshSectionEnvironment": "Окружающая среда", + "worldMeshSectionNeighbors": "Соседи ({count})", + "worldMeshSectionPosition": "Позиция", + "worldMeshSectionSeenBy": "Обнаружен ({count} шлюзами)", + "worldMeshStatsFiltered": "отфильтровано", + "worldMeshStatsTotal": "всего", + "worldMeshStatsVisible": "видимых", + "worldMeshSwapAB": "Поменять A ↔ B", + "worldMeshSwapSubtitle": "Изменить направление измерения на обратное", + "worldMeshTimeHoursAgo": "{hours} ч назад", + "worldMeshTimeJustNow": "только что", + "worldMeshTimeMinutesAgo": "{minutes} мин назад", + "worldMeshTitle": "Мировая карта", + "worldMeshUptimeLabel": "Время работы: {uptime}", + "deepLinkLoadingSignal": "Загрузка сигнала", + "deepLinkErrorLoadingSignal": "Ошибка загрузки сигнала: {error}", + "deepLinkSignalNotFound": "Сигнал не найден", + "deepLinkLoadingFlight": "Загрузка рейса", + "deepLinkErrorLoadingFlight": "Ошибка загрузки рейса: {error}", + "deepLinkFlightNotFound": "Рейс не найден", + "deepLinkImportChannel": "Импортировать канал", + "deepLinkErrorLoadingChannel": "Ошибка загрузки канала: {error}", + "deepLinkChannelNotAvailable": "Канал недоступен", + "deepLinkChannelNotAvailableDescription": "Возможно, у вас нет доступа к этому каналу,\nили владелец должен поделиться им повторно.", + "deepLinkJoinChannel": "Присоединиться к каналу", + "deepLinkJoiningChannel": "Присоединение к каналу...", + "deepLinkInviteExpired": "Срок действия этого приглашения истёк", + "deepLinkInviteRevoked": "Это приглашение было отозвано", + "deepLinkInviteUsageLimitReached": "Это приглашение достигло лимита использования", + "deepLinkInviteLinkInvalid": "Недействительная ссылка приглашения", + "deepLinkChannelNoLongerExists": "Этот канал больше не существует", + "deepLinkInviteNotFound": "Приглашение не найдено", + "deepLinkPleaseSignIn": "Пожалуйста, войдите, чтобы присоединиться", + "deepLinkFailedToJoinChannel": "Не удалось присоединиться к каналу", + "deepLinkLoadingWidget": "Загрузка виджета", + "deepLinkErrorLoadingWidget": "Ошибка загрузки виджета: {error}", + "deepLinkSomethingWentWrong": "Что-то пошло не так", "deepLinkProfileTitle": "@{displayName}", - "deepLinkCloudServicesNotAvailable": "Cloud services not available yet", - "deepLinkErrorLookingUpUser": "Error looking up user: {error}", - "deepLinkUserNotFound": "User \"@{displayName}\" not found", - "blockedRouteDeviceRequired": "Device Required", - "blockedRouteConnectDevice": "Connect device to access this screen", - "blockedRouteDeviceReset": "Device Reset", - "blockedRouteDeviceNotConnected": "Device Not Connected", - "blockedRouteDeviceResetDescription": "Your device was factory reset or replaced.\n\nGo to Settings → Bluetooth, forget the Meshtastic device, then scan again.", - "blockedRouteScanForDevices": "Scan for Devices", - "blockedRouteConnectDeviceButton": "Connect Device", - "deepLinkWidgetNotFound": "Widget not found", - "deepLinkAlreadyHaveChannel": "You already have this channel", - "transformableTextDeleteTitle": "Delete text?", - "transformableTextDeleteMessage": "This will remove the text overlay.", - "transformableTextDeleteConfirm": "Delete", - "transformableTextDone": "Done", - "transformableTextHint": "Type something...", - "qrSharePreparingLink": "Preparing share link...", - "qrShareSharing": "Sharing...", - "qrShareShareLink": "Share Link", - "qrShareCopyLink": "Copy Link", - "qrShareFailedToShare": "Failed to share: {error}", - "qrShareLinkCopied": "Link copied to clipboard", - "legalDocumentTermsOfService": "Terms of Service", - "legalDocumentPrivacyPolicy": "Privacy Policy", - "legalDocumentHelpAndSupport": "Help & Support", - "legalDocumentDocumentation": "Documentation", + "deepLinkCloudServicesNotAvailable": "Облачные сервисы пока недоступны", + "deepLinkErrorLookingUpUser": "Ошибка поиска пользователя: {error}", + "deepLinkUserNotFound": "Пользователь \"@{displayName}\" не найден", + "blockedRouteDeviceRequired": "Требуется устройство", + "blockedRouteConnectDevice": "Подключите устройство для доступа к этому экрану", + "blockedRouteDeviceReset": "Устройство сброшено", + "blockedRouteDeviceNotConnected": "Устройство не подключено", + "blockedRouteDeviceResetDescription": "Ваше устройство было сброшено до заводских настроек или заменено.\n\nПерейдите в Настройки → Bluetooth и удалите устройство", + "blockedRouteScanForDevices": "Сканировать устройства", + "blockedRouteConnectDeviceButton": "Подключить устройство", + "deepLinkWidgetNotFound": "Виджет не найден", + "deepLinkAlreadyHaveChannel": "У вас уже есть этот канал", + "transformableTextDeleteTitle": "Удалить текст?", + "transformableTextDeleteMessage": "Это удалит текстовый оверлей.", + "transformableTextDeleteConfirm": "Удалить", + "transformableTextDone": "Готово", + "transformableTextHint": "Введите что-нибудь...", + "qrSharePreparingLink": "Подготовка ссылки для шаринга...", + "qrShareSharing": "Отправка...", + "qrShareShareLink": "Поделиться ссылкой", + "qrShareCopyLink": "Копировать ссылку", + "qrShareFailedToShare": "Не удалось поделиться: {error}", + "qrShareLinkCopied": "Ссылка скопирована в буфер обмена", + "legalDocumentTermsOfService": "Условия использования", + "legalDocumentPrivacyPolicy": "Политика конфиденциальности", + "legalDocumentHelpAndSupport": "Помощь и поддержка", + "legalDocumentDocumentation": "Документация", "legalDocumentFaq": "FAQ", - "legalDocumentDeleteAccount": "Delete Account", - "legalDocumentUnableToLoad": "Unable to load page", - "legalDocumentRequiresInternet": "This content requires an internet connection. Please check your connection and try again.", - "legalDocumentGoBack": "Go back", - "legalDocumentRefresh": "Refresh", - "channelKeyEncryptionKey": "Encryption Key", - "channelKeyEnterBase64": "Enter base64-encoded key", - "channelKeyBase64Encoded": "Base64 encoded", - "channelKeyHint": "e.g., AQ== or AAAAAAAAAAAAAAAAAAAAAA==", - "channelKeyNoKeySet": "(no key set)", - "channelKeyHide": "Hide", - "channelKeyShow": "Show", - "channelKeyEdit": "Edit", - "channelKeyGenerate": "Generate", - "channelKeyNewGenerated": "New key generated", - "channelKeyCopy": "Copy", - "channelKeyCopied": "Key copied to clipboard", - "remoteAdminTitle": "Remote Administration", - "remoteAdminSearchHint": "Search nodes...", - "remoteAdminConnectedDevice": "Connected Device", - "remoteAdminLocalVia": "Local (via BLE/USB)", - "remoteAdminPkiEnabledNodes": "PKI-ENABLED NODES", - "remoteAdminNodesAvailable": "{count} available", - "remoteAdminRequiresPki": "Remote admin requires the target node to have your public key in its Admin Keys.", - "remoteAdminNoNodes": "No PKI-enabled nodes available", - "remoteAdminNoMatchingNodes": "No nodes match \"{query}\"", - "remoteAdminNodesNeedPki": "Nodes need PKI encryption enabled\nto accept remote admin commands", - "remoteAdminPkiEnabled": "• PKI enabled", - "contentModerationNotAllowedTitle": "Content Not Allowed", - "contentModerationMayViolateTitle": "Content May Violate Guidelines", - "contentModerationBlockedMessage": "Your content violates our Community Guidelines and cannot be posted.", - "contentModerationWarningMessage": "Your content may violate our Community Guidelines. Please review before posting.", - "contentModerationIssuesDetected": "Issues Detected", - "contentModerationRepeatedViolations": "Repeated violations may result in account restrictions.", - "contentModerationPostingViolations": "Posting content that violates our guidelines may result in content removal and account warnings.", - "contentModerationEditContent": "Edit Content", - "contentModerationPostAnyway": "Post Anyway", - "contentModerationSexualContent": "Sexual Content", - "contentModerationHateSpeech": "Hate Speech", - "contentModerationViolence": "Violence", - "contentModerationProfanity": "Profanity", - "contentModerationHarassment": "Harassment", - "contentModerationSpam": "Spam", - "contentModerationIllegalActivity": "Illegal Activity", - "contentModerationSelfHarm": "Self-Harm", - "contentModerationAdultContent": "Adult Content", - "contentModerationSuggestiveContent": "Suggestive Content", - "contentModerationRemovedWithReason": "Content removed — {reason}", - "contentModerationRemovedGeneric": "Content removed — your content violated our Community Guidelines.", - "contentModerationLearnMore": "Learn More", - "devicePrivacyLocationSharing": "Device Location Sharing", - "devicePrivacySharingEnabled": "This device is configured to share its GPS location.", - "devicePrivacySharingDisabled": "This device does not share GPS location data.", - "devicePrivacyWhatThisMeans": "What This Means", - "devicePrivacyPublicVisibility": "Public Visibility", - "devicePrivacyPublicDescription": "Device location will be visible to all users on the mesh network and in the app's World Map.", - "devicePrivacyFollowerAccess": "Follower Access", - "devicePrivacyFollowerDescription": "Your followers will see this device's real-time position updates.", - "devicePrivacyUpdateFrequency": "Update Frequency", - "devicePrivacyUpdateFrequencyDescription": "Location updates every {seconds} seconds.", - "devicePrivacyPrivacyDependsNote": "Your location privacy depends on this device's Meshtastic configuration. To change sharing settings, update the device's Position Config.", - "devicePrivacyPrivacyProtected": "This device has location sharing disabled. Your privacy is protected.", - "devicePrivacyLinkDeviceLocationShared": "Link Device (Location Shared)", - "devicePrivacyLinkDevice": "Link Device", - "dateTimePickerMonthJanuary": "January", - "dateTimePickerMonthFebruary": "February", - "dateTimePickerMonthMarch": "March", - "dateTimePickerMonthApril": "April", - "dateTimePickerMonthMay": "May", - "dateTimePickerMonthJune": "June", - "dateTimePickerMonthJuly": "July", - "dateTimePickerMonthAugust": "August", - "dateTimePickerMonthSeptember": "September", - "dateTimePickerMonthOctober": "October", - "dateTimePickerMonthNovember": "November", - "dateTimePickerMonthDecember": "December", - "dateTimePickerMonthJan": "Jan", - "dateTimePickerMonthFeb": "Feb", - "dateTimePickerMonthMar": "Mar", - "dateTimePickerMonthApr": "Apr", - "dateTimePickerMonthMayShort": "May", - "dateTimePickerMonthJun": "Jun", - "dateTimePickerMonthJul": "Jul", - "dateTimePickerMonthAug": "Aug", - "dateTimePickerMonthSep": "Sep", - "dateTimePickerMonthOct": "Oct", - "dateTimePickerMonthNov": "Nov", - "dateTimePickerMonthDec": "Dec", - "dateTimePickerDateSection": "Date", - "dateTimePickerTimeSection": "Time", - "dateTimePickerAm": "AM", - "dateTimePickerPm": "PM", - "actionConnect": "Connect", - "actionView": "View", - "albumRarityPageTitle": "{rarity} Cards", - "actionSheetQuickMessage": "Quick Message", - "actionSheetTo": "TO", - "actionSheetAllNodes": "All Nodes", - "actionSheetBroadcastToAll": "Broadcast to all nodes", - "actionSheetBroadcastToEveryone": "Broadcast to everyone on channel", - "actionSheetSendTo": "Send to", - "actionSheetQuickMessageLabel": "QUICK MESSAGE", - "actionSheetOrTypeCustom": "OR TYPE CUSTOM", - "actionSheetTypeMessage": "Type a message...", - "actionSheetBroadcast": "Broadcast", - "actionSheetSend": "Send", - "actionSheetSentTo": "Sent to {target}", - "actionSheetSendFailed": "Failed to send: {error}", - "actionSheetPresetOnMyWay": "On my way", - "actionSheetPresetRunningLate": "Running late", - "actionSheetPresetCheckInOk": "Check in OK", - "actionSheetPresetNeedAssistance": "Need assistance", - "actionSheetPresetAtDestination": "At destination", - "actionSheetPresetWeatherAlert": "Weather alert", - "actionSheetEmergencySos": "Emergency SOS", - "actionSheetThisWill": "This will:", - "actionSheetSosBroadcast": "Broadcast an emergency message to ALL nodes", - "actionSheetSosLocation": "Include your current location if available", - "actionSheetSosIfttt": "Trigger IFTTT webhook (if configured)", - "actionSheetSosReady": "Ready to send emergency alert", - "actionSheetSosCountdown": "Please wait {seconds} seconds...", - "actionSheetSendSos": "Send SOS", - "actionSheetSosSent": "Emergency SOS sent to all nodes", - "actionSheetSosFailed": "Failed to send SOS: {error}", - "actionSheetTraceroute": "Traceroute", - "actionSheetTracerouteTo": "Traceroute to", - "actionSheetTracerouteInfo": "Traceroute discovers the path packets take to reach a node through the mesh network.", - "actionSheetTargetNode": "TARGET NODE", - "actionSheetSelected": "Selected", - "actionSheetTapToSelectNode": "Tap to select a node", - "actionSheetTrace": "Trace", - "actionSheetTracerouteSent": "Traceroute sent to {target} — check Traceroute History for results", - "actionSheetTracerouteFailed": "Failed to send traceroute: {error}", - "premiumPreviewAutomations": "Preview Mode — Upgrade to create automations", - "premiumPreviewIfttt": "Preview Mode — Upgrade to connect services", - "premiumPreviewWidgets": "Preview Mode — Upgrade to build widgets", - "premiumPreviewRingtones": "Preview Mode — Upgrade to access full library", - "premiumPreviewThemes": "Preview Mode — Upgrade to unlock all colors", - "premiumUpgrade": "Upgrade", - "premiumExample": "Example", - "premiumUnlockFeature": "Unlock Feature", - "premiumNotNow": "Not now", - "premiumRestorePurchases": "Restore Purchases", - "premiumOneTimePurchase": "One-time purchase • Yours forever", - "premiumUnlockFor": "Unlock for {price}", - "premiumPurchaseRequiresInternet": "Purchases require an internet connection.", - "premiumPurchaseUnlocked": "{name} unlocked!", - "premiumPurchaseFailed": "Purchase failed. Please try again.", - "premiumPurchaseError": "Something went wrong. Please try again.", - "premiumRestoreRequiresInternet": "Restoring purchases requires an internet connection.", - "premiumRestoreSuccess": "Purchases restored!", - "premiumRestoreNone": "No purchases found to restore", - "premiumRestoreFailed": "Failed to restore purchases", - "premiumConfigSaved": "Your configuration is saved. After purchase, just tap save again.", - "premiumHeadlineAutomations": "Automate Your Mesh", - "premiumHeadlineIfttt": "Connect Everything", - "premiumHeadlineThemes": "Make It Yours", - "premiumHeadlineRingtones": "Sound Library", - "premiumHeadlineWidgets": "Your Dashboard", - "premiumHeadlineWidgetsAlt": "Build Your Dashboard", - "premiumHeadlineRingtonesAlt": "Unlock Sound Library", - "premiumSubtitleAutomations": "Save this automation and unlock the full power of automatic alerts, messages, and smart triggers.", - "premiumSubtitleIfttt": "Connect your mesh network to hundreds of apps and services.", - "premiumSubtitleThemes": "Express yourself with 12 stunning accent colors.", - "premiumSubtitleRingtones": "Access a massive library of notification sounds.", - "premiumSubtitleWidgets": "Build custom dashboards with live data visualizations.", - "premiumDescAutomations": "Create powerful automations that trigger alerts, send messages, and react to mesh events automatically.", - "premiumDescIfttt": "Connect your mesh network to 700+ apps and services via IFTTT webhooks.", - "premiumDescWidgets": "Build custom dashboard widgets with live data, charts, and real-time monitoring.", - "premiumDescRingtones": "Access 7,000+ ringtones from classic tunes to TV themes and movie soundtracks.", - "premiumDescThemes": "Personalize your app with 12 stunning accent colors.", - "premiumBenefitUnlimitedAutomations": "Unlimited Automations", - "premiumBenefitUnlimitedAutomationsDesc": "Create as many rules as you need", - "premiumBenefitSmartNotifications": "Smart Notifications", - "premiumBenefitSmartNotificationsDesc": "Get alerts for battery, offline nodes, and more", - "premiumBenefitScheduledActions": "Scheduled Actions", - "premiumBenefitScheduledActionsDesc": "Run automations at specific times", - "premiumBenefitScheduledActionsShort": "Run at specific times", - "premiumBenefitGeofenceTriggers": "Geofence Triggers", - "premiumBenefitGeofenceTriggersDesc": "React when nodes enter or exit areas", - "premiumBenefitGeofenceTriggersShort": "React to location events", - "premiumBenefitConnect700": "Connect 700+ Services", - "premiumBenefitConnect700Desc": "Smart home, notifications, spreadsheets & more", - "premiumBenefitSmartHome": "Smart Home", - "premiumBenefitSmartHomeDesc": "Control lights, locks, and devices", - "premiumBenefitSmartHomeControl": "Smart Home Control", - "premiumBenefitSmartHomeControlDesc": "Trigger lights, locks, and devices", - "premiumBenefitCrossPlatform": "Cross-Platform", - "premiumBenefitCrossPlatformDesc": "Slack, Discord, email alerts", - "premiumBenefitCrossPlatformAlerts": "Cross-Platform Alerts", - "premiumBenefitCrossPlatformAlertsDesc": "Send to Slack, Discord, email, and more", - "premiumBenefitLogging": "Logging", - "premiumBenefitLoggingDesc": "Save events to spreadsheets", - "premiumBenefit12Colors": "12 Premium Colors", - "premiumBenefit12ColorsDesc": "Personalize every screen and button", - "premiumBenefit15Colors": "15 Colors", - "premiumBenefit15ColorsDesc": "Premium accent options", - "premiumBenefitExclusiveStyles": "Exclusive Styles", - "premiumBenefitExclusiveStylesDesc": "Unique accent combinations", - "premiumBenefitExclusive": "Exclusive", - "premiumBenefitExclusiveDesc": "Unique combinations", - "premiumBenefit7000Ringtones": "7,000+ Ringtones", - "premiumBenefit7000RingtonesDesc": "Classic melodies, TV themes, games & more", - "premiumBenefit10000Tones": "10,000+ Tones", - "premiumBenefit10000TonesDesc": "Massive searchable library", - "premiumBenefitSearchableLibrary": "Searchable Library", - "premiumBenefitSearchableLibraryDesc": "Find any tune instantly", - "premiumBenefitEasySearch": "Easy Search", - "premiumBenefitEasySearchDesc": "Find any tune instantly", - "premiumBenefitCustomPresets": "Custom Presets", - "premiumBenefitCustomPresetsDesc": "Save your favorites", - "premiumBenefitCustomDashboards": "Custom Dashboards", - "premiumBenefitCustomDashboardsDesc": "Build your own widget layouts", - "premiumBenefitLiveCharts": "Live Charts & Gauges", - "premiumBenefitLiveChartsDesc": "Visualize telemetry in real-time", - "premiumBenefitLiveChartsAlt": "Live Charts", - "premiumBenefitLiveChartsAltDesc": "Real-time data visualization", - "premiumBenefitBatterySensors": "Battery & Sensors", - "premiumBenefitBatterySensorsDesc": "Monitor everything at a glance", - "premiumBenefitMonitoring": "Monitoring", - "premiumBenefitMonitoringDesc": "Battery, sensors, telemetry", - "premiumBenefitCustomLayouts": "Custom Layouts", - "premiumBenefitCustomLayoutsDesc": "Build your own views", - "premiumBenefitSmartAlerts": "Smart Alerts", - "premiumBenefitSmartAlertsDesc": "Battery low, node offline, and more", - "settingsPremiumFeatureRequired": "This feature requires a purchase", - "settingsPremiumViewUpgrades": "View Upgrades", + "legalDocumentDeleteAccount": "Удалить аккаунт", + "legalDocumentUnableToLoad": "Не удалось загрузить страницу", + "legalDocumentRequiresInternet": "Для этого содержимого требуется подключение к Интернету. Проверьте подключение и попробуйте снова.", + "legalDocumentGoBack": "Назад", + "legalDocumentRefresh": "Обновить", + "channelKeyEncryptionKey": "Ключ шифрования", + "channelKeyEnterBase64": "Введите ключ в кодировке base64", + "channelKeyBase64Encoded": "Кодировка base64", + "channelKeyHint": "Например: AQ== или AAAAAAAAAAAAAAAAAAAAAA==", + "channelKeyNoKeySet": "(ключ не задан)", + "channelKeyHide": "Скрыть", + "channelKeyShow": "Показать", + "channelKeyEdit": "Изменить", + "channelKeyGenerate": "Сгенерировать", + "channelKeyNewGenerated": "Новый ключ сгенерирован", + "channelKeyCopy": "Копировать", + "channelKeyCopied": "Ключ скопирован в буфер обмена", + "remoteAdminTitle": "Удалённое администрирование", + "remoteAdminSearchHint": "Поиск узлов...", + "remoteAdminConnectedDevice": "Подключённое устройство", + "remoteAdminLocalVia": "Локально (через BLE/USB)", + "remoteAdminPkiEnabledNodes": "УЗЛЫ С PKI", + "remoteAdminNodesAvailable": "{count} доступно", + "remoteAdminRequiresPki": "Для удалённого администрирования целевой узел должен иметь ваш публичный ключ в списке Admin Keys.", + "remoteAdminNoNodes": "Нет узлов с включённым PKI", + "remoteAdminNoMatchingNodes": "Нет узлов, соответствующих запросу \"{query}\"", + "remoteAdminNodesNeedPki": "Узлам требуется включённое PKI-шифрование\nдля принятия команд удалённого администрирования", + "remoteAdminPkiEnabled": "• PKI включено", + "contentModerationNotAllowedTitle": "Контент не разрешён", + "contentModerationMayViolateTitle": "Контент может нарушать правила", + "contentModerationBlockedMessage": "Ваш контент нарушает наши Правила сообщества и не может быть опубликован.", + "contentModerationWarningMessage": "Ваш контент может нарушать наши Правила сообщества. Пожалуйста, проверьте перед публикацией.", + "contentModerationIssuesDetected": "Обнаружены нарушения", + "contentModerationRepeatedViolations": "Повторные нарушения могут привести к ограничению аккаунта.", + "contentModerationPostingViolations": "Публикация контента, нарушающего наши правила, может привести к удалению контента и ограничениям аккаунта.", + "contentModerationEditContent": "Редактировать контент", + "contentModerationPostAnyway": "Опубликовать всё равно", + "contentModerationSexualContent": "Сексуальный контент", + "contentModerationHateSpeech": "Разжигание ненависти", + "contentModerationViolence": "Насилие", + "contentModerationProfanity": "Нецензурная лексика", + "contentModerationHarassment": "Преследование", + "contentModerationSpam": "Спам", + "contentModerationIllegalActivity": "Незаконная деятельность", + "contentModerationSelfHarm": "Причинение вреда себе", + "contentModerationAdultContent": "Контент для взрослых", + "contentModerationSuggestiveContent": "Провокационный контент", + "contentModerationRemovedWithReason": "Контент удалён — {reason}", + "contentModerationRemovedGeneric": "Контент удалён — ваш контент нарушил Правила сообщества.", + "contentModerationLearnMore": "Подробнее", + "devicePrivacyLocationSharing": "Передача геолокации устройства", + "devicePrivacySharingEnabled": "Устройство настроено на передачу своей GPS-позиции.", + "devicePrivacySharingDisabled": "Это устройство не передаёт данные GPS-позиции.", + "devicePrivacyWhatThisMeans": "Что это означает", + "devicePrivacyPublicVisibility": "Публичная видимость", + "devicePrivacyPublicDescription": "Местоположение устройства будет видно всем пользователям сети и на карте мира в приложении.", + "devicePrivacyFollowerAccess": "Доступ подписчиков", + "devicePrivacyFollowerDescription": "Ваши подписчики будут видеть обновления позиции этого устройства в реальном времени.", + "devicePrivacyUpdateFrequency": "Частота обновления", + "devicePrivacyUpdateFrequencyDescription": "Обновление местоположения каждые {seconds} секунд.", + "devicePrivacyPrivacyDependsNote": "Конфиденциальность вашего местоположения зависит от конфигурации Meshtastic на этом устройстве. Чтобы изменить настройки передачи данных, обновите конфигурацию позиции устройства.", + "devicePrivacyPrivacyProtected": "Это устройство отключило передачу геолокации. Ваша конфиденциальность защищена.", + "devicePrivacyLinkDeviceLocationShared": "Привязать устройство (геолокация передаётся)", + "devicePrivacyLinkDevice": "Привязать устройство", + "dateTimePickerMonthJanuary": "Январь", + "dateTimePickerMonthFebruary": "Февраль", + "dateTimePickerMonthMarch": "Март", + "dateTimePickerMonthApril": "Апрель", + "dateTimePickerMonthMay": "Май", + "dateTimePickerMonthJune": "Июнь", + "dateTimePickerMonthJuly": "Июль", + "dateTimePickerMonthAugust": "Август", + "dateTimePickerMonthSeptember": "Сентябрь", + "dateTimePickerMonthOctober": "Октябрь", + "dateTimePickerMonthNovember": "Ноябрь", + "dateTimePickerMonthDecember": "Декабрь", + "dateTimePickerMonthJan": "Янв", + "dateTimePickerMonthFeb": "Фев", + "dateTimePickerMonthMar": "Мар", + "dateTimePickerMonthApr": "Апр", + "dateTimePickerMonthMayShort": "Май", + "dateTimePickerMonthJun": "Июн", + "dateTimePickerMonthJul": "Июл", + "dateTimePickerMonthAug": "Авг", + "dateTimePickerMonthSep": "Сен", + "dateTimePickerMonthOct": "Окт", + "dateTimePickerMonthNov": "Ноя", + "dateTimePickerMonthDec": "Дек", + "dateTimePickerDateSection": "Дата", + "dateTimePickerTimeSection": "Время", + "dateTimePickerAm": "ДП", + "dateTimePickerPm": "ПП", + "actionConnect": "Подключить", + "actionView": "Просмотр", + "albumRarityPageTitle": "Карточки {rarity}", + "actionSheetQuickMessage": "Быстрое сообщение", + "actionSheetTo": "КОМУ", + "actionSheetAllNodes": "Все узлы", + "actionSheetBroadcastToAll": "Трансляция всем узлам", + "actionSheetBroadcastToEveryone": "Трансляция всем в канале", + "actionSheetSendTo": "Отправить", + "actionSheetQuickMessageLabel": "БЫСТРОЕ СООБЩЕНИЕ", + "actionSheetOrTypeCustom": "ИЛИ ВВЕДИТЕ СВОЁ", + "actionSheetTypeMessage": "Введите сообщение...", + "actionSheetBroadcast": "Трансляция", + "actionSheetSend": "Отправить", + "actionSheetSentTo": "Отправлено {target}", + "actionSheetSendFailed": "Не удалось отправить: {error}", + "actionSheetPresetOnMyWay": "Уже еду", + "actionSheetPresetRunningLate": "Опаздываю", + "actionSheetPresetCheckInOk": "Всё в порядке", + "actionSheetPresetNeedAssistance": "Нужна помощь", + "actionSheetPresetAtDestination": "На месте", + "actionSheetPresetWeatherAlert": "Погодное предупреждение", + "actionSheetEmergencySos": "Экстренный SOS", + "actionSheetThisWill": "Это действие:", + "actionSheetSosBroadcast": "Транслирует экстренное сообщение ВСЕМ узлам", + "actionSheetSosLocation": "Включает ваше текущее местоположение (если доступно)", + "actionSheetSosIfttt": "Активирует IFTTT webhook (если настроен)", + "actionSheetSosReady": "Готово к отправке экстренного сигнала", + "actionSheetSosCountdown": "Подождите {seconds} секунд...", + "actionSheetSendSos": "Отправить SOS", + "actionSheetSosSent": "Экстренный SOS отправлен всем узлам", + "actionSheetSosFailed": "Не удалось отправить SOS: {error}", + "actionSheetTraceroute": "Трассировка", + "actionSheetTracerouteTo": "Трассировка до", + "actionSheetTracerouteInfo": "Трассировка определяет путь пакетов до узла через сеть Mesh", + "actionSheetTargetNode": "ЦЕЛЕВОЙ УЗЕЛ", + "actionSheetSelected": "Выбран", + "actionSheetTapToSelectNode": "Нажмите для выбора узла", + "actionSheetTrace": "Трассировать", + "actionSheetTracerouteSent": "Трассировка отправлена к {target} — проверьте Историю трассировок для результатов", + "actionSheetTracerouteFailed": "Не удалось выполнить трассировку: {error}", + "premiumPreviewAutomations": "Режим предпросмотра — обновитесь, чтобы создавать автоматизации", + "premiumPreviewIfttt": "Режим предпросмотра — обновитесь, чтобы подключить сервисы", + "premiumPreviewWidgets": "Режим предпросмотра — обновитесь, чтобы создавать виджеты", + "premiumPreviewRingtones": "Режим предпросмотра — обновитесь, чтобы получить доступ к полной библиотеке", + "premiumPreviewThemes": "Режим предпросмотра — обновитесь, чтобы разблокировать все цвета", + "premiumUpgrade": "Обновить", + "premiumExample": "Пример", + "premiumUnlockFeature": "Разблокировать функцию", + "premiumNotNow": "Не сейчас", + "premiumRestorePurchases": "Восстановить покупки", + "premiumOneTimePurchase": "Разовая покупка • Навсегда ваше", + "premiumUnlockFor": "Разблокировать за {price}", + "premiumPurchaseRequiresInternet": "Для покупок требуется подключение к интернету.", + "premiumPurchaseUnlocked": "{name} разблокировано!", + "premiumPurchaseFailed": "Покупка не удалась. Пожалуйста, попробуйте снова.", + "premiumPurchaseError": "Что-то пошло не так. Пожалуйста, попробуйте снова.", + "premiumRestoreRequiresInternet": "Для восстановления покупок требуется подключение к интернету.", + "premiumRestoreSuccess": "Покупки восстановлены!", + "premiumRestoreNone": "Покупок для восстановления не найдено", + "premiumRestoreFailed": "Не удалось восстановить покупки", + "premiumConfigSaved": "Ваша конфигурация сохранена. После покупки просто нажмите «Сохранить» ещё раз.", + "premiumHeadlineAutomations": "Автоматизируйте вашу сеть", + "premiumHeadlineIfttt": "Объедините всё", + "premiumHeadlineThemes": "Сделайте интерфейс своим", + "premiumHeadlineRingtones": "Библиотека звуков", + "premiumHeadlineWidgets": "Ваша Панель", + "premiumHeadlineWidgetsAlt": "Создайте свою Панель", + "premiumHeadlineRingtonesAlt": "Разблокировать библиотеку звуков", + "premiumSubtitleAutomations": "Сохраните эту автоматизацию и раскройте весь потенциал автоматических оповещений, сообщений и умных триггеров.", + "premiumSubtitleIfttt": "Подключите вашу сеть к сотням приложений и сервисов.", + "premiumSubtitleThemes": "Выразите себя с помощью 12 потрясающих акцентных цветов.", + "premiumSubtitleRingtones": "Получите доступ к огромной библиотеке звуков уведомлений.", + "premiumSubtitleWidgets": "Создавайте пользовательские панели с визуализацией данных в реальном времени.", + "premiumDescAutomations": "Создавайте мощные автоматизации, которые запускают оповещения, отправляют сообщения и реагируют на события сети автоматически.", + "premiumDescIfttt": "Подключите вашу сеть к 700+ приложениям и сервисам через вебхуки IFTTT.", + "premiumDescWidgets": "Создавайте пользовательские виджеты панели с актуальными данными, графиками и мониторингом в реальном времени.", + "premiumDescRingtones": "Более 7 000 рингтонов: классические мелодии, темы из сериалов и саундтреки к фильмам.", + "premiumDescThemes": "Персонализируйте приложение с помощью 12 потрясающих акцентных цветов.", + "premiumBenefitUnlimitedAutomations": "Неограниченные автоматизации", + "premiumBenefitUnlimitedAutomationsDesc": "Создавайте столько правил, сколько вам нужно", + "premiumBenefitSmartNotifications": "Умные уведомления", + "premiumBenefitSmartNotificationsDesc": "Получайте оповещения о заряде батареи, узлах не в сети и многом другом", + "premiumBenefitScheduledActions": "Запланированные действия", + "premiumBenefitScheduledActionsDesc": "Запускайте автоматизации в определённое время", + "premiumBenefitScheduledActionsShort": "Запуск в заданное время", + "premiumBenefitGeofenceTriggers": "Геозонные триггеры", + "premiumBenefitGeofenceTriggersDesc": "Реагируйте, когда узлы входят в зону или покидают её", + "premiumBenefitGeofenceTriggersShort": "Реакция на события по местоположению", + "premiumBenefitConnect700": "Подключить 700+ сервисов", + "premiumBenefitConnect700Desc": "Умный дом, уведомления, таблицы и многое другое", + "premiumBenefitSmartHome": "Умный дом", + "premiumBenefitSmartHomeDesc": "Управляйте освещением, замками и устройствами", + "premiumBenefitSmartHomeControl": "Управление умным домом", + "premiumBenefitSmartHomeControlDesc": "Активируйте освещение, замки и устройства", + "premiumBenefitCrossPlatform": "Кросс-платформенность", + "premiumBenefitCrossPlatformDesc": "Оповещения в Slack, Discord, по email", + "premiumBenefitCrossPlatformAlerts": "Кросс-платформенные оповещения", + "premiumBenefitCrossPlatformAlertsDesc": "Отправляйте в Slack, Discord, по email и не только", + "premiumBenefitLogging": "Журналирование", + "premiumBenefitLoggingDesc": "Сохраняйте события в таблицы", + "premiumBenefit12Colors": "12 премиум-цветов", + "premiumBenefit12ColorsDesc": "Персонализируйте каждый экран и кнопку", + "premiumBenefit15Colors": "15 цветов", + "premiumBenefit15ColorsDesc": "Премиум варианты акцентных цветов", + "premiumBenefitExclusiveStyles": "Эксклюзивные стили", + "premiumBenefitExclusiveStylesDesc": "Уникальные акцентные сочетания", + "premiumBenefitExclusive": "Эксклюзивно", + "premiumBenefitExclusiveDesc": "Уникальные сочетания", + "premiumBenefit7000Ringtones": "7 000+ рингтонов", + "premiumBenefit7000RingtonesDesc": "Классические мелодии, темы из сериалов, игры и многое другое", + "premiumBenefit10000Tones": "10 000+ мелодий", + "premiumBenefit10000TonesDesc": "Огромная библиотека с поиском", + "premiumBenefitSearchableLibrary": "Библиотека с поиском", + "premiumBenefitSearchableLibraryDesc": "Найдите любую мелодию мгновенно", + "premiumBenefitEasySearch": "Удобный поиск", + "premiumBenefitEasySearchDesc": "Найдите любую мелодию мгновенно", + "premiumBenefitCustomPresets": "Пользовательские пресеты", + "premiumBenefitCustomPresetsDesc": "Сохраняйте избранное", + "premiumBenefitCustomDashboards": "Пользовательские панели", + "premiumBenefitCustomDashboardsDesc": "Создавайте собственные макеты виджетов", + "premiumBenefitLiveCharts": "Графики и датчики в реальном времени", + "premiumBenefitLiveChartsDesc": "Визуализируйте телеметрию в реальном времени", + "premiumBenefitLiveChartsAlt": "Графики в реальном времени", + "premiumBenefitLiveChartsAltDesc": "Визуализация данных в реальном времени", + "premiumBenefitBatterySensors": "Батарея и датчики", + "premiumBenefitBatterySensorsDesc": "Следите за всем с первого взгляда", + "premiumBenefitMonitoring": "Мониторинг", + "premiumBenefitMonitoringDesc": "Батарея, датчики, телеметрия", + "premiumBenefitCustomLayouts": "Пользовательские макеты", + "premiumBenefitCustomLayoutsDesc": "Создавайте собственные представления", + "premiumBenefitSmartAlerts": "Умные оповещения", + "premiumBenefitSmartAlertsDesc": "Низкий заряд батареи, узел не в сети и многое другое", + "settingsPremiumFeatureRequired": "Для использования этой функции требуется покупка", + "settingsPremiumViewUpgrades": "Посмотреть улучшения", "settingsPremiumPro": "PRO", - "settingsPremiumFeatureTitle": "Premium Feature", - "settingsPremiumFeatureDescription": "This feature requires a purchase to unlock.", - "settingsPremiumUnlockPrice": "Unlock ${price}", - "glyphMatrixTitle": "GLYPH MATRIX", - "glyphMatrixTurnOff": "Turn off", - "glyphMatrixInitializing": "INITIALIZING GLYPH MATRIX...", - "glyphMatrixInitFailed": "INIT FAILED", - "glyphMatrixNotSupported": "DEVICE NOT SUPPORTED", - "glyphMatrixRequiresDevice": "Glyph Matrix requires\nNothing Phone (3)", - "glyphMatrixSwipeToExecute": "← SWIPE TO EXECUTE →", - "batteryOptTitle": "Optimize for {oemName}", - "batteryOptDescription": "Your device manufacturer may aggressively limit background apps. Follow these steps to keep the mesh connection alive:", - "batteryOptOpenSettings": "Open Battery Settings", - "batteryOptDismiss": "Dismiss", - "batteryOptDontShowAgain": "Don't show again", - "batteryOptXiaomiStep1": "Open Settings > Apps > Manage apps > Socialmesh.", - "batteryOptXiaomiStep2": "Tap \"AutoStart\" and enable it.", - "batteryOptXiaomiStep3": "Go back and tap \"Battery saver\".", - "batteryOptXiaomiStep4": "Select \"No restrictions\" for Socialmesh.", - "batteryOptSamsungStep1": "Open Settings > Battery and device care > Battery.", - "batteryOptSamsungStep2": "Tap \"Background usage limits\".", - "batteryOptSamsungStep3": "Remove Socialmesh from the \"Sleeping apps\" and \"Deep sleeping apps\" lists.", - "batteryOptSamsungStep4": "Optionally disable \"Adaptive battery\" for best results.", - "batteryOptHuaweiStep1": "Open Settings > Battery > App launch.", - "batteryOptHuaweiStep2": "Find Socialmesh and set it to \"Manage manually\".", - "batteryOptHuaweiStep3": "Enable all three toggles: Auto-launch, Secondary launch, and Run in background.", - "batteryOptOneplusStep1": "Open Settings > Apps > App management > Socialmesh.", - "batteryOptOneplusStep2": "Enable \"Auto-launch\" and \"Allow activity in background\".", - "batteryOptOneplusStep3": "On OnePlus 14+: also check Settings > Battery > Battery optimization > Socialmesh > \"Don't optimize\".", - "batteryOptGenericStep1": "Open Settings > Apps > Socialmesh > Battery.", - "batteryOptGenericStep2": "Select \"Unrestricted\" or \"Don't optimize\".", - "batteryOptGenericStep3": "This allows Socialmesh to maintain the mesh connection in the background.", - "helpCenterNoResultsPrefix": "No ", - "helpCenterNoResultsKeyword": "results", + "settingsPremiumFeatureTitle": "Премиум-функция", + "settingsPremiumFeatureDescription": "Для разблокировки этой функции требуется покупка.", + "settingsPremiumUnlockPrice": "Разблокировать за ${price}", + "glyphMatrixTitle": "МАТРИЦА ГЛИФОВ", + "glyphMatrixTurnOff": "Выключить", + "glyphMatrixInitializing": "ИНИЦИАЛИЗАЦИЯ МАТРИЦЫ ГЛИФОВ...", + "glyphMatrixInitFailed": "ОШИБКА ИНИЦИАЛИЗАЦИИ", + "glyphMatrixNotSupported": "УСТРОЙСТВО НЕ ПОДДЕРЖИВАЕТСЯ", + "glyphMatrixRequiresDevice": "Матрица глифов требует\nNothing Phone (3)", + "glyphMatrixSwipeToExecute": "← ПРОВЕДИТЕ ДЛЯ ВЫПОЛНЕНИЯ →", + "batteryOptTitle": "Оптимизация для {oemName}", + "batteryOptDescription": "Производитель устройства может агрессивно ограничивать фоновые приложения. Следуйте этим шагам", + "batteryOptOpenSettings": "Открыть настройки батареи", + "batteryOptDismiss": "Закрыть", + "batteryOptDontShowAgain": "Больше не показывать", + "batteryOptXiaomiStep1": "Откройте Настройки > Приложения > Управление приложениями > Socialmesh.", + "batteryOptXiaomiStep2": "Нажмите «Автозапуск» и включите его.", + "batteryOptXiaomiStep3": "Вернитесь назад и нажмите «Экономия батареи».", + "batteryOptXiaomiStep4": "Выберите «Без ограничений» для Socialmesh.", + "batteryOptSamsungStep1": "Откройте Настройки > Обслуживание устройства > Батарея.", + "batteryOptSamsungStep2": "Нажмите «Ограничения использования в фоне».", + "batteryOptSamsungStep3": "Удалите Socialmesh из списков «Спящие приложения» и «Приложения в глубоком сне».", + "batteryOptSamsungStep4": "При желании отключите «Адаптивное питание» для лучших результатов.", + "batteryOptHuaweiStep1": "Откройте Настройки > Батарея > Запуск приложений.", + "batteryOptHuaweiStep2": "Найдите Socialmesh и установите «Управлять вручную».", + "batteryOptHuaweiStep3": "Включите все три переключателя: Автозапуск, Дополнительный запуск и Работа в фоне.", + "batteryOptOneplusStep1": "Откройте Настройки > Приложения > Управление приложениями > Socialmesh.", + "batteryOptOneplusStep2": "Включите «Автозапуск» и «Разрешить активность в фоне».", + "batteryOptOneplusStep3": "На OnePlus 14+: также проверьте Настройки > Батарея > Оптимизация батареи > Socialmesh.", + "batteryOptGenericStep1": "Откройте Настройки > Приложения > Socialmesh > Батарея.", + "batteryOptGenericStep2": "Выберите «Без ограничений» или «Не оптимизировать».", + "batteryOptGenericStep3": "Это позволит Socialmesh поддерживать соединение с сетью Mesh в фоновом режиме.", + "helpCenterNoResultsPrefix": "Ничего ", + "helpCenterNoResultsKeyword": "не найдено", "helpCenterNoResultsSuffix": " found", - "helpCenterReadingTime": "{minutes} min", - "helpCenterMoreTours": "+ {count} more tours", - "helpCenterStepsCount": "{count} steps", - "storeForwardTitle": "Store & Forward", - "storeForwardSaveSuccess": "Store & Forward configuration saved", - "storeForwardLoadFailed": "Failed to load config", - "storeForwardSaveFailed": "Failed to save config: {error}", - "storeForwardSave": "Save", - "storeForwardModuleSettings": "Module Settings", - "storeForwardServerSettings": "Server Settings", - "storeForwardInfoDescription": "Allows nodes to store messages and forward them to devices that were offline. A \"server\" node stores messages, while \"client\" nodes can request missed messages.", - "storeForwardEnable": "Enable Store & Forward", - "storeForwardEnableSubtitle": "Participate in the S&F network", - "storeForwardActAsServer": "Act as Server", - "storeForwardActAsServerSubtitle": "Store messages for other nodes (uses more RAM)", - "storeForwardHeartbeat": "Heartbeat", - "storeForwardHeartbeatSubtitle": "Send periodic announcements to the mesh", - "storeForwardRecordsLimit": "Records Limit", - "storeForwardRecordsLimitSubtitle": "Use device default", - "storeForwardAuto": "Auto", - "storeForwardHistoryReturnMax": "History Return Max", - "storeForwardHistoryReturnMaxSubtitle": "Max {count} messages per request", - "storeForwardHistoryWindow": "History Window", - "storeForwardHistoryWindowSubtitle": "Keep messages for {hours} hours", - "geofenceTitle": "Set Geofence", - "geofenceDone": "Done", - "geofencePermissionDenied": "Location permission denied. Grant location access to set geofence center.", - "geofenceOpenSettings": "Open Settings", - "geofenceLocationFailed": "Failed to get location: {error}", - "geofenceTapToSet": "Please tap on the map to set a geofence center", - "geofenceTapToSetCenter": "Tap to set geofence center", - "geofenceDragToAdjust": "Drag the circle edge to adjust radius", - "geofenceNodesCount": "{count} nodes", - "geofenceMonitoredNode": "Monitored Node", - "geofenceRadius": "Radius", - "geofenceRadiusKm": "Radius: {value} km", - "geofenceRadiusM": "Radius: {value} m", - "subscriptionFallbackRingtonePack": "Ringtone Pack", - "subscriptionFallbackThemePack": "Theme Pack", - "subscriptionFallbackWidgetPack": "Widget Pack", - "subscriptionFallbackAutomations": "Automations", + "helpCenterReadingTime": "{minutes} мин", + "helpCenterMoreTours": "+ ещё {count} туров", + "helpCenterStepsCount": "{count} шагов", + "storeForwardTitle": "Сохранение и пересылка", + "storeForwardSaveSuccess": "Конфигурация сохранения и пересылки сохранена", + "storeForwardLoadFailed": "Не удалось загрузить конфигурацию", + "storeForwardSaveFailed": "Не удалось сохранить конфигурацию: {error}", + "storeForwardSave": "Сохранить", + "storeForwardModuleSettings": "Настройки модуля", + "storeForwardServerSettings": "Настройки сервера", + "storeForwardInfoDescription": "Позволяет узлам хранить сообщения и пересылать их устройствам, которые были офлайн. Требуется достаточно памяти.", + "storeForwardEnable": "Включить сохранение и пересылку", + "storeForwardEnableSubtitle": "Участвовать в сети S&F", + "storeForwardActAsServer": "Работать как сервер", + "storeForwardActAsServerSubtitle": "Хранить сообщения для других узлов (использует больше ОЗУ)", + "storeForwardHeartbeat": "Пульс", + "storeForwardHeartbeatSubtitle": "Отправлять периодические объявления в сеть Mesh", + "storeForwardRecordsLimit": "Лимит записей", + "storeForwardRecordsLimitSubtitle": "Использовать настройки устройства по умолчанию", + "storeForwardAuto": "Авто", + "storeForwardHistoryReturnMax": "Максимум возвращаемой истории", + "storeForwardHistoryReturnMaxSubtitle": "Не более {count} сообщений на запрос", + "storeForwardHistoryWindow": "Окно истории", + "storeForwardHistoryWindowSubtitle": "Хранить сообщения {hours} часов", + "geofenceTitle": "Задать геозону", + "geofenceDone": "Готово", + "geofencePermissionDenied": "Доступ к местоположению запрещён. Разрешите доступ, чтобы задать центр геозоны.", + "geofenceOpenSettings": "Открыть настройки", + "geofenceLocationFailed": "Не удалось получить местоположение: {error}", + "geofenceTapToSet": "Нажмите на карту, чтобы задать центр геозоны", + "geofenceTapToSetCenter": "Нажмите для задания центра геозоны", + "geofenceDragToAdjust": "Перетащите край круга для изменения радиуса", + "geofenceNodesCount": "{count} узлов", + "geofenceMonitoredNode": "Отслеживаемый узел", + "geofenceRadius": "Радиус", + "geofenceRadiusKm": "Радиус: {value} км", + "geofenceRadiusM": "Радиус: {value} м", + "subscriptionFallbackRingtonePack": "Набор рингтонов", + "subscriptionFallbackThemePack": "Набор тем", + "subscriptionFallbackWidgetPack": "Набор виджетов", + "subscriptionFallbackAutomations": "Автоматизации", "subscriptionFallbackIfttt": "IFTTT", - "geofenceLocating": "Locating...", - "geofenceUseMyLocation": "Use My Location", - "geofenceSetGeofence": "Set Geofence", - "geofenceSelectNode": "Select Node", - "geofenceNoNodesWithGps": "No nodes with GPS", - "geofenceYou": "YOU", - "geofenceMonitored": "Monitored", - "geofenceMonitor": "Monitor", - "restorePurchasesTitle": "Restore Purchases", - "restorePurchasesRequiresInternet": "Restoring purchases requires an internet connection.", - "restorePurchasesSuccess": "Purchases restored successfully!", - "restorePurchasesAlreadyActive": "Your purchases are already active", - "restorePurchasesNone": "No purchases found to restore", + "geofenceLocating": "Определение местоположения...", + "geofenceUseMyLocation": "Использовать моё местоположение", + "geofenceSetGeofence": "Задать геозону", + "geofenceSelectNode": "Выбрать узел", + "geofenceNoNodesWithGps": "Нет узлов с GPS", + "geofenceYou": "ВЫ", + "geofenceMonitored": "Отслеживается", + "geofenceMonitor": "Отслеживать", + "restorePurchasesTitle": "Восстановить покупки", + "restorePurchasesRequiresInternet": "Для восстановления покупок требуется подключение к Интернету.", + "restorePurchasesSuccess": "Покупки успешно восстановлены!", + "restorePurchasesAlreadyActive": "Ваши покупки уже активны", + "restorePurchasesNone": "Покупки для восстановления не найдены", "bluetoothTitle": "Bluetooth", - "bluetoothSave": "Save", - "bluetoothSaveSuccess": "Bluetooth configuration saved", - "bluetoothSaveFailed": "Failed to save: {error}", - "bluetoothInvalidPin": "Please enter a valid 6-digit PIN", - "bluetoothEnabled": "Bluetooth Enabled", - "bluetoothEnableSubtitle": "Enable Bluetooth connectivity", - "bluetoothPairingMode": "PAIRING MODE", - "bluetoothFixedPin": "FIXED PIN", - "bluetoothPinHint": "Enter a 6-digit PIN code for Bluetooth pairing", - "bluetoothInfoDescription": "Bluetooth settings control how your device pairs with phones and other devices.", - "bluetoothModeRandom": "Random PIN", - "bluetoothModeFixed": "Fixed PIN", - "bluetoothModeNone": "No PIN", - "bluetoothModeUnknown": "Unknown", - "bluetoothModeRandomDesc": "Generate random PIN on each boot", - "bluetoothModeFixedDesc": "Use a fixed PIN code", - "bluetoothModeNoneDesc": "No PIN required (insecure)", - "detectionSensorTitle": "Detection Sensor", - "detectionSensorSave": "Save", - "detectionSensorSaveSuccess": "Detection Sensor configuration saved", - "detectionSensorSaveFailed": "Failed to save config: {error}", - "detectionSensorBasicSettings": "Basic Settings", - "detectionSensorPinConfig": "Pin Configuration", - "detectionSensorTiming": "Timing", - "detectionSensorClientOptions": "Client Options", - "detectionSensorInfoDescription": "Monitor a GPIO pin and broadcast state changes to the mesh. Use with PIR motion sensors, door/window contacts, or other binary sensors.", - "detectionSensorEnable": "Enable Detection Sensor", - "detectionSensorEnableSubtitle": "Monitor GPIO pin and broadcast state changes", - "detectionSensorName": "Sensor Name", - "detectionSensorNameHint": "e.g., Front Door, Motion Sensor", - "detectionSensorGpioPin": "GPIO Pin", - "detectionSensorGpioPinSubtitle": "The GPIO pin number to monitor", - "detectionSensorTriggerType": "Trigger Type", - "detectionSensorUsePullup": "Use Internal Pullup", - "detectionSensorUsePullupSubtitle": "Enable internal pullup resistor on the pin", - "detectionSensorSendBell": "Send Bell Character", - "detectionSensorSendBellSubtitle": "Send bell (\\a) in detection messages", - "detectionSensorMinBroadcastInterval": "Minimum Broadcast Interval", - "detectionSensorMinBroadcastIntervalSubtitle": "Wait {seconds} seconds between broadcasts", - "detectionSensorStateBroadcastInterval": "State Broadcast Interval", - "detectionSensorStateBroadcastIntervalSubtitle": "Broadcast current state every {minutes} minutes", - "detectionSensorEnableNotifications": "Enable Notifications", - "detectionSensorEnableNotificationsSubtitle": "Show notifications when sensor events are received", - "detectionSensorTriggerLogicLow": "Logic Low (active when pin is LOW)", - "detectionSensorTriggerLogicHigh": "Logic High (active when pin is HIGH)", - "detectionSensorTriggerFallingEdge": "Falling Edge (trigger on HIGH→LOW)", - "detectionSensorTriggerRisingEdge": "Rising Edge (trigger on LOW→HIGH)", - "detectionSensorTriggerEitherEdgeLow": "Either Edge (active LOW)", - "detectionSensorTriggerEitherEdgeHigh": "Either Edge (active HIGH)", - "subscriptionPremiumTitle": "Premium", - "subscriptionOrBuyIndividually": "or buy individually", - "subscriptionIncludedFeatures": "Included Features", - "subscriptionUnlockFeatures": "Unlock Features", - "subscriptionOneTimePurchases": "One-time purchases, yours forever", - "subscriptionTerms": "Terms", - "subscriptionPrivacy": "Privacy", - "subscriptionAllUnlocked": "All Features Unlocked", - "subscriptionThankYou": "Thank you for your support!", - "subscriptionCompletePack": "Complete Pack", - "subscriptionCompletePackSubtitle": "Everything. Forever. One price.", - "subscriptionTones": "{count} tones", - "subscriptionAccentColors": "12 accent colors", - "subscriptionUnlimitedWidgets": "Unlimited custom widgets", - "subscriptionTriggersSchedules": "Triggers & schedules", - "subscriptionAppIntegrations": "700+ app integrations", - "subscriptionBestValue": "Best value - all features", - "subscriptionGetAll": "Get All", - "subscriptionOwned": "OWNED", - "subscriptionSearchableTones": "{count} searchable RTTTL tones", - "subscriptionView": "View", - "subscriptionAllUnlockedCelebration": "All Features Unlocked!", - "subscriptionCelebrationMessage": "You now have access to everything Socialmesh has to offer. Thank you for your support!", - "subscriptionAwesome": "Awesome!", - "cannedResponsesTitle": "Quick Responses", - "cannedResponsesAddTooltip": "Add response", - "cannedResponsesDoneTooltip": "Done", - "cannedResponsesReorderTooltip": "Reorder", - "cannedResponsesResetToDefaults": "Reset to defaults", - "cannedResponsesDeleteTitle": "Delete Response", - "cannedResponsesDeleteMessage": "Delete \"{text}\"?", - "cannedResponsesDeleteConfirm": "Delete", - "cannedResponsesResetTitle": "Reset to Defaults", - "cannedResponsesResetMessage": "This will remove all custom responses and restore the default set.", - "cannedResponsesResetConfirm": "Reset", - "cannedResponsesDragToReorder": "Drag to reorder responses", - "cannedResponsesTapToEdit": "Tap to edit, swipe to delete", - "cannedResponsesDefault": "Default", - "cannedResponsesEditTitle": "Edit Response", - "cannedResponsesAddTitle": "Add Response", - "cannedResponsesCreateSubtitle": "Create a quick message for fast sending", - "cannedResponsesMessageLabel": "Message", - "cannedResponsesMessageHint": "e.g., On my way", - "cannedResponsesSave": "Save", - "cannedResponsesAdd": "Add", - "rangeTestTitle": "Range Test", - "rangeTestSave": "Save", - "rangeTestSaveSuccess": "Range test configuration saved", - "rangeTestSaveFailed": "Failed to save config: {error}", - "rangeTestNoNodes": "No other nodes available", - "rangeTestSelectTarget": "Select target", - "rangeTestConfiguration": "Configuration", - "rangeTestResultsCount": "Results ({count})", - "rangeTestAbout": "About Range Test", - "rangeTestRunning": "Test Running", - "rangeTestReady": "Ready to Test", - "rangeTestPacketsReceived": "{count} packets received", - "rangeTestSelectNode": "Select Node", - "rangeTestStop": "Stop", - "rangeTestStartTest": "Start Test", - "rangeTestEnableModule": "Enable Range Test Module", - "rangeTestEnableModuleSubtitle": "Allow this device to participate in range tests", - "rangeTestSenderInterval": "Sender Interval", - "rangeTestSenderIntervalSubtitle": "Send test packet every {seconds} seconds", - "rangeTestSaveResultsToSd": "Save Results to SD", - "rangeTestSaveResultsToSdSubtitle": "Store test results on device SD card", - "rangeTestAvgSnr": "Avg SNR", - "rangeTestAvgRssi": "Avg RSSI", - "rangeTestMaxDist": "Max Dist", - "rangeTestHowItWorks": "How Range Test Works", - "rangeTestHowItWorksDescription": "1. Select a target node to test range with\n2. Start the test to begin sending packets\n3. View real-time signal metrics (SNR, RSSI)\n4. Track maximum distance achieved\n\nBoth nodes must have Range Test module enabled for best results.", - "rangeTestSelectTargetNode": "Select Target Node", - "rangeTestSearchNodes": "Search nodes…", - "rangeTestNoNodesMatch": "No nodes match \"{query}\"", - "themeSettingsTitle": "Theme Settings", - "themeSettingsCurrentAccent": "Current accent color", - "themeSettingsAccentColor": "ACCENT COLOR", - "themeSettingsQrCodeStyle": "QR CODE STYLE", - "themeSettingsPreview": "PREVIEW", - "themeSettingsCompletePackOnly": "{colorName} (Complete Pack only)", - "themeSettingsThemePack": "{colorName} (Theme Pack)", - "themeSettingsPattern": "Pattern", - "themeSettingsStyleDots": "Dots", - "themeSettingsStyleSmooth": "Smooth", - "themeSettingsStyleClassic": "Classic", - "themeSettingsStyleDotsDesc": "Clean circular modules", - "themeSettingsStyleSmoothDesc": "Premium liquid modules", - "themeSettingsStyleClassicDesc": "Maximum compatibility", - "themeSettingsUseAccentGradient": "Use Accent Gradient", - "themeSettingsApplyAccentToQr": "Apply accent color to QR codes", - "themeSettingsButtons": "Buttons", - "themeSettingsPrimary": "Primary", - "themeSettingsSecondary": "Secondary", - "themeSettingsText": "Text", - "themeSettingsControls": "Controls", - "themeSettingsProgress": "Progress", - "themeSettingsBadges": "Badges", - "themeSettingsOnline": "Online", - "themeSettingsNewCount": "5 new", - "privacySettingsTitle": "Privacy", - "privacySettingsInfoDescription": "Socialmesh collects minimal data to improve app stability and performance. You can control what is shared below.", - "privacySettingsDataCollection": "DATA COLLECTION", - "privacySettingsUsageAnalytics": "Usage Analytics", - "privacySettingsUsageAnalyticsSubtitle": "Helps us understand which features are used most. No message content or precise location is collected.", - "privacySettingsCrashReporting": "Crash Reporting", - "privacySettingsCrashReportingSubtitle": "Automatically sends crash data when the app encounters an error. Helps us fix bugs faster.", - "privacySettingsDisableAnalyticsTitle": "Disable Usage Analytics?", - "privacySettingsDisableAnalyticsMessage": "Usage analytics help us understand how the app is used and identify issues. No personal messages or location data are collected.\n\nYou can re-enable this at any time.", - "privacySettingsDisable": "Disable", - "privacySettingsAnalyticsEnabled": "Usage analytics enabled", - "privacySettingsAnalyticsDisabled": "Usage analytics disabled", - "privacySettingsDisableCrashTitle": "Disable Crash Reporting?", - "privacySettingsDisableCrashMessage": "Crash reports help us fix bugs faster. No personal messages or location data are included in crash reports.\n\nYou can re-enable this at any time.", - "privacySettingsCrashEnabled": "Crash reporting enabled", - "privacySettingsCrashDisabled": "Crash reporting disabled", - "privacySettingsPrivacyPolicy": "Privacy Policy", - "privacySettingsThirdPartyServices": "THIRD-PARTY SERVICES", - "privacySettingsFirebaseCategories": "Crash reports, usage analytics (if opted in)", - "privacySettingsRevenueCatCategories": "Purchase identifiers, subscription status", - "privacySettingsSigilCategories": "Hashed node identifiers for artwork generation", - "appearanceTitle": "Appearance & Accessibility", - "appearanceResetTooltip": "Reset to defaults", - "appearanceLanguage": "Language", - "appearanceLanguageSystemDefault": "System Default", - "appearanceLanguageEnglish": "English", - "appearanceLanguageItalian": "Italian", - "appearanceLanguageRussian": "Russian", - "appearanceFont": "Font", - "appearanceTextSize": "Text Size", - "appearanceDisplayDensity": "Display Density", - "appearanceContrast": "Contrast", - "appearanceMotion": "Motion", - "appearanceResetSuccess": "Settings reset to defaults", - "appearanceLivePreview": "Live Preview", - "appearanceChangesApplyInstantly": "Changes apply instantly", - "appearanceSampleText": "Sample body text to preview your settings. Adjust the options below to find what works best for you.", - "appearanceHighContrast": "High Contrast", - "appearanceHighContrastDesc": "Enhanced visibility for text and UI elements", - "appearanceElementalAtmosphere": "Elemental Atmosphere", - "appearanceElementalDisabled": "Disabled while Reduce Motion is active", - "appearanceElementalDesc": "Ambient particle effects driven by mesh activity", - "appearanceReduceMotion": "Reduce Motion", - "appearanceReduceMotionDesc": "Minimize animations throughout the app", - "appearanceResetToRecommended": "Reset to Recommended", - "appearanceRestoreDefaults": "Restore default settings", - "appearanceUsingRecommended": "Using recommended settings", - "appearanceResetDialogTitle": "Reset to Defaults?", - "appearanceResetDialogMessage": "This will restore all appearance and accessibility settings to their recommended values.", - "appearanceResetDialogCancel": "Cancel", - "appearanceResetDialogConfirm": "Reset", - "settingsSectionProfile": "PROFILE", - "settingsSectionFileTransfer": "FILE TRANSFER", - "settingsGlyphMatrixTest": "Glyph Matrix Test", - "cloudSyncUnableToLoad": "Unable to load subscription options", - "cloudSyncTitle": "Unlock Cloud Sync", - "cloudSyncDescription": "Sync your mesh data across devices. Your local data always stays free and accessible.", - "cloudSyncNodeDex": "NodeDex — encounters, tags, notes", - "cloudSyncAutomations": "Automations — rules and triggers", - "cloudSyncWidgets": "Custom Widgets — layouts and data", - "cloudSyncOfflineNote": "Works fully offline without it", - "cloudSyncAutoRenewNote": "Subscriptions auto-renew unless cancelled at least 24 hours before the end of the current period.", - "cloudSyncYearlySave": "Yearly (Save 44%)", - "cloudSyncMonthly": "Monthly", - "cloudSyncRequired": "Cloud Sync Required", - "cloudSyncSubscriptionRestored": "Subscription restored", - "cloudSyncNoSubscription": "No Cloud Sync subscription found", - "cloudSyncRestoreFailed": "Restore failed. Please try again.", - "cloudSyncExpiredMessage": "Your Cloud Sync subscription has expired. Your data is read-only.", - "cloudSyncRenew": "Renew", - "cloudSyncPaymentIssue": "There's an issue with your payment. Please update your payment method.", - "signalSettingsTitle": "Signals", - "signalSettingsPrivacy": "SIGNAL PRIVACY", - "signalSettingsLocationRadius": "Signal location radius", - "signalSettingsRadiusDescription": "Signals are rounded to this radius, not an exact address", - "signalSettingsContent": "SIGNAL CONTENT", - "signalSettingsMaxImages": "Max Images per Signal", - "signalSettingsImageLimit": "Limit: 1-4 images", - "signalSettingsNotifications": "SIGNAL NOTIFICATIONS", - "signalSettingsNotifySignals": "Signals", - "signalSettingsNotifySignalsSubtitle": "Notify when someone posts a signal", - "signalSettingsNotifyVotes": "Votes", - "signalSettingsNotifyVotesSubtitle": "When someone upvotes your signal comments", - "adminFollowTitle": "Social Admin", - "adminFollowTabRequests": "Follow Requests", - "adminFollowTabSeedData": "Seed Data", - "adminFollowErrorLoading": "Error loading requests", - "adminFollowNoPending": "No pending requests", - "adminFollowApproved": "Request approved", - "adminFollowApproveFailed": "Failed to approve: {error}", - "adminFollowDeclined": "Request declined", - "adminFollowDeclineFailed": "Failed to decline: {error}", - "adminFollowRequestedTime": "Requested {time}", - "adminFollowDecline": "Decline", - "adminFollowAccept": "Accept", - "adminFollowJustNow": "just now", - "adminFollowMinutesAgo": "{minutes}m ago", - "adminFollowHoursAgo": "{hours}h ago", - "adminFollowDaysAgo": "{days}d ago", - "adminFollowTestData": "Test Data", - "adminFollowProfiles": "Profiles", - "adminFollowPosts": "Posts", - "adminFollowStories": "Stories", - "adminFollowComments": "Comments", - "adminFollowDummyUsers": "Dummy Users", - "adminFollowLog": "Log", - "adminFollowResetAndSeed": "Reset & Seed", - "adminFollowSeedData": "Seed Data", - "adminFollowSeedDescription": "Reset & Seed: Clears all dummy data first, then seeds fresh.\nSeed Data: Adds to existing data (may create duplicates).", - "adminFollowSeededSummary": "Seeded {users} users, {posts} posts, {stories} stories, {comments} comments", - "adminPostsTitle": "Signals", - "adminPostsDeleteAll": "Delete all signals", - "adminPostsRefresh": "Refresh snapshot", - "adminPostsFilterHint": "Filter by content or author ID", - "adminPostsLoadFailed": "Failed to load posts: {error}", - "adminPostsNoMatched": "No posts matched", - "adminPostsFilterAll": "All", - "adminPostsFilterSignals": "Signals", - "adminPostsFilterExpired": "Expired", - "adminPostsFilterLocation": "Location", - "adminPostsFilterMedia": "Media", - "adminPostsDeletePostTitle": "Delete post?", - "adminPostsDeletePostMessage": "Deleting a post removes it from Firebase immediately. This cannot be undone.", - "adminPostsDeleteConfirm": "Delete", - "adminPostsDeleteSignalsTitle": "Delete signals?", - "adminPostsDeleteFilteredMessage": "Delete filtered ({filtered}) or all ({total}) signals.", - "adminPostsDeleteAllMessage": "Delete all {total} signals.", - "adminPostsDeleteWarning": "This cannot be undone. Type DELETE to confirm.", + "bluetoothSave": "Сохранить", + "bluetoothSaveSuccess": "Конфигурация Bluetooth сохранена", + "bluetoothSaveFailed": "Не удалось сохранить: {error}", + "bluetoothInvalidPin": "Пожалуйста, введите корректный 6-значный PIN-код", + "bluetoothEnabled": "Bluetooth включён", + "bluetoothEnableSubtitle": "Включить подключение по Bluetooth", + "bluetoothPairingMode": "РЕЖИМ СОПРЯЖЕНИЯ", + "bluetoothFixedPin": "ФИКСИРОВАННЫЙ PIN", + "bluetoothPinHint": "Введите 6-значный PIN-код для сопряжения по Bluetooth", + "bluetoothInfoDescription": "Настройки Bluetooth определяют, как ваше устройство сопрягается с телефонами и другими устройствами.", + "bluetoothModeRandom": "Случайный PIN", + "bluetoothModeFixed": "Фиксированный PIN", + "bluetoothModeNone": "Без PIN", + "bluetoothModeUnknown": "Неизвестно", + "bluetoothModeRandomDesc": "Генерировать случайный PIN при каждом включении", + "bluetoothModeFixedDesc": "Использовать фиксированный PIN-код", + "bluetoothModeNoneDesc": "PIN не требуется (небезопасно)", + "detectionSensorTitle": "Датчик обнаружения", + "detectionSensorSave": "Сохранить", + "detectionSensorSaveSuccess": "Конфигурация датчика обнаружения сохранена", + "detectionSensorSaveFailed": "Не удалось сохранить конфигурацию: {error}", + "detectionSensorBasicSettings": "Основные настройки", + "detectionSensorPinConfig": "Конфигурация вывода", + "detectionSensorTiming": "Таймирование", + "detectionSensorClientOptions": "Параметры клиента", + "detectionSensorInfoDescription": "Мониторинг GPIO-вывода и трансляция изменений состояния в сеть Mesh. Используется с PIR-датчиками движения и другими.", + "detectionSensorEnable": "Включить датчик обнаружения", + "detectionSensorEnableSubtitle": "Мониторинг GPIO-вывода и трансляция изменений состояния", + "detectionSensorName": "Название датчика", + "detectionSensorNameHint": "например, Входная дверь, Датчик движения", + "detectionSensorGpioPin": "GPIO-вывод", + "detectionSensorGpioPinSubtitle": "Номер GPIO-вывода для мониторинга", + "detectionSensorTriggerType": "Тип триггера", + "detectionSensorUsePullup": "Использовать внутренний подтягивающий резистор", + "detectionSensorUsePullupSubtitle": "Включить внутренний подтягивающий резистор на выводе", + "detectionSensorSendBell": "Отправлять символ звонка", + "detectionSensorSendBellSubtitle": "Отправлять символ звонка (\\a) в сообщениях обнаружения", + "detectionSensorMinBroadcastInterval": "Минимальный интервал трансляции", + "detectionSensorMinBroadcastIntervalSubtitle": "Ждать {seconds} секунд между трансляциями", + "detectionSensorStateBroadcastInterval": "Интервал трансляции состояния", + "detectionSensorStateBroadcastIntervalSubtitle": "Транслировать текущее состояние каждые {minutes} минут", + "detectionSensorEnableNotifications": "Включить уведомления", + "detectionSensorEnableNotificationsSubtitle": "Показывать уведомления при получении событий датчика", + "detectionSensorTriggerLogicLow": "Логический ноль (активен, когда вывод LOW)", + "detectionSensorTriggerLogicHigh": "Логическая единица (активен, когда вывод HIGH)", + "detectionSensorTriggerFallingEdge": "Нисходящий фронт (срабатывает при HIGH→LOW)", + "detectionSensorTriggerRisingEdge": "Восходящий фронт (срабатывает при LOW→HIGH)", + "detectionSensorTriggerEitherEdgeLow": "Любой фронт (активен LOW)", + "detectionSensorTriggerEitherEdgeHigh": "Любой фронт (активен HIGH)", + "subscriptionPremiumTitle": "Премиум", + "subscriptionOrBuyIndividually": "или купить по отдельности", + "subscriptionIncludedFeatures": "Включённые функции", + "subscriptionUnlockFeatures": "Разблокировать функции", + "subscriptionOneTimePurchases": "Разовые покупки, навсегда ваши", + "subscriptionTerms": "Условия", + "subscriptionPrivacy": "Конфиденциальность", + "subscriptionAllUnlocked": "Все функции разблокированы", + "subscriptionThankYou": "Спасибо за вашу поддержку!", + "subscriptionCompletePack": "Полный пакет", + "subscriptionCompletePackSubtitle": "Всё. Навсегда. Одна цена.", + "subscriptionTones": "{count} тонов", + "subscriptionAccentColors": "12 акцентных цветов", + "subscriptionUnlimitedWidgets": "Неограниченное количество пользовательских виджетов", + "subscriptionTriggersSchedules": "Триггеры и расписания", + "subscriptionAppIntegrations": "Более 700 интеграций с приложениями", + "subscriptionBestValue": "Лучшее предложение — все функции", + "subscriptionGetAll": "Получить всё", + "subscriptionOwned": "КУПЛЕНО", + "subscriptionSearchableTones": "{count} тонов RTTTL с поиском", + "subscriptionView": "Просмотр", + "subscriptionAllUnlockedCelebration": "Все функции разблокированы!", + "subscriptionCelebrationMessage": "Теперь у вас есть доступ ко всему, что предлагает Socialmesh. Спасибо за вашу поддержку!", + "subscriptionAwesome": "Отлично!", + "cannedResponsesTitle": "Быстрые ответы", + "cannedResponsesAddTooltip": "Добавить ответ", + "cannedResponsesDoneTooltip": "Готово", + "cannedResponsesReorderTooltip": "Изменить порядок", + "cannedResponsesResetToDefaults": "Сбросить к умолчаниям", + "cannedResponsesDeleteTitle": "Удалить ответ", + "cannedResponsesDeleteMessage": "Удалить \"{text}\"?", + "cannedResponsesDeleteConfirm": "Удалить", + "cannedResponsesResetTitle": "Сбросить к умолчаниям", + "cannedResponsesResetMessage": "Это удалит все пользовательские ответы и восстановит набор по умолчанию.", + "cannedResponsesResetConfirm": "Сбросить", + "cannedResponsesDragToReorder": "Перетащите для изменения порядка ответов", + "cannedResponsesTapToEdit": "Нажмите для редактирования, проведите для удаления", + "cannedResponsesDefault": "По умолчанию", + "cannedResponsesEditTitle": "Редактировать ответ", + "cannedResponsesAddTitle": "Добавить ответ", + "cannedResponsesCreateSubtitle": "Создайте быстрое сообщение для быстрой отправки", + "cannedResponsesMessageLabel": "Сообщение", + "cannedResponsesMessageHint": "например, Уже еду", + "cannedResponsesSave": "Сохранить", + "cannedResponsesAdd": "Добавить", + "rangeTestTitle": "Тест дальности", + "rangeTestSave": "Сохранить", + "rangeTestSaveSuccess": "Конфигурация теста дальности сохранена", + "rangeTestSaveFailed": "Не удалось сохранить конфигурацию: {error}", + "rangeTestNoNodes": "Нет других доступных узлов", + "rangeTestSelectTarget": "Выбрать цель", + "rangeTestConfiguration": "Конфигурация", + "rangeTestResultsCount": "Результаты ({count})", + "rangeTestAbout": "О тесте дальности", + "rangeTestRunning": "Тест выполняется", + "rangeTestReady": "Готов к тестированию", + "rangeTestPacketsReceived": "Получено пакетов: {count}", + "rangeTestSelectNode": "Выбрать узел", + "rangeTestStop": "Стоп", + "rangeTestStartTest": "Начать тест", + "rangeTestEnableModule": "Включить модуль теста дальности", + "rangeTestEnableModuleSubtitle": "Разрешить этому устройству участвовать в тестах дальности", + "rangeTestSenderInterval": "Интервал отправки", + "rangeTestSenderIntervalSubtitle": "Отправлять тестовый пакет каждые {seconds} секунд", + "rangeTestSaveResultsToSd": "Сохранять результаты на SD", + "rangeTestSaveResultsToSdSubtitle": "Хранить результаты тестов на SD-карте устройства", + "rangeTestAvgSnr": "Ср. SNR", + "rangeTestAvgRssi": "Ср. RSSI", + "rangeTestMaxDist": "Макс. дальность", + "rangeTestHowItWorks": "Как работает тест дальности", + "rangeTestHowItWorksDescription": "1. Выберите целевой узел для теста дальности\n2. Начните тест для отправки пакетов", + "rangeTestSelectTargetNode": "Выбрать целевой узел", + "rangeTestSearchNodes": "Поиск узлов…", + "rangeTestNoNodesMatch": "Нет узлов, соответствующих запросу \"{query}\"", + "themeSettingsTitle": "Настройки темы", + "themeSettingsCurrentAccent": "Текущий акцентный цвет", + "themeSettingsAccentColor": "АКЦЕНТНЫЙ ЦВЕТ", + "themeSettingsQrCodeStyle": "СТИЛЬ QR-КОДА", + "themeSettingsPreview": "ПРЕДПРОСМОТР", + "themeSettingsCompletePackOnly": "{colorName} (только полный пакет)", + "themeSettingsThemePack": "{colorName} (набор тем)", + "themeSettingsPattern": "Паттерн", + "themeSettingsStyleDots": "Точки", + "themeSettingsStyleSmooth": "Гладкий", + "themeSettingsStyleClassic": "Классический", + "themeSettingsStyleDotsDesc": "Чистые круглые модули", + "themeSettingsStyleSmoothDesc": "Премиальные жидкие модули", + "themeSettingsStyleClassicDesc": "Максимальная совместимость", + "themeSettingsUseAccentGradient": "Использовать градиент акцентного цвета", + "themeSettingsApplyAccentToQr": "Применить акцентный цвет к QR-кодам", + "themeSettingsButtons": "Кнопки", + "themeSettingsPrimary": "Основной", + "themeSettingsSecondary": "Вторичный", + "themeSettingsText": "Текст", + "themeSettingsControls": "Элементы управления", + "themeSettingsProgress": "Прогресс", + "themeSettingsBadges": "Значки", + "themeSettingsOnline": "Онлайн", + "themeSettingsNewCount": "5 новых", + "privacySettingsTitle": "Конфиденциальность", + "privacySettingsInfoDescription": "Socialmesh собирает минимум данных для повышения стабильности и производительности приложения. Вы можете управлять параметрами ниже.", + "privacySettingsDataCollection": "СБОР ДАННЫХ", + "privacySettingsUsageAnalytics": "Аналитика использования", + "privacySettingsUsageAnalyticsSubtitle": "Помогает понять, какие функции используются чаще всего. Содержимое сообщений и точное местоположение не собираются.", + "privacySettingsCrashReporting": "Отчёты о сбоях", + "privacySettingsCrashReportingSubtitle": "Автоматически отправляет данные о сбоях при ошибках приложения. Помогает нам быстрее исправлять ошибки.", + "privacySettingsDisableAnalyticsTitle": "Отключить аналитику использования?", + "privacySettingsDisableAnalyticsMessage": "Аналитика использования помогает понять, как используется приложение, и выявлять проблемы. Личные сообщения не собираются.", + "privacySettingsDisable": "Отключить", + "privacySettingsAnalyticsEnabled": "Аналитика использования включена", + "privacySettingsAnalyticsDisabled": "Аналитика использования отключена", + "privacySettingsDisableCrashTitle": "Отключить отчёты о сбоях?", + "privacySettingsDisableCrashMessage": "Отчёты о сбоях помогают быстрее исправлять ошибки. Личные сообщения и данные о местоположении не собираются.", + "privacySettingsCrashEnabled": "Отчёты о сбоях включены", + "privacySettingsCrashDisabled": "Отчёты о сбоях отключены", + "privacySettingsPrivacyPolicy": "Политика конфиденциальности", + "privacySettingsThirdPartyServices": "СТОРОННИЕ СЕРВИСЫ", + "privacySettingsFirebaseCategories": "Отчёты о сбоях, аналитика использования (при согласии)", + "privacySettingsRevenueCatCategories": "Идентификаторы покупок, статус подписки", + "privacySettingsSigilCategories": "Хешированные идентификаторы узлов для генерации изображений", + "appearanceTitle": "Внешний вид и доступность", + "appearanceResetTooltip": "Сбросить к умолчаниям", + "appearanceLanguage": "Язык", + "appearanceLanguageSystemDefault": "Системный по умолчанию", + "appearanceLanguageEnglish": "Английский", + "appearanceLanguageItalian": "Итальянский", + "appearanceLanguageRussian": "Русский", + "appearanceFont": "Шрифт", + "appearanceTextSize": "Размер текста", + "appearanceDisplayDensity": "Плотность отображения", + "appearanceContrast": "Контрастность", + "appearanceMotion": "Анимации", + "appearanceResetSuccess": "Настройки сброшены к умолчаниям", + "appearanceLivePreview": "Предпросмотр в реальном времени", + "appearanceChangesApplyInstantly": "Изменения применяются мгновенно", + "appearanceSampleText": "Образец основного текста для предпросмотра настроек. Настройте параметры ниже, чтобы найти подходящий вариант.", + "appearanceHighContrast": "Высокая контрастность", + "appearanceHighContrastDesc": "Улучшенная видимость текста и элементов интерфейса", + "appearanceElementalAtmosphere": "Стихийная атмосфера", + "appearanceElementalDisabled": "Отключено, пока активно «Уменьшить анимации»", + "appearanceElementalDesc": "Фоновые эффекты частиц, управляемые активностью сети Mesh", + "appearanceReduceMotion": "Уменьшить анимации", + "appearanceReduceMotionDesc": "Минимизировать анимации в приложении", + "appearanceResetToRecommended": "Сбросить к рекомендуемым", + "appearanceRestoreDefaults": "Восстановить настройки по умолчанию", + "appearanceUsingRecommended": "Используются рекомендуемые настройки", + "appearanceResetDialogTitle": "Сбросить к умолчаниям?", + "appearanceResetDialogMessage": "Все настройки внешнего вида и доступности будут восстановлены до рекомендуемых значений.", + "appearanceResetDialogCancel": "Отмена", + "appearanceResetDialogConfirm": "Сбросить", + "settingsSectionProfile": "ПРОФИЛЬ", + "settingsSectionFileTransfer": "ПЕРЕДАЧА ФАЙЛОВ", + "settingsGlyphMatrixTest": "Тест матрицы глифов", + "cloudSyncUnableToLoad": "Не удалось загрузить параметры подписки", + "cloudSyncTitle": "Разблокировать облачную синхронизацию", + "cloudSyncDescription": "Синхронизируйте данные сети Mesh между устройствами. Локальные данные всегда остаются бесплатными и доступными.", + "cloudSyncNodeDex": "NodeDex — встречи, теги, заметки", + "cloudSyncAutomations": "Автоматизации — правила и триггеры", + "cloudSyncWidgets": "Пользовательские виджеты — макеты и данные", + "cloudSyncOfflineNote": "Работает полностью офлайн без подписки", + "cloudSyncAutoRenewNote": "Подписки автоматически обновляются, если не отменены не менее чем за 24 часа до окончания текущего периода.", + "cloudSyncYearlySave": "Годовая (сэкономьте 44%)", + "cloudSyncMonthly": "Ежемесячная", + "cloudSyncRequired": "Требуется облачная синхронизация", + "cloudSyncSubscriptionRestored": "Подписка восстановлена", + "cloudSyncNoSubscription": "Подписка на облачную синхронизацию не найдена", + "cloudSyncRestoreFailed": "Не удалось восстановить. Пожалуйста, попробуйте снова.", + "cloudSyncExpiredMessage": "Срок действия вашей подписки на облачную синхронизацию истёк. Ваши данные доступны только для чтения.", + "cloudSyncRenew": "Обновить", + "cloudSyncPaymentIssue": "Возникла проблема с оплатой. Пожалуйста, обновите способ оплаты.", + "signalSettingsTitle": "Сигналы", + "signalSettingsPrivacy": "КОНФИДЕНЦИАЛЬНОСТЬ СИГНАЛОВ", + "signalSettingsLocationRadius": "Радиус местоположения сигнала", + "signalSettingsRadiusDescription": "Местоположение сигналов округляется до этого радиуса, а не указывает точный адрес", + "signalSettingsContent": "КОНТЕНТ СИГНАЛОВ", + "signalSettingsMaxImages": "Макс. изображений на сигнал", + "signalSettingsImageLimit": "Ограничение: 1–4 изображения", + "signalSettingsNotifications": "УВЕДОМЛЕНИЯ О СИГНАЛАХ", + "signalSettingsNotifySignals": "Сигналы", + "signalSettingsNotifySignalsSubtitle": "Уведомлять, когда кто-то публикует сигнал", + "signalSettingsNotifyVotes": "Голоса", + "signalSettingsNotifyVotesSubtitle": "Когда кто-то голосует за ваши комментарии к сигналам", + "adminFollowTitle": "Социальный администратор", + "adminFollowTabRequests": "Запросы на подписку", + "adminFollowTabSeedData": "Тестовые данные", + "adminFollowErrorLoading": "Ошибка загрузки запросов", + "adminFollowNoPending": "Нет ожидающих запросов", + "adminFollowApproved": "Запрос одобрен", + "adminFollowApproveFailed": "Не удалось одобрить: {error}", + "adminFollowDeclined": "Запрос отклонён", + "adminFollowDeclineFailed": "Не удалось отклонить: {error}", + "adminFollowRequestedTime": "Запрошено {time}", + "adminFollowDecline": "Отклонить", + "adminFollowAccept": "Принять", + "adminFollowJustNow": "только что", + "adminFollowMinutesAgo": "{minutes} мин. назад", + "adminFollowHoursAgo": "{hours} ч. назад", + "adminFollowDaysAgo": "{days} дн. назад", + "adminFollowTestData": "Тестовые данные", + "adminFollowProfiles": "Профили", + "adminFollowPosts": "Публикации", + "adminFollowStories": "Истории", + "adminFollowComments": "Комментарии", + "adminFollowDummyUsers": "Тестовые пользователи", + "adminFollowLog": "Журнал", + "adminFollowResetAndSeed": "Сброс и заполнение", + "adminFollowSeedData": "Заполнить данными", + "adminFollowSeedDescription": "Сброс и заполнение: сначала очищает все тестовые данные, затем добавляет новые.\nЗаполнить данными: добавляет к существующим данным (возможны дубликаты).", + "adminFollowSeededSummary": "Добавлено: {users} пользователей, {posts} публикаций, {stories} историй, {comments} комментариев", + "adminPostsTitle": "Сигналы", + "adminPostsDeleteAll": "Удалить все сигналы", + "adminPostsRefresh": "Обновить снимок", + "adminPostsFilterHint": "Фильтровать по содержимому или ID автора", + "adminPostsLoadFailed": "Не удалось загрузить публикации: {error}", + "adminPostsNoMatched": "Публикации не найдены", + "adminPostsFilterAll": "Все", + "adminPostsFilterSignals": "Сигналы", + "adminPostsFilterExpired": "Истёкшие", + "adminPostsFilterLocation": "Местоположение", + "adminPostsFilterMedia": "Медиа", + "adminPostsDeletePostTitle": "Удалить публикацию?", + "adminPostsDeletePostMessage": "Удаление публикации немедленно убирает её из Firebase. Это действие нельзя отменить.", + "adminPostsDeleteConfirm": "Удалить", + "adminPostsDeleteSignalsTitle": "Удалить сигналы?", + "adminPostsDeleteFilteredMessage": "Удалить отфильтрованные ({filtered}) или все ({total}) сигналы.", + "adminPostsDeleteAllMessage": "Удалить все {total} сигналов.", + "adminPostsDeleteWarning": "Это действие нельзя отменить. Введите DELETE для подтверждения.", "adminPostsDeleteHint": "DELETE", - "adminPostsNoText": "(no text)", - "adminPostsAuthor": "Author {authorId}", - "adminPostsStats": "Comments {comments} · Likes {likes}", - "adminPostsDeletePostTooltip": "Delete post", - "bgConnDisableTitle": "Disable Background Connection?", - "bgConnDisableBody": "The mesh connection may be lost when the app is in the background. You will not receive notifications for new messages.", - "bgConnDisableConfirm": "Disable", - "bgConnTitle": "Background Connection", - "bgConnSectionConnection": "CONNECTION", - "bgConnToggleTitle": "Background connection", - "bgConnToggleSubtitle": "Keep mesh radio connected when the app is in the background", - "bgConnSectionNotifications": "BACKGROUND NOTIFICATIONS", - "bgConnDirectMessages": "Direct messages", - "bgConnDirectMessagesSubtitle": "Notify for DMs received while backgrounded", - "bgConnChannelMessages": "Channel messages", - "bgConnChannelMessagesSubtitle": "Notify for channel messages while backgrounded", - "bgConnNodeDiscovery": "Node discovery", - "bgConnNodeDiscoverySubtitle": "Notify when new nodes are heard", - "bgConnSectionPersistentNotification": "PERSISTENT NOTIFICATION", - "bgConnSectionBattery": "BATTERY", - "bgConnBatteryGuide": "Battery optimization guide", - "bgConnBatteryGuideSubtitle": "OEM-specific instructions for reliable background operation", - "bgConnStyleMinimal": "Minimal", - "bgConnStyleDetailed": "Detailed", - "bgConnNotificationStyle": "Notification style", - "bgConnStyleMinimalDesc": "Shows \"Connected to [device]\"", - "bgConnStyleDetailedDesc": "Shows connection status with node count and last message time", - "linkedDevicesTitle": "Linked Devices", - "linkedDevicesSignInRequired": "Sign In Required", - "linkedDevicesSignInBody": "Sign in to link your Meshtastic devices to your social profile.", - "linkedDevicesLinkDescription": "Link your Meshtastic devices to your profile so others can find and follow you from the nodes list.", - "linkedDevicesNoDevices": "No Linked Devices", - "linkedDevicesNoDevicesBody": "Connect to a Meshtastic device and tap \"Link Current Device\" above.", - "linkedDevicesLinkAnother": "To link another device, disconnect from your current device and connect to the new one.", - "linkedDevicesLoadFailed": "Failed to load linked devices", - "linkedDevicesDeviceNotFound": "Device not found", - "linkedDevicesUnknownDevice": "Unknown Device", - "linkedDevicesLinked": "Device linked to your profile", - "linkedDevicesLinkFailed": "Failed to link device: {error}", - "linkedDevicesPrimaryUpdated": "Primary device updated", - "linkedDevicesSetPrimaryFailed": "Failed to set primary: {error}", - "linkedDevicesUnlinkTitle": "Unlink Device", - "linkedDevicesUnlinkBody": "Remove this device from your profile? Others will no longer see your profile when viewing this node.", - "linkedDevicesUnlinkConfirm": "Unlink", - "linkedDevicesUnlinked": "Device unlinked", - "linkedDevicesUnlinkFailed": "Failed to unlink: {error}", - "linkedDevicesConnectedDevice": "Connected Device", - "linkedDevicesLinkButton": "Link", - "linkedDevicesPrimaryBadge": "PRIMARY", - "linkedDevicesSendMessage": "Send Message", - "linkedDevicesViewOnMap": "View on Map", - "linkedDevicesSetAsPrimary": "Set as Primary", - "linkedDevicesSetAsPrimarySubtitle": "Show this device on your profile", - "homeWidgetsTitle": "Home Widgets", - "homeWidgetsSectionAvailable": "AVAILABLE WIDGETS", - "homeWidgetsMeshStatus": "Mesh Status", - "homeWidgetsMeshStatusDesc": "Shows connected nodes count and mesh health", - "homeWidgetsSizeSmall": "Small", - "homeWidgetsSizeMedium": "Medium", - "homeWidgetsSizeLarge": "Large", - "homeWidgetsRecentMessages": "Recent Messages", - "homeWidgetsRecentMessagesDesc": "Displays latest messages from your mesh", - "homeWidgetsDeviceBattery": "Device Battery", - "homeWidgetsDeviceBatteryDesc": "Shows battery level of your connected device", - "homeWidgetsQuickMessage": "Quick Message", - "homeWidgetsQuickMessageDesc": "Send a canned response with one tap", - "homeWidgetsLocationBeacon": "Location Beacon", - "homeWidgetsLocationBeaconDesc": "Share your location with a single tap", - "homeWidgetsSectionHowTo": "HOW TO ADD WIDGETS", - "homeWidgetsSectionTips": "TIPS", - "homeWidgetsAddToHomeScreen": "Add widgets to your home screen for quick access", - "homeWidgetsIosLongPress": "Long press on home screen", - "homeWidgetsIosLongPressDesc": "Press and hold any empty area until apps jiggle", - "homeWidgetsIosTapPlus": "Tap the + button", - "homeWidgetsIosTapPlusDesc": "Located in the top-left corner", - "homeWidgetsIosSearch": "Search for \"Socialmesh\"", - "homeWidgetsIosSearchDesc": "Or scroll to find our widgets", - "homeWidgetsIosChooseSize": "Choose a widget size", - "homeWidgetsIosChooseSizeDesc": "Swipe to see available sizes, tap \"Add Widget\"", - "homeWidgetsIosPosition": "Position and tap Done", - "homeWidgetsIosPositionDesc": "Drag to your preferred location", - "homeWidgetsAndroidLongPress": "Press and hold any empty area", - "homeWidgetsAndroidTapWidgets": "Tap \"Widgets\"", - "homeWidgetsAndroidTapWidgetsDesc": "From the menu that appears", - "homeWidgetsAndroidLongPressDrag": "Long press and drag", - "homeWidgetsAndroidLongPressDragDesc": "Hold the widget and place it on your home screen", - "homeWidgetsIosInstructions": "iOS Instructions", - "homeWidgetsAndroidInstructions": "Android Instructions", - "homeWidgetsTipAutoUpdate": "Widgets update automatically when connected", - "homeWidgetsTipOffline": "Offline data shown when disconnected", - "homeWidgetsTipTapToOpen": "Tap any widget to open the app", - "homeWidgetsTipAccentColor": "Widget colors match your accent color", - "radioConfigSaved": "Radio configuration saved", - "radioConfigSaveFailed": "Failed to save: {error}", - "radioConfigTitle": "Radio", - "radioConfigHelp": "Help", - "radioConfigSave": "Save", - "radioConfigSectionRegion": "REGION", - "radioConfigSectionModemPreset": "MODEM PRESET", - "radioConfigSectionTransmission": "TRANSMISSION", - "radioConfigTxEnabled": "Transmission Enabled", - "radioConfigTxEnabledSubtitle": "Allow device to transmit", - "radioConfigHopLimit": "Hop Limit", - "radioConfigHopLimitSubtitle": "Number of times messages can be relayed", - "radioConfigTxPowerOverride": "TX Power Override", - "radioConfigTxPowerDefault": "Default", - "radioConfigTxPowerSubtitle": "Override transmit power (0 = use default)", - "radioConfigSectionAdvanced": "ADVANCED", - "radioConfigUsePreset": "Use Preset", - "radioConfigUsePresetSubtitle": "Use preset modem settings instead of custom", - "radioConfigBandwidth": "Bandwidth", - "radioConfigSpreadFactor": "Spread Factor", - "radioConfigCodingRate": "Coding Rate", - "radioConfigFrequencySlot": "Frequency Slot", - "radioConfigFrequencySlotSubtitle": "Your operating frequency is calculated from the region, modem preset, and this value. Most users should leave this as the default.", - "radioConfigRxBoostedGain": "RX Boosted Gain", - "radioConfigRxBoostedGainSubtitle": "Enable boosted gain on SX126x receivers", - "radioConfigFrequencyOverride": "Frequency Override", - "radioConfigFrequencyOverrideSubtitle": "Override frequency in MHz (0 = disabled)", - "radioConfigIgnoreMqtt": "Ignore MQTT", - "radioConfigIgnoreMqttSubtitle": "Ignore messages via MQTT from this device", - "radioConfigOkToMqtt": "Ok to MQTT", - "radioConfigOkToMqttSubtitle": "Config is ok to send via MQTT uplink", - "radioConfigRegionUnset": "Unset", - "radioConfigRegionNotConfigured": "Not configured", - "radioConfigRegionSelectHint": "Select the region that matches your country's regulations", + "adminPostsNoText": "(без текста)", + "adminPostsAuthor": "Автор {authorId}", + "adminPostsStats": "Комментарии {comments} · Лайки {likes}", + "adminPostsDeletePostTooltip": "Удалить публикацию", + "bgConnDisableTitle": "Отключить фоновое подключение?", + "bgConnDisableBody": "Подключение к сети Mesh может быть потеряно, когда приложение находится в фоне. Вы не будете получать уведомления.", + "bgConnDisableConfirm": "Отключить", + "bgConnTitle": "Фоновое подключение", + "bgConnSectionConnection": "ПОДКЛЮЧЕНИЕ", + "bgConnToggleTitle": "Фоновое подключение", + "bgConnToggleSubtitle": "Держать радио Mesh подключённым, когда приложение в фоне", + "bgConnSectionNotifications": "ФОНОВЫЕ УВЕДОМЛЕНИЯ", + "bgConnDirectMessages": "Личные сообщения", + "bgConnDirectMessagesSubtitle": "Уведомлять о личных сообщениях, полученных в фоне", + "bgConnChannelMessages": "Сообщения в каналах", + "bgConnChannelMessagesSubtitle": "Уведомлять о сообщениях в каналах в фоне", + "bgConnNodeDiscovery": "Обнаружение узлов", + "bgConnNodeDiscoverySubtitle": "Уведомлять при обнаружении новых узлов", + "bgConnSectionPersistentNotification": "ПОСТОЯННОЕ УВЕДОМЛЕНИЕ", + "bgConnSectionBattery": "БАТАРЕЯ", + "bgConnBatteryGuide": "Руководство по оптимизации батареи", + "bgConnBatteryGuideSubtitle": "Инструкции для надёжной фоновой работы для конкретных производителей", + "bgConnStyleMinimal": "Минимальный", + "bgConnStyleDetailed": "Подробный", + "bgConnNotificationStyle": "Стиль уведомления", + "bgConnStyleMinimalDesc": "Показывает «Подключено к [устройство]»", + "bgConnStyleDetailedDesc": "Показывает статус подключения с количеством узлов и временем последнего сообщения", + "linkedDevicesTitle": "Привязанные устройства", + "linkedDevicesSignInRequired": "Требуется вход", + "linkedDevicesSignInBody": "Войдите, чтобы привязать ваши устройства Meshtastic к социальному профилю.", + "linkedDevicesLinkDescription": "Привяжите ваши устройства Meshtastic к профилю, чтобы другие могли найти вас и подписаться.", + "linkedDevicesNoDevices": "Нет привязанных устройств", + "linkedDevicesNoDevicesBody": "Подключитесь к устройству Meshtastic и нажмите «Привязать текущее устройство» выше.", + "linkedDevicesLinkAnother": "Чтобы привязать другое устройство, отключитесь от текущего и подключитесь к новому.", + "linkedDevicesLoadFailed": "Не удалось загрузить привязанные устройства", + "linkedDevicesDeviceNotFound": "Устройство не найдено", + "linkedDevicesUnknownDevice": "Неизвестное устройство", + "linkedDevicesLinked": "Устройство привязано к вашему профилю", + "linkedDevicesLinkFailed": "Не удалось привязать устройство: {error}", + "linkedDevicesPrimaryUpdated": "Основное устройство обновлено", + "linkedDevicesSetPrimaryFailed": "Не удалось установить основным: {error}", + "linkedDevicesUnlinkTitle": "Отвязать устройство", + "linkedDevicesUnlinkBody": "Удалить это устройство из вашего профиля? Другие больше не будут видеть ваш профиль через это устройство.", + "linkedDevicesUnlinkConfirm": "Отвязать", + "linkedDevicesUnlinked": "Устройство отвязано", + "linkedDevicesUnlinkFailed": "Не удалось отвязать: {error}", + "linkedDevicesConnectedDevice": "Подключённое устройство", + "linkedDevicesLinkButton": "Привязать", + "linkedDevicesPrimaryBadge": "ОСНОВНОЕ", + "linkedDevicesSendMessage": "Отправить сообщение", + "linkedDevicesViewOnMap": "Показать на карте", + "linkedDevicesSetAsPrimary": "Сделать основным", + "linkedDevicesSetAsPrimarySubtitle": "Отображать это устройство в вашем профиле", + "homeWidgetsTitle": "Виджеты главного экрана", + "homeWidgetsSectionAvailable": "ДОСТУПНЫЕ ВИДЖЕТЫ", + "homeWidgetsMeshStatus": "Статус Mesh", + "homeWidgetsMeshStatusDesc": "Показывает количество подключённых узлов и состояние сети Mesh", + "homeWidgetsSizeSmall": "Маленький", + "homeWidgetsSizeMedium": "Средний", + "homeWidgetsSizeLarge": "Большой", + "homeWidgetsRecentMessages": "Последние сообщения", + "homeWidgetsRecentMessagesDesc": "Отображает последние сообщения из вашей сети Mesh", + "homeWidgetsDeviceBattery": "Батарея устройства", + "homeWidgetsDeviceBatteryDesc": "Показывает уровень заряда подключённого устройства", + "homeWidgetsQuickMessage": "Быстрое сообщение", + "homeWidgetsQuickMessageDesc": "Отправить готовый ответ одним нажатием", + "homeWidgetsLocationBeacon": "Маяк местоположения", + "homeWidgetsLocationBeaconDesc": "Поделитесь своим местоположением одним нажатием", + "homeWidgetsSectionHowTo": "КАК ДОБАВИТЬ ВИДЖЕТЫ", + "homeWidgetsSectionTips": "СОВЕТЫ", + "homeWidgetsAddToHomeScreen": "Добавьте виджеты на главный экран для быстрого доступа", + "homeWidgetsIosLongPress": "Долгое нажатие на главном экране", + "homeWidgetsIosLongPressDesc": "Нажмите и удерживайте пустую область, пока приложения не начнут трястись", + "homeWidgetsIosTapPlus": "Нажмите кнопку +", + "homeWidgetsIosTapPlusDesc": "Расположена в левом верхнем углу", + "homeWidgetsIosSearch": "Найдите «Socialmesh»", + "homeWidgetsIosSearchDesc": "Или прокрутите для поиска наших виджетов", + "homeWidgetsIosChooseSize": "Выберите размер виджета", + "homeWidgetsIosChooseSizeDesc": "Смахните для просмотра доступных размеров, нажмите «Добавить виджет»", + "homeWidgetsIosPosition": "Разместите и нажмите Готово", + "homeWidgetsIosPositionDesc": "Перетащите в нужное место", + "homeWidgetsAndroidLongPress": "Нажмите и удерживайте пустую область", + "homeWidgetsAndroidTapWidgets": "Нажмите «Виджеты»", + "homeWidgetsAndroidTapWidgetsDesc": "В появившемся меню", + "homeWidgetsAndroidLongPressDrag": "Удерживайте и перетащите", + "homeWidgetsAndroidLongPressDragDesc": "Удерживайте виджет и разместите его на главном экране", + "homeWidgetsIosInstructions": "Инструкция для iOS", + "homeWidgetsAndroidInstructions": "Инструкция для Android", + "homeWidgetsTipAutoUpdate": "Виджеты обновляются автоматически при подключении", + "homeWidgetsTipOffline": "При отключении отображаются офлайн-данные", + "homeWidgetsTipTapToOpen": "Нажмите на любой виджет, чтобы открыть приложение", + "homeWidgetsTipAccentColor": "Цвета виджетов соответствуют акцентному цвету", + "radioConfigSaved": "Конфигурация радио сохранена", + "radioConfigSaveFailed": "Не удалось сохранить: {error}", + "radioConfigTitle": "Радио", + "radioConfigHelp": "Справка", + "radioConfigSave": "Сохранить", + "radioConfigSectionRegion": "РЕГИОН", + "radioConfigSectionModemPreset": "ПРЕСЕТ МОДЕМА", + "radioConfigSectionTransmission": "ПЕРЕДАЧА", + "radioConfigTxEnabled": "Передача включена", + "radioConfigTxEnabledSubtitle": "Разрешить устройству передавать сигнал", + "radioConfigHopLimit": "Лимит хопов", + "radioConfigHopLimitSubtitle": "Количество раз, которое сообщение может быть ретранслировано", + "radioConfigTxPowerOverride": "Переопределение мощности передачи", + "radioConfigTxPowerDefault": "По умолчанию", + "radioConfigTxPowerSubtitle": "Переопределить мощность передачи (0 = использовать по умолчанию)", + "radioConfigSectionAdvanced": "РАСШИРЕННЫЕ", + "radioConfigUsePreset": "Использовать пресет", + "radioConfigUsePresetSubtitle": "Использовать пресетные настройки модема вместо пользовательских", + "radioConfigBandwidth": "Полоса пропускания", + "radioConfigSpreadFactor": "Коэффициент расширения", + "radioConfigCodingRate": "Скорость кодирования", + "radioConfigFrequencySlot": "Слот частоты", + "radioConfigFrequencySlotSubtitle": "Рабочая частота рассчитывается исходя из региона, пресета модема и этого значения", + "radioConfigRxBoostedGain": "Усиленное усиление RX", + "radioConfigRxBoostedGainSubtitle": "Включить усиленное усиление на приёмниках SX126x", + "radioConfigFrequencyOverride": "Переопределение частоты", + "radioConfigFrequencyOverrideSubtitle": "Переопределить частоту в MHz (0 = отключено)", + "radioConfigIgnoreMqtt": "Игнорировать MQTT", + "radioConfigIgnoreMqttSubtitle": "Игнорировать сообщения через MQTT от этого устройства", + "radioConfigOkToMqtt": "Разрешить MQTT", + "radioConfigOkToMqttSubtitle": "Конфигурацию разрешено отправлять через MQTT-аплинк", + "radioConfigRegionUnset": "Не задан", + "radioConfigRegionNotConfigured": "Не настроен", + "radioConfigRegionSelectHint": "Выберите регион, соответствующий законодательству вашей страны", "radioConfigRegionUs": "US", "radioConfigRegionEu433": "EU 433", "radioConfigRegionEu868": "EU 868", - "radioConfigRegionChina": "China", - "radioConfigRegionJapan": "Japan", + "radioConfigRegionChina": "Китай", + "radioConfigRegionJapan": "Япония", "radioConfigRegionAnz": "ANZ", - "radioConfigRegionKorea": "Korea", - "radioConfigRegionTaiwan": "Taiwan", - "radioConfigRegionRussia": "Russia", - "radioConfigRegionIndia": "India", + "radioConfigRegionKorea": "Корея", + "radioConfigRegionTaiwan": "Тайвань", + "radioConfigRegionRussia": "Россия", + "radioConfigRegionIndia": "Индия", "radioConfigRegionNz865": "NZ 865", - "radioConfigRegionThailand": "Thailand", - "radioConfigRegionUkraine433": "Ukraine 433", - "radioConfigRegionUkraine868": "Ukraine 868", - "radioConfigRegionMalaysia433": "Malaysia 433", - "radioConfigRegionMalaysia919": "Malaysia 919", - "radioConfigRegionSingapore": "Singapore", - "radioConfigRegionLora24": "LoRa 2.4GHz", - "radioConfigPresetLongFast": "Long Fast", - "radioConfigPresetLongFastDesc": "Best range with good speed", - "radioConfigPresetLongSlow": "Long Slow", - "radioConfigPresetLongSlowDesc": "Maximum range, slower", - "radioConfigPresetVeryLongSlow": "Very Long Slow", - "radioConfigPresetVeryLongSlowDesc": "Extreme range, very slow", - "radioConfigPresetLongModerate": "Long Moderate", - "radioConfigPresetLongModerateDesc": "Good balance", - "radioConfigPresetMediumFast": "Medium Fast", - "radioConfigPresetMediumFastDesc": "Medium range, fast", - "radioConfigPresetMediumSlow": "Medium Slow", - "radioConfigPresetMediumSlowDesc": "Medium range, reliable", - "radioConfigPresetShortFast": "Short Fast", - "radioConfigPresetShortFastDesc": "Short range, fastest", - "radioConfigPresetShortSlow": "Short Slow", - "radioConfigPresetShortSlowDesc": "Short range, reliable", - "radioConfigPresetMustMatch": "All devices in the mesh must use the same preset", - "radioConfigRebootWarning": "Changing radio settings will cause the device to reboot. All devices in your mesh network must use the same region and modem preset.", - "cannedModuleTitle": "Canned Messages Module", - "cannedModuleSaved": "Canned message configuration saved", - "cannedModuleSaveFailed": "Failed to save: {error}", - "cannedModuleSave": "Save", - "cannedModuleSectionOptions": "OPTIONS", - "cannedModuleEnabled": "Enabled", - "cannedModuleEnabledSubtitle": "Enable canned message module on device", - "cannedModuleSendBell": "Send Bell", - "cannedModuleSendBellSubtitle": "Send bell character with messages", - "cannedModuleSectionDeviceMessages": "DEVICE MESSAGES", - "cannedModuleMessages": "Messages", - "cannedModuleMessagesHint": "Message 1|Message 2|Message 3", - "cannedModuleMessagesHelp": "Separate messages with | (pipe). These messages will be stored on the device and can be sent using hardware inputs.", - "cannedModulePresetManual": "Manual Configuration", - "cannedModulePresetManualDesc": "Custom GPIO and event settings", - "cannedModulePresetRak": "RAK Rotary Encoder", - "cannedModulePresetRakDesc": "Pre-configured for RAK rotary encoder", + "radioConfigRegionThailand": "Таиланд", + "radioConfigRegionUkraine433": "Украина 433", + "radioConfigRegionUkraine868": "Украина 868", + "radioConfigRegionMalaysia433": "Малайзия 433", + "radioConfigRegionMalaysia919": "Малайзия 919", + "radioConfigRegionSingapore": "Сингапур", + "radioConfigRegionLora24": "LoRa 2.4ГГц", + "radioConfigPresetLongFast": "Дальний быстрый", + "radioConfigPresetLongFastDesc": "Наибольший радиус с хорошей скоростью", + "radioConfigPresetLongSlow": "Дальний медленный", + "radioConfigPresetLongSlowDesc": "Максимальный радиус, медленнее", + "radioConfigPresetVeryLongSlow": "Очень дальний медленный", + "radioConfigPresetVeryLongSlowDesc": "Экстремальный радиус, очень медленно", + "radioConfigPresetLongModerate": "Дальний умеренный", + "radioConfigPresetLongModerateDesc": "Хороший баланс", + "radioConfigPresetMediumFast": "Средний быстрый", + "radioConfigPresetMediumFastDesc": "Средний радиус, быстро", + "radioConfigPresetMediumSlow": "Средний медленный", + "radioConfigPresetMediumSlowDesc": "Средний радиус, надёжно", + "radioConfigPresetShortFast": "Ближний быстрый", + "radioConfigPresetShortFastDesc": "Малый радиус, максимальная скорость", + "radioConfigPresetShortSlow": "Ближний медленный", + "radioConfigPresetShortSlowDesc": "Малый радиус, надёжно", + "radioConfigPresetMustMatch": "Все устройства в сети должны использовать один и тот же пресет", + "radioConfigRebootWarning": "Изменение настроек радио приведёт к перезагрузке устройства. Все устройства в вашей сети должны использовать одинаковый регион и пресет модема.", + "cannedModuleTitle": "Модуль готовых сообщений", + "cannedModuleSaved": "Конфигурация готовых сообщений сохранена", + "cannedModuleSaveFailed": "Не удалось сохранить: {error}", + "cannedModuleSave": "Сохранить", + "cannedModuleSectionOptions": "ПАРАМЕТРЫ", + "cannedModuleEnabled": "Включено", + "cannedModuleEnabledSubtitle": "Включить модуль готовых сообщений на устройстве", + "cannedModuleSendBell": "Отправлять звонок", + "cannedModuleSendBellSubtitle": "Отправлять символ звонка вместе с сообщениями", + "cannedModuleSectionDeviceMessages": "СООБЩЕНИЯ УСТРОЙСТВА", + "cannedModuleMessages": "Сообщения", + "cannedModuleMessagesHint": "Сообщение 1|Сообщение 2|Сообщение 3", + "cannedModuleMessagesHelp": "Разделяйте сообщения символом | (вертикальная черта). Эти сообщения будут храниться на устройстве и могут отправляться с помощью аппаратных элементов управления.", + "cannedModulePresetManual": "Ручная настройка", + "cannedModulePresetManualDesc": "Пользовательские настройки GPIO и событий", + "cannedModulePresetRak": "Поворотный энкодер RAK", + "cannedModulePresetRakDesc": "Преднастроено для поворотного энкодера RAK", "cannedModulePresetM5Stack": "M5 Stack Card KB", - "cannedModulePresetM5StackDesc": "Pre-configured for Card KB / RAK Keypad", - "cannedModuleSectionPreset": "CONFIGURATION PRESET", - "cannedModuleSectionControlType": "CONTROL TYPE", - "cannedModuleControlRotary": "Rotary Encoder", - "cannedModuleControlRotaryDesc": "Dumb encoder sending pulses on A/B pins", - "cannedModuleControlUpDown": "Up/Down Buttons", - "cannedModuleControlUpDownDesc": "Uses A/B/Press definitions from input broker", - "cannedModuleSectionGpio": "GPIO INPUTS", - "cannedModuleGpioPinA": "Pin A", - "cannedModuleGpioPinB": "Pin B", - "cannedModuleGpioPressPin": "Press Pin", - "cannedModuleGpioPinUnset": "Unset", - "cannedModuleGpioPinLabel": "Pin {pin}", - "cannedModuleEventNone": "None", - "cannedModuleEventUp": "Up", - "cannedModuleEventDown": "Down", - "cannedModuleEventLeft": "Left", - "cannedModuleEventRight": "Right", - "cannedModuleEventSelect": "Select", - "cannedModuleEventBack": "Back", - "cannedModuleEventCancel": "Cancel", - "cannedModuleSectionKeyMapping": "KEY MAPPING", - "cannedModuleClockwiseEvent": "Clockwise Event", - "cannedModuleCounterClockwiseEvent": "Counter-Clockwise Event", - "cannedModulePressEvent": "Press Event", - "cannedModuleInfoCard": "This configures the device-side canned message module which allows sending predefined messages using hardware inputs like rotary encoders or buttons.", - "positionConfigLocationDisabled": "Location services are disabled. Enable GPS in your device settings.", - "positionConfigOpenSettings": "Open Settings", - "positionConfigPermissionDenied": "Location permission denied. Grant location access to use this feature.", - "positionConfigPermissionPermanentlyDenied": "Location permission permanently denied. Enable in your device settings.", - "positionConfigLocationUpdated": "Location updated from phone GPS", - "positionConfigLocationFailed": "Failed to get location: {error}", - "positionConfigSaved": "Position configuration saved", - "positionConfigSaveFailed": "Failed to save: {error}", - "positionConfigTitle": "Position", - "positionConfigSave": "Save", - "positionConfigSectionGpsMode": "GPS MODE", - "positionConfigSectionBroadcast": "BROADCAST SETTINGS", - "positionConfigSmartBroadcast": "Smart Broadcast", - "positionConfigSmartBroadcastSubtitle": "Only broadcast when position changes significantly", - "positionConfigBroadcastInterval": "Position Broadcast Interval", - "positionConfigBroadcastIntervalSubtitle": "The maximum time between position broadcasts", - "positionConfigGpsUpdateInterval": "GPS Update Interval", - "positionConfigGpsUpdateIntervalSubtitle": "How often the device GPS checks for position", - "positionConfigSectionFixed": "FIXED POSITION", - "positionConfigUseFixed": "Use Fixed Position", - "positionConfigUseFixedSubtitle": "Manually set position instead of using GPS", - "positionConfigLatitude": "Latitude", - "positionConfigLongitude": "Longitude", - "positionConfigAltitude": "Altitude (meters)", - "positionConfigGettingLocation": "Getting Location...", - "positionConfigUseCurrentLocation": "Use Current Location", - "positionConfigFixedInfo": "Fixed position is useful for stationary installations like routers or base stations.", - "positionConfigSectionSmartBroadcast": "SMART BROADCAST SETTINGS", - "positionConfigMinDistance": "Minimum Distance", - "positionConfigMinDistanceSubtitle": "Minimum distance moved before broadcasting", - "positionConfigMinInterval": "Minimum Interval", - "positionConfigMinIntervalSubtitle": "The fastest position updates will be sent if the minimum distance has been satisfied", - "positionConfigSectionFlags": "POSITION FLAGS", - "positionConfigFlagsInfo": "Optional fields to include in position messages. More flags means larger packets.", - "positionConfigFlagAltitude": "Include Altitude", - "positionConfigFlagAltitudeDesc": "Include altitude in position reports", - "positionConfigFlagSatsInView": "Include Sats in View", - "positionConfigFlagSatsInViewDesc": "Include number of satellites visible", - "positionConfigFlagSeqNumber": "Include Sequence Number", - "positionConfigFlagSeqNumberDesc": "Include position sequence number", - "positionConfigFlagTimestamp": "Include Timestamp", - "positionConfigFlagTimestampDesc": "Include GPS timestamp", - "positionConfigFlagHeading": "Include Heading", - "positionConfigFlagHeadingDesc": "Include heading/direction of travel", - "positionConfigFlagSpeed": "Include Speed", - "positionConfigFlagSpeedDesc": "Include ground speed", - "positionConfigFlagMsl": "Altitude is Mean Sea Level", - "positionConfigFlagMslDesc": "Report altitude as MSL instead of HAE", - "positionConfigFlagGeoidalSep": "Include Geoidal Separation", - "positionConfigFlagGeoidalSepDesc": "Include geoidal separation value", - "positionConfigFlagDop": "Include DOP", - "positionConfigFlagDopDesc": "Include dilution of precision (PDOP)", - "positionConfigFlagHvdop": "Use HDOP / VDOP", - "positionConfigFlagHvdopDesc": "Send separate HDOP/VDOP instead of PDOP", + "cannedModulePresetM5StackDesc": "Преднастроено для Card KB / RAK Keypad", + "cannedModuleSectionPreset": "ПРЕСЕТ КОНФИГУРАЦИИ", + "cannedModuleSectionControlType": "ТИП УПРАВЛЕНИЯ", + "cannedModuleControlRotary": "Поворотный энкодер", + "cannedModuleControlRotaryDesc": "Простой энкодер, отправляющий импульсы на контакты A/B", + "cannedModuleControlUpDown": "Кнопки вверх/вниз", + "cannedModuleControlUpDownDesc": "Использует определения A/B/нажатие из брокера входных данных", + "cannedModuleSectionGpio": "ВХОДЫ GPIO", + "cannedModuleGpioPinA": "Контакт A", + "cannedModuleGpioPinB": "Контакт B", + "cannedModuleGpioPressPin": "Контакт нажатия", + "cannedModuleGpioPinUnset": "Не задан", + "cannedModuleGpioPinLabel": "Контакт {pin}", + "cannedModuleEventNone": "Нет", + "cannedModuleEventUp": "Вверх", + "cannedModuleEventDown": "Вниз", + "cannedModuleEventLeft": "Влево", + "cannedModuleEventRight": "Вправо", + "cannedModuleEventSelect": "Выбрать", + "cannedModuleEventBack": "Назад", + "cannedModuleEventCancel": "Отмена", + "cannedModuleSectionKeyMapping": "НАЗНАЧЕНИЕ КЛАВИШ", + "cannedModuleClockwiseEvent": "Событие по часовой стрелке", + "cannedModuleCounterClockwiseEvent": "Событие против часовой стрелки", + "cannedModulePressEvent": "Событие нажатия", + "cannedModuleInfoCard": "Здесь настраивается модуль готовых сообщений на устройстве, позволяющий отправлять предопределённые сообщения с помощью аппаратных элементов управления — поворотных энкодеров или кнопок.", + "positionConfigLocationDisabled": "Службы геолокации отключены. Включите GPS в настройках устройства.", + "positionConfigOpenSettings": "Открыть настройки", + "positionConfigPermissionDenied": "Доступ к геолокации запрещён. Предоставьте разрешение на использование местоположения для этой функции.", + "positionConfigPermissionPermanentlyDenied": "Доступ к геолокации отклонён навсегда. Включите его в настройках устройства.", + "positionConfigLocationUpdated": "Местоположение обновлено из GPS телефона", + "positionConfigLocationFailed": "Не удалось получить местоположение: {error}", + "positionConfigSaved": "Конфигурация местоположения сохранена", + "positionConfigSaveFailed": "Не удалось сохранить: {error}", + "positionConfigTitle": "Местоположение", + "positionConfigSave": "Сохранить", + "positionConfigSectionGpsMode": "РЕЖИМ GPS", + "positionConfigSectionBroadcast": "НАСТРОЙКИ ТРАНСЛЯЦИИ", + "positionConfigSmartBroadcast": "Умная трансляция", + "positionConfigSmartBroadcastSubtitle": "Транслировать только при значительном изменении положения", + "positionConfigBroadcastInterval": "Интервал трансляции местоположения", + "positionConfigBroadcastIntervalSubtitle": "Максимальное время между трансляциями местоположения", + "positionConfigGpsUpdateInterval": "Интервал обновления GPS", + "positionConfigGpsUpdateIntervalSubtitle": "Как часто GPS устройства проверяет положение", + "positionConfigSectionFixed": "ФИКСИРОВАННОЕ МЕСТОПОЛОЖЕНИЕ", + "positionConfigUseFixed": "Использовать фиксированное местоположение", + "positionConfigUseFixedSubtitle": "Задать положение вручную вместо использования GPS", + "positionConfigLatitude": "Широта", + "positionConfigLongitude": "Долгота", + "positionConfigAltitude": "Высота (метры)", + "positionConfigGettingLocation": "Определение местоположения...", + "positionConfigUseCurrentLocation": "Использовать текущее местоположение", + "positionConfigFixedInfo": "Фиксированное местоположение полезно для стационарных устройств, таких как маршрутизаторы или базовые станции.", + "positionConfigSectionSmartBroadcast": "НАСТРОЙКИ УМНОЙ ТРАНСЛЯЦИИ", + "positionConfigMinDistance": "Минимальное расстояние", + "positionConfigMinDistanceSubtitle": "Минимальное расстояние перемещения для трансляции", + "positionConfigMinInterval": "Минимальный интервал", + "positionConfigMinIntervalSubtitle": "Максимальная частота отправки обновлений местоположения при выполнении условия минимального расстояния", + "positionConfigSectionFlags": "ФЛАГИ МЕСТОПОЛОЖЕНИЯ", + "positionConfigFlagsInfo": "Дополнительные поля для включения в сообщения о местоположении. Больше флагов означает большие пакеты.", + "positionConfigFlagAltitude": "Включить высоту", + "positionConfigFlagAltitudeDesc": "Включить высоту в отчёты о местоположении", + "positionConfigFlagSatsInView": "Включить видимые спутники", + "positionConfigFlagSatsInViewDesc": "Включить количество видимых спутников", + "positionConfigFlagSeqNumber": "Включить порядковый номер", + "positionConfigFlagSeqNumberDesc": "Включить порядковый номер позиции", + "positionConfigFlagTimestamp": "Включить метку времени", + "positionConfigFlagTimestampDesc": "Включить метку времени GPS", + "positionConfigFlagHeading": "Включить курс", + "positionConfigFlagHeadingDesc": "Включить курс/направление движения", + "positionConfigFlagSpeed": "Включить скорость", + "positionConfigFlagSpeedDesc": "Включить скорость относительно земли", + "positionConfigFlagMsl": "Высота над уровнем моря", + "positionConfigFlagMslDesc": "Сообщать высоту как MSL, а не HAE", + "positionConfigFlagGeoidalSep": "Включить геоидальное разделение", + "positionConfigFlagGeoidalSepDesc": "Включить значение геоидального разделения", + "positionConfigFlagDop": "Включить DOP", + "positionConfigFlagDopDesc": "Включить снижение точности (PDOP)", + "positionConfigFlagHvdop": "Использовать HDOP / VDOP", + "positionConfigFlagHvdopDesc": "Отправлять отдельные HDOP/VDOP вместо PDOP", "positionConfigSectionGpsGpio": "GPS GPIO", - "positionConfigGpsRxGpio": "GPS RX GPIO", - "positionConfigGpsRxGpioDesc": "GPIO pin for GPS RX signal", - "positionConfigGpsTxGpio": "GPS TX GPIO", - "positionConfigGpsTxGpioDesc": "GPIO pin for GPS TX signal", - "positionConfigGpsEnableGpio": "GPS Enable GPIO", - "positionConfigGpsEnableGpioDesc": "GPIO pin to control GPS power", - "positionConfigGpioPinUnset": "Unset", - "positionConfigGpioPinLabel": "Pin {pin}", - "positionConfigGpsModeEnabled": "Enabled", - "positionConfigGpsModeEnabledDesc": "GPS is active and reports position", - "positionConfigGpsModeDisabled": "Disabled", - "positionConfigGpsModeDisabledDesc": "GPS hardware is present but turned off", - "positionConfigGpsModeNotPresent": "Not Present", - "positionConfigGpsModeNotPresentDesc": "No GPS hardware on this device", - "positionConfigIntervalNever": "Never", - "positionConfigIntervalDefault": "Default", - "positionConfigIntervalOnBoot": "On Boot Only", - "powerConfigSaved": "Power configuration saved", - "powerConfigSaveFailed": "Failed to save: {error}", - "powerConfigDisabled": "Disabled", - "powerConfigTitle": "Power", - "powerConfigSave": "Save", - "powerConfigSectionPower": "POWER", - "powerConfigPowerSaving": "Power Saving Mode", - "powerConfigPowerSavingSubtitle": "Reduce power consumption when idle", - "powerConfigShutdownOnPowerLoss": "Shutdown on Power Loss", - "powerConfigShutdownOnPowerLossSubtitle": "Power off device when external power removed", - "powerConfigShutdownDelay": "Shutdown Delay", - "powerConfigShutdownDelaySubtitle": "Time to wait before shutdown after power loss", - "powerConfigSectionBattery": "BATTERY", - "powerConfigAdcMultiplierOverride": "ADC Multiplier Override", - "powerConfigAdcMultiplierOverrideSubtitle": "Override voltage divider ratio for battery reading", - "powerConfigAdcMultiplier": "ADC Multiplier", - "powerConfigAdcMultiplierHint": "Voltage divider ratio (2.0 - 6.0)", - "powerConfigSectionSleep": "SLEEP SETTINGS", - "powerConfigWaitBluetooth": "Wait for Bluetooth", - "powerConfigWaitBluetoothSubtitle": "Time to wait for Bluetooth connection before sleep", - "powerConfigLightSleep": "Light Sleep Duration", - "powerConfigLightSleepSubtitle": "Duration of light sleep before deep sleep", - "powerConfigDeepSleep": "Deep Sleep Duration", - "powerConfigDeepSleepSubtitle": "Duration of deep sleep (SDS)", - "powerConfigMinWakeTime": "Minimum Wake Time", - "powerConfigMinWakeTimeSubtitle": "Minimum time device stays awake", - "powerConfigWarning": "Power settings affect battery life and device responsiveness. Aggressive sleep settings may cause delays in receiving messages.", - "networkConfigNoWifiTitle": "No WiFi Hardware", - "networkConfigNoWifiBody": "This device does not have WiFi hardware. Enabling WiFi will make the device unreachable via BLE. Continue?", - "networkConfigSaveAnyway": "Save Anyway", - "networkConfigSaved": "Network configuration saved", - "networkConfigSaveFailed": "Failed to save: {error}", - "networkConfigTitle": "Network", - "networkConfigSave": "Save", + "positionConfigGpsRxGpio": "GPIO RX GPS", + "positionConfigGpsRxGpioDesc": "Контакт GPIO для сигнала RX GPS", + "positionConfigGpsTxGpio": "GPIO TX GPS", + "positionConfigGpsTxGpioDesc": "Контакт GPIO для сигнала TX GPS", + "positionConfigGpsEnableGpio": "GPIO включения GPS", + "positionConfigGpsEnableGpioDesc": "Контакт GPIO для управления питанием GPS", + "positionConfigGpioPinUnset": "Не задан", + "positionConfigGpioPinLabel": "Контакт {pin}", + "positionConfigGpsModeEnabled": "Включено", + "positionConfigGpsModeEnabledDesc": "GPS активен и определяет местоположение", + "positionConfigGpsModeDisabled": "Отключено", + "positionConfigGpsModeDisabledDesc": "GPS присутствует, но выключен", + "positionConfigGpsModeNotPresent": "Отсутствует", + "positionConfigGpsModeNotPresentDesc": "На этом устройстве нет GPS", + "positionConfigIntervalNever": "Никогда", + "positionConfigIntervalDefault": "По умолчанию", + "positionConfigIntervalOnBoot": "Только при загрузке", + "powerConfigSaved": "Конфигурация питания сохранена", + "powerConfigSaveFailed": "Не удалось сохранить: {error}", + "powerConfigDisabled": "Отключено", + "powerConfigTitle": "Питание", + "powerConfigSave": "Сохранить", + "powerConfigSectionPower": "ПИТАНИЕ", + "powerConfigPowerSaving": "Режим энергосбережения", + "powerConfigPowerSavingSubtitle": "Снижать потребление энергии в режиме ожидания", + "powerConfigShutdownOnPowerLoss": "Выключение при потере питания", + "powerConfigShutdownOnPowerLossSubtitle": "Выключать устройство при отключении внешнего питания", + "powerConfigShutdownDelay": "Задержка выключения", + "powerConfigShutdownDelaySubtitle": "Время ожидания перед выключением после потери питания", + "powerConfigSectionBattery": "АККУМУЛЯТОР", + "powerConfigAdcMultiplierOverride": "Переопределение множителя АЦП", + "powerConfigAdcMultiplierOverrideSubtitle": "Переопределить коэффициент делителя напряжения для измерения заряда", + "powerConfigAdcMultiplier": "Множитель АЦП", + "powerConfigAdcMultiplierHint": "Коэффициент делителя напряжения (2.0 – 6.0)", + "powerConfigSectionSleep": "НАСТРОЙКИ СНА", + "powerConfigWaitBluetooth": "Ожидание Bluetooth", + "powerConfigWaitBluetoothSubtitle": "Время ожидания подключения Bluetooth перед переходом в сон", + "powerConfigLightSleep": "Длительность лёгкого сна", + "powerConfigLightSleepSubtitle": "Продолжительность лёгкого сна перед глубоким сном", + "powerConfigDeepSleep": "Длительность глубокого сна", + "powerConfigDeepSleepSubtitle": "Продолжительность глубокого сна (SDS)", + "powerConfigMinWakeTime": "Минимальное время активности", + "powerConfigMinWakeTimeSubtitle": "Минимальное время активности устройства", + "powerConfigWarning": "Настройки питания влияют на время работы от аккумулятора и отзывчивость устройства. Агрессивные настройки сна могут вызвать задержки при получении сообщений.", + "networkConfigNoWifiTitle": "Нет оборудования WiFi", + "networkConfigNoWifiBody": "Это устройство не имеет оборудования WiFi. Включение WiFi сделает устройство недоступным через BLE. Продолжить?", + "networkConfigSaveAnyway": "Всё равно сохранить", + "networkConfigSaved": "Конфигурация сети сохранена", + "networkConfigSaveFailed": "Не удалось сохранить: {error}", + "networkConfigTitle": "Сеть", + "networkConfigSave": "Сохранить", "networkConfigSectionWifi": "WI-FI", - "networkConfigNoWifiWarning": "This device does not have WiFi hardware. Enabling WiFi will make the device unreachable via Bluetooth.", - "networkConfigWifiEnabled": "WiFi Enabled", - "networkConfigWifiEnabledSubtitle": "Connect to a WiFi network", - "networkConfigSsid": "Network Name (SSID)", - "networkConfigPassword": "Password", + "networkConfigNoWifiWarning": "Это устройство не имеет оборудования WiFi. Включение WiFi сделает устройство недоступным через Bluetooth.", + "networkConfigWifiEnabled": "WiFi включён", + "networkConfigWifiEnabledSubtitle": "Подключиться к сети WiFi", + "networkConfigSsid": "Имя сети (SSID)", + "networkConfigPassword": "Пароль", "networkConfigSectionEthernet": "ETHERNET", - "networkConfigEthernetEnabled": "Ethernet Enabled", - "networkConfigEthernetEnabledSubtitle": "Use wired Ethernet connection", - "networkConfigSectionIpAddress": "IP ADDRESS", - "networkConfigSectionTimeSync": "TIME SYNC", - "networkConfigNtpServer": "NTP Server", - "networkConfigNtpServerSubtitle": "Server used for time synchronization", - "networkConfigSectionUdpBroadcast": "UDP BROADCAST", - "networkConfigUdpBroadcast": "UDP Broadcast", - "networkConfigUdpBroadcastSubtitle": "Broadcast packets over local network", - "networkConfigUdpBroadcastInfo": "Enables broadcasting mesh packets via UDP over the local network. Useful for connecting multiple instances.", - "networkConfigSectionLogging": "LOGGING", - "networkConfigNoHardwareInfo": "Network settings are only available on devices with WiFi or Ethernet hardware support.", + "networkConfigEthernetEnabled": "Ethernet включён", + "networkConfigEthernetEnabledSubtitle": "Использовать проводное подключение Ethernet", + "networkConfigSectionIpAddress": "IP-АДРЕС", + "networkConfigSectionTimeSync": "СИНХРОНИЗАЦИЯ ВРЕМЕНИ", + "networkConfigNtpServer": "NTP-сервер", + "networkConfigNtpServerSubtitle": "Сервер для синхронизации времени", + "networkConfigSectionUdpBroadcast": "UDP-ТРАНСЛЯЦИЯ", + "networkConfigUdpBroadcast": "UDP-трансляция", + "networkConfigUdpBroadcastSubtitle": "Транслировать пакеты через локальную сеть", + "networkConfigUdpBroadcastInfo": "Включает трансляцию пакетов сети через UDP по локальной сети. Полезно для соединения нескольких экземпляров.", + "networkConfigSectionLogging": "ВЕДЕНИЕ ЖУРНАЛА", + "networkConfigNoHardwareInfo": "Настройки сети доступны только на устройствах с поддержкой WiFi или Ethernet.", "networkConfigIpModeDhcp": "DHCP", - "networkConfigIpModeDhcpDesc": "Automatically obtain IP address", - "networkConfigIpModeStatic": "Static", - "networkConfigIpModeStaticDesc": "Use manually configured IP address", - "networkConfigRsyslogServer": "Rsyslog Server", - "networkConfigRsyslogServerSubtitle": "Remote syslog server for device logs", - "ringtoneTitle": "Ringtone", - "ringtoneDeviceRingtone": "Device Ringtone", - "ringtoneCurrentlySet": "Currently set on device", - "ringtoneSaved": "Ringtone saved to device", - "ringtoneSaveFailed": "Failed to save ringtone: {error}", - "ringtoneAccessPremium": "Access premium ringtone presets", - "ringtoneCustomAdded": "Custom ringtone added", - "ringtoneRtttlGuideTitle": "RTTTL Format Guide", - "ringtoneRtttlWhat": "What is RTTTL?", - "ringtoneRtttlWhatContent": "Ring Tone Text Transfer Language (RTTTL) is a format developed by Nokia for encoding ringtones as text strings.", - "ringtoneRtttlFormat": "Format", - "ringtoneRtttlHeader": "Header", + "networkConfigIpModeDhcpDesc": "Автоматически получить IP-адрес", + "networkConfigIpModeStatic": "Статический", + "networkConfigIpModeStaticDesc": "Использовать настроенный вручную IP-адрес", + "networkConfigRsyslogServer": "Сервер Rsyslog", + "networkConfigRsyslogServerSubtitle": "Удалённый сервер syslog для журналов устройства", + "ringtoneTitle": "Рингтон", + "ringtoneDeviceRingtone": "Рингтон устройства", + "ringtoneCurrentlySet": "Установлен на устройстве", + "ringtoneSaved": "Рингтон сохранён на устройстве", + "ringtoneSaveFailed": "Не удалось сохранить рингтон: {error}", + "ringtoneAccessPremium": "Доступ к премиум-пресетам рингтонов", + "ringtoneCustomAdded": "Пользовательский рингтон добавлен", + "ringtoneRtttlGuideTitle": "Руководство по формату RTTTL", + "ringtoneRtttlWhat": "Что такое RTTTL?", + "ringtoneRtttlWhatContent": "Ring Tone Text Transfer Language (RTTTL) — формат, разработанный Nokia для кодирования рингтонов в виде текстовых строк.", + "ringtoneRtttlFormat": "Формат", + "ringtoneRtttlHeader": "Заголовок", "ringtoneRtttlHeaderContent": "name:d=duration,o=octave,b=bpm", - "ringtoneRtttlNotes": "Notes", - "ringtoneRtttlNotesContent": "duration, note, octave (e.g., 8c5 = eighth note C in octave 5)", - "ringtoneRtttlExample": "Example", - "ringtoneRtttlComposerTip": "Try Nokia Composer online to create and preview RTTTL strings", - "ringtoneRtttlHelp": "RTTTL Help", - "ringtoneSave": "Save", - "ringtoneSectionRtttl": "RTTTL STRING", - "ringtoneRtttlHint": "Paste or select an RTTTL ringtone...", - "ringtoneStop": "Stop", - "ringtonePreview": "Preview", - "ringtoneClear": "Clear", - "ringtoneTapPreview": "Tap Preview to hear, then Save to device", - "ringtoneSectionLibrary": "RINGTONE LIBRARY", - "ringtoneBrowseCount": "Browse {count} Ringtones", - "ringtoneBrowseSubtitle": "Search classic tunes, TV themes, movie soundtracks, and more", - "ringtoneSectionSelected": "SELECTED RINGTONE", - "ringtoneSectionBuiltIn": "BUILT-IN PRESETS", - "ringtoneSectionCustom": "CUSTOM PRESETS", - "ringtoneAdd": "Add", - "ringtoneNoCustom": "No custom ringtones", - "ringtoneNoCustomBody": "Tap \"Add\" to create your own presets", - "ringtoneFindDeviceTip": "Tip: Find your device", - "ringtoneFindDeviceBody": "Send a message with the bell emoji (🔔) to make your device play the ringtone.", - "ringtoneNameRequired": "Name is required", - "ringtoneDefaultDescription": "Custom ringtone", - "ringtoneAddCustomTitle": "Add Custom Ringtone", - "ringtoneAddCustomSubtitle": "Create a custom RTTTL ringtone preset", - "ringtoneAddCustomName": "Name", - "ringtoneAddCustomRtttl": "RTTTL String", - "ringtoneAddCustomDescription": "Description (optional)", - "ringtoneLibraryTitle": "Ringtone Library", - "ringtoneLibrarySearchHint": "Search by song, artist, or theme...", - "ringtoneLibraryPopularPicks": "Popular Picks", - "ringtoneLibraryNoResults": "No results found", - "ringtoneLibraryStartTyping": "Start typing to search", - "ringtoneLibraryTryDifferent": "Try a different search term", - "ringtoneLibrarySearchCount": "Search {count} available tones", - "ringtoneValidationEmpty": "RTTTL string cannot be empty", - "ringtoneValidationTooLong": "Too long: {length}/{max} characters. Ringtone will be truncated.", - "ringtoneValidationMissingColons": "Invalid format: missing colons. Expected name:defaults:notes", - "ringtoneValidationInvalidFormat": "Invalid format: expected name:defaults:notes", - "ringtoneValidationInvalidDefaults": "Invalid defaults: expected d=duration, o=octave, b=bpm", - "ringtoneValidationNoNotes": "No notes found in RTTTL string", - "ringtoneValidationInvalidNote": "Invalid note: \"{note}\"", - "ringtoneValidationNoValidNotes": "No valid notes found", - "accountSubTitle": "Account", - "accountSubSectionAccount": "ACCOUNT", - "accountSubSectionPremium": "PREMIUM", - "accountSubSectionManage": "MANAGE", - "accountSubGuestAccount": "Guest Account", - "accountSubSignedIn": "Signed In", - "accountSubLinkedAccounts": "Linked accounts", - "accountSubLinkEmailPrompt": "Link an email to keep your data across devices", - "accountSubLinkAccountBtn": "Link Account", - "accountSubMfaRequiresInternet": "Two-factor authentication requires an internet connection.", - "accountSubSignOutBtn": "Sign Out", - "accountSubSignInToSync": "Sign in to sync across devices", - "accountSubLocalDataAvailable": "Your local data is always available", - "accountSubContinueGoogle": "Continue with Google", - "accountSubContinueApple": "Continue with Apple", - "accountSubContinueGitHub": "Continue with GitHub", - "accountSubContinueX": "Continue with X", - "accountSubExpiresToday": "Expires today", - "accountSubExpiresTomorrow": "Expires tomorrow", - "accountSubExpiresDate": "Expires {day} {month}", - "accountSubCancelledExpires": "Cancelled · {expiresText}", - "accountSubPaymentIssue": "Payment issue - please update", - "accountSubSignInToSyncShort": "Sign in to sync", - "accountSubMonthlySubscription": "Monthly subscription", - "accountSubSubscriptionExpired": "Subscription expired", - "accountSubSignInToEnable": "Sign in above to enable", - "accountSubSyncAllDevices": "Sync across all your devices", - "accountSubBadgeCancelled": "CANCELLED", - "accountSubBadgeActive": "ACTIVE", - "accountSubBadgeExpired": "EXPIRED", - "accountSubCloudSync": "Cloud Sync", - "accountSubWontRenew": "Your subscription won't renew. You can resubscribe anytime.", - "accountSubFeatureNodedex": "NodeDex — encounters, tags, notes", - "accountSubFeatureAutomations": "Automations — rules and triggers", - "accountSubFeatureWidgets": "Custom Widgets — layouts and data", - "accountSubFeatureBackup": "Backup — restore after reinstall or new phone", - "accountSubFeatureOffline": "Works fully offline without it", - "accountSubRenewSubscription": "Renew Subscription", - "accountSubManageSubscription": "Manage Subscription", - "accountSubSignInToSubscribe": "Sign in to subscribe", - "accountSubSubRequiresInternet": "Subscriptions require an internet connection.", - "accountSubRenew": "Renew", - "accountSubSubscribe": "Subscribe", - "accountSubCouldNotLoadStatus": "Could not load subscription status", - "accountSubFeaturePacks": "Feature Packs", - "accountSubAllUnlocked": "All features unlocked!", - "accountSubOneTimePurchases": "One-time purchases · {owned} of {total}", - "accountSubViewFeatures": "View Features", - "accountSubPremiumRequiresInternet": "Premium features require an internet connection to purchase.", - "accountSubViewAndPurchase": "View & Purchase", - "accountSubRestorePurchases": "Restore Purchases", - "accountSubRestorePurchasesSubtitle": "Restore previously purchased items", - "accountSubRestoreRequiresInternet": "Restoring purchases requires an internet connection.", - "accountSubPurchasesRestored": "Purchases restored successfully!", - "accountSubPurchasesAlreadyActive": "Your purchases are already active", - "accountSubNoPurchasesFound": "No purchases found to restore", - "accountSubTermsOfService": "Terms of Service", - "accountSubPrivacyPolicy": "Privacy Policy", - "accountSubSignInRequiresInternet": "Sign-in requires an internet connection.", - "accountSubCannotConnectSignIn": "Unable to connect to sign-in services. Check your internet connection and try again.", - "accountSubSignInFailed": "Sign in failed: {message}", - "accountSubSignInFailedRetry": "Sign in failed. Please try again.", - "accountSubLinkGitHubTitle": "Link GitHub Account", - "accountSubAccountExistsLinking": "An account with {email} already exists using {provider}.\n\nSign in with {provider} to link your GitHub account?", - "accountSubSignInWithProvider": "Sign in with {provider}", - "accountSubGitHubLinked": "GitHub account linked successfully!", - "accountSubFailedLinkAccounts": "Failed to link accounts", - "accountSubSignOutRequiresInternet": "Signing out requires an internet connection.", - "accountSubSignOutConfirmTitle": "Sign Out", - "accountSubSignOutConfirmMsg": "Are you sure you want to sign out?", - "accountSubSignedOutSuccess": "Signed out", - "accountSubGenericError": "Error: {error}", - "accountSubLinkAccountSheetTitle": "Link Account", - "accountSubLinkSignInMethod": "Link a sign-in method to keep your data", - "accountSubLinkWithGoogle": "Link with Google", - "accountSubLinkWithApple": "Link with Apple", - "accountSubLinkWithX": "Link with X", - "accountSubManageSubRequiresInternet": "Managing subscriptions requires an internet connection.", - "accountSubIosManageHint": "Go to Settings > Apple ID > Subscriptions to manage", - "accountSubAndroidManageHint": "Go to Play Store > Payments & Subscriptions to manage", - "accountSubGuestName": "Guest", - "accountSubTapToEditProfile": "Tap to edit profile", - "accountSubSignInToCreateProfile": "Sign in to create profile", - "accountSubTwoFactorAuth": "Two-Factor Authentication", - "accountSubBadgeOffline": "Offline", - "accountSubBadgeUnavailable": "Unavailable", - "accountSubBadgeOn": "ON", - "accountSubSyncSyncing": "Syncing", - "accountSubSyncSynced": "Synced", - "accountSubSyncError": "Error", - "accountSubSyncReady": "Ready", - "accountSubSyncOffline": "Offline", - "accountSubMonthJanuary": "January", - "accountSubMonthFebruary": "February", - "accountSubMonthMarch": "March", - "accountSubMonthApril": "April", - "accountSubMonthMay": "May", - "accountSubMonthJune": "June", - "accountSubMonthJuly": "July", - "accountSubMonthAugust": "August", - "accountSubMonthSeptember": "September", - "accountSubMonthOctober": "October", - "accountSubMonthNovember": "November", - "accountSubMonthDecember": "December", - "accountSubUnlockCloudSync": "Unlock Cloud Sync", - "accountSubSyncBackupAll": "Sync and back up your mesh data across all your devices", - "accountSubCouldNotLoadPrices": "Could not load prices", - "accountSubSubActivated": "Subscription activated!", - "accountSubPurchaseFailed": "Purchase failed", - "accountSubAutoRenewDisclaimer": "Subscriptions auto-renew unless cancelled at least 24 hours before the end of the current period.", - "accountSubYearlySave": "Yearly (Save 44%)", - "accountSubMonthlyProduct": "Monthly", - "accountSubLinkingRequiresInternet": "Linking an account requires an internet connection.", - "accountSubConfirm": "Confirm", - "accountSubCancel": "Cancel", - "dataExportTitle": "Export Data", - "dataExportSectionMessages": "Messages", - "dataExportSectionTelemetry": "Telemetry", - "dataExportSectionPositionData": "Position Data", - "dataExportSectionAutomations": "Automations", - "dataExportSectionNetwork": "Network", - "dataExportSectionCompleteExport": "Complete Export", - "dataExportSectionClearData": "Clear Data", - "dataExportAllMessages": "All Messages", - "dataExportAllMessagesSubtitle": "Export all channel and direct messages", - "dataExportDeviceMetrics": "Device Metrics", - "dataExportDeviceMetricsSubtitle": "Battery, voltage, utilization logs", - "dataExportEnvironmentMetrics": "Environment Metrics", - "dataExportEnvironmentMetricsSubtitle": "Temperature, humidity, pressure logs", - "dataExportAirQuality": "Air Quality", - "dataExportAirQualitySubtitle": "PM2.5, PM10, CO2 readings", - "dataExportPowerMetrics": "Power Metrics", - "dataExportPowerMetricsSubtitle": "Channel voltage and current", - "dataExportPositionHistory": "Position History", - "dataExportPositionHistorySubtitle": "GPS position logs with timestamps", - "dataExportRoutes": "Routes", - "dataExportRoutesSubtitle": "Recorded routes and tracks", - "dataExportTraceroutes": "Traceroutes", - "dataExportTraceroutesSubtitle": "Network path analysis", - "dataExportAutomationRules": "Automation Rules", - "dataExportAutomationRulesSubtitle": "All automation configurations", - "dataExportExecutionLog": "Execution Log", - "dataExportExecutionLogSubtitle": "Automation trigger history with results", - "dataExportNodeList": "Node List", - "dataExportNodeListSubtitle": "All discovered nodes with details", - "dataExportExportAll": "Export All Data", - "dataExportExportAllSubtitle": "Complete backup of all app data", - "dataExportClearAll": "Clear All Data", - "dataExportClearAllSubtitle": "Delete all stored telemetry, routes, and logs", - "dataExportInfoText": "Exported files can be shared via email, AirDrop, or saved to Files. Tap the trash icon to clear specific data.", + "ringtoneRtttlNotes": "Ноты", + "ringtoneRtttlNotesContent": "длительность, нота, октава (например, 8c5 = восьмая нота C в октаве 5)", + "ringtoneRtttlExample": "Пример", + "ringtoneRtttlComposerTip": "Попробуйте Nokia Composer онлайн для создания и предварительного прослушивания RTTTL-строк", + "ringtoneRtttlHelp": "Справка по RTTTL", + "ringtoneSave": "Сохранить", + "ringtoneSectionRtttl": "RTTTL СТРОКА", + "ringtoneRtttlHint": "Вставьте или выберите RTTTL рингтон...", + "ringtoneStop": "Стоп", + "ringtonePreview": "Прослушать", + "ringtoneClear": "Очистить", + "ringtoneTapPreview": "Нажмите «Прослушать», затем «Сохранить на устройство»", + "ringtoneSectionLibrary": "БИБЛИОТЕКА РИНГТОНОВ", + "ringtoneBrowseCount": "Просмотреть {count} рингтонов", + "ringtoneBrowseSubtitle": "Ищите классические мелодии, темы из сериалов, саундтреки к фильмам и многое другое", + "ringtoneSectionSelected": "ВЫБРАННЫЙ РИНГТОН", + "ringtoneSectionBuiltIn": "ВСТРОЕННЫЕ ПРЕСЕТЫ", + "ringtoneSectionCustom": "ПОЛЬЗОВАТЕЛЬСКИЕ ПРЕСЕТЫ", + "ringtoneAdd": "Добавить", + "ringtoneNoCustom": "Нет пользовательских рингтонов", + "ringtoneNoCustomBody": "Нажмите «Добавить», чтобы создать свои пресеты", + "ringtoneFindDeviceTip": "Совет: найдите своё устройство", + "ringtoneFindDeviceBody": "Отправьте сообщение с эмодзи колокольчика (🔔), чтобы устройство воспроизвело рингтон.", + "ringtoneNameRequired": "Необходимо указать название", + "ringtoneDefaultDescription": "Пользовательский рингтон", + "ringtoneAddCustomTitle": "Добавить пользовательский рингтон", + "ringtoneAddCustomSubtitle": "Создать пользовательский RTTTL пресет рингтона", + "ringtoneAddCustomName": "Название", + "ringtoneAddCustomRtttl": "RTTTL строка", + "ringtoneAddCustomDescription": "Описание (необязательно)", + "ringtoneLibraryTitle": "Библиотека рингтонов", + "ringtoneLibrarySearchHint": "Поиск по песне, исполнителю или теме...", + "ringtoneLibraryPopularPicks": "Популярные", + "ringtoneLibraryNoResults": "Ничего не найдено", + "ringtoneLibraryStartTyping": "Начните вводить для поиска", + "ringtoneLibraryTryDifferent": "Попробуйте другой поисковый запрос", + "ringtoneLibrarySearchCount": "Поиск по {count} доступным мелодиям", + "ringtoneValidationEmpty": "RTTTL строка не может быть пустой", + "ringtoneValidationTooLong": "Слишком длинная: {length}/{max} символов. Рингтон будет обрезан.", + "ringtoneValidationMissingColons": "Неверный формат: отсутствуют двоеточия. Ожидается name:defaults:notes", + "ringtoneValidationInvalidFormat": "Неверный формат: ожидается name:defaults:notes", + "ringtoneValidationInvalidDefaults": "Неверные значения по умолчанию: ожидается d=duration, o=octave, b=bpm", + "ringtoneValidationNoNotes": "В RTTTL строке не найдено нот", + "ringtoneValidationInvalidNote": "Неверная нота: \"{note}\"", + "ringtoneValidationNoValidNotes": "Не найдено допустимых нот", + "accountSubTitle": "Аккаунт", + "accountSubSectionAccount": "АККАУНТ", + "accountSubSectionPremium": "ПРЕМИУМ", + "accountSubSectionManage": "УПРАВЛЕНИЕ", + "accountSubGuestAccount": "Гостевой аккаунт", + "accountSubSignedIn": "Выполнен вход", + "accountSubLinkedAccounts": "Связанные аккаунты", + "accountSubLinkEmailPrompt": "Привяжите email, чтобы сохранить данные на всех устройствах", + "accountSubLinkAccountBtn": "Привязать аккаунт", + "accountSubMfaRequiresInternet": "Двухфакторная аутентификация требует подключения к интернету.", + "accountSubSignOutBtn": "Выйти", + "accountSubSignInToSync": "Войдите, чтобы синхронизировать данные на всех устройствах", + "accountSubLocalDataAvailable": "Ваши локальные данные всегда доступны", + "accountSubContinueGoogle": "Продолжить с Google", + "accountSubContinueApple": "Продолжить с Apple", + "accountSubContinueGitHub": "Продолжить с GitHub", + "accountSubContinueX": "Продолжить с X", + "accountSubExpiresToday": "Истекает сегодня", + "accountSubExpiresTomorrow": "Истекает завтра", + "accountSubExpiresDate": "Истекает {day} {month}", + "accountSubCancelledExpires": "Отменена · {expiresText}", + "accountSubPaymentIssue": "Проблема с оплатой — обновите данные", + "accountSubSignInToSyncShort": "Войдите для синхронизации", + "accountSubMonthlySubscription": "Ежемесячная подписка", + "accountSubSubscriptionExpired": "Подписка истекла", + "accountSubSignInToEnable": "Войдите выше, чтобы активировать", + "accountSubSyncAllDevices": "Синхронизация на всех ваших устройствах", + "accountSubBadgeCancelled": "ОТМЕНЕНА", + "accountSubBadgeActive": "АКТИВНА", + "accountSubBadgeExpired": "ИСТЕКЛА", + "accountSubCloudSync": "Облачная синхронизация", + "accountSubWontRenew": "Ваша подписка не будет продлена. Вы можете подписаться повторно в любое время.", + "accountSubFeatureNodedex": "NodeDex — встречи, метки, заметки", + "accountSubFeatureAutomations": "Автоматизации — правила и триггеры", + "accountSubFeatureWidgets": "Пользовательские виджеты — макеты и данные", + "accountSubFeatureBackup": "Резервная копия — восстановление после переустановки или на новом телефоне", + "accountSubFeatureOffline": "Полностью работает без интернета", + "accountSubRenewSubscription": "Продлить подписку", + "accountSubManageSubscription": "Управление подпиской", + "accountSubSignInToSubscribe": "Войдите, чтобы подписаться", + "accountSubSubRequiresInternet": "Для оформления подписки требуется подключение к интернету.", + "accountSubRenew": "Продлить", + "accountSubSubscribe": "Подписаться", + "accountSubCouldNotLoadStatus": "Не удалось загрузить статус подписки", + "accountSubFeaturePacks": "Пакеты функций", + "accountSubAllUnlocked": "Все функции разблокированы!", + "accountSubOneTimePurchases": "Разовые покупки · {owned} из {total}", + "accountSubViewFeatures": "Просмотр функций", + "accountSubPremiumRequiresInternet": "Для покупки премиум-функций требуется подключение к интернету.", + "accountSubViewAndPurchase": "Просмотр и покупка", + "accountSubRestorePurchases": "Восстановить покупки", + "accountSubRestorePurchasesSubtitle": "Восстановить ранее приобретённые элементы", + "accountSubRestoreRequiresInternet": "Для восстановления покупок требуется подключение к интернету.", + "accountSubPurchasesRestored": "Покупки успешно восстановлены!", + "accountSubPurchasesAlreadyActive": "Ваши покупки уже активны", + "accountSubNoPurchasesFound": "Покупок для восстановления не найдено", + "accountSubTermsOfService": "Условия использования", + "accountSubPrivacyPolicy": "Политика конфиденциальности", + "accountSubSignInRequiresInternet": "Для входа требуется подключение к интернету.", + "accountSubCannotConnectSignIn": "Не удаётся подключиться к службе входа. Проверьте подключение к интернету и повторите попытку.", + "accountSubSignInFailed": "Ошибка входа: {message}", + "accountSubSignInFailedRetry": "Ошибка входа. Пожалуйста, попробуйте снова.", + "accountSubLinkGitHubTitle": "Привязать аккаунт GitHub", + "accountSubAccountExistsLinking": "Аккаунт с адресом {email} уже существует и использует {provider}.\n\nВойти через {provider}, чтобы привязать аккаунт GitHub?", + "accountSubSignInWithProvider": "Войти через {provider}", + "accountSubGitHubLinked": "Аккаунт GitHub успешно привязан!", + "accountSubFailedLinkAccounts": "Не удалось связать аккаунты", + "accountSubSignOutRequiresInternet": "Для выхода требуется подключение к интернету.", + "accountSubSignOutConfirmTitle": "Выход", + "accountSubSignOutConfirmMsg": "Вы уверены, что хотите выйти?", + "accountSubSignedOutSuccess": "Выход выполнен", + "accountSubGenericError": "Ошибка: {error}", + "accountSubLinkAccountSheetTitle": "Привязать аккаунт", + "accountSubLinkSignInMethod": "Привяжите способ входа, чтобы сохранить свои данные", + "accountSubLinkWithGoogle": "Привязать через Google", + "accountSubLinkWithApple": "Привязать через Apple", + "accountSubLinkWithX": "Привязать через X", + "accountSubManageSubRequiresInternet": "Для управления подпиской требуется подключение к интернету.", + "accountSubIosManageHint": "Перейдите в Настройки > Apple ID > Подписки для управления", + "accountSubAndroidManageHint": "Перейдите в Play Store > Платежи и подписки для управления", + "accountSubGuestName": "Гость", + "accountSubTapToEditProfile": "Нажмите, чтобы редактировать профиль", + "accountSubSignInToCreateProfile": "Войдите, чтобы создать профиль", + "accountSubTwoFactorAuth": "Двухфакторная аутентификация", + "accountSubBadgeOffline": "Не в сети", + "accountSubBadgeUnavailable": "Недоступно", + "accountSubBadgeOn": "ВКЛ", + "accountSubSyncSyncing": "Синхронизация", + "accountSubSyncSynced": "Синхронизировано", + "accountSubSyncError": "Ошибка", + "accountSubSyncReady": "Готово", + "accountSubSyncOffline": "Не в сети", + "accountSubMonthJanuary": "Январь", + "accountSubMonthFebruary": "Февраль", + "accountSubMonthMarch": "Март", + "accountSubMonthApril": "Апрель", + "accountSubMonthMay": "Май", + "accountSubMonthJune": "Июнь", + "accountSubMonthJuly": "Июль", + "accountSubMonthAugust": "Август", + "accountSubMonthSeptember": "Сентябрь", + "accountSubMonthOctober": "Октябрь", + "accountSubMonthNovember": "Ноябрь", + "accountSubMonthDecember": "Декабрь", + "accountSubUnlockCloudSync": "Разблокировать облачную синхронизацию", + "accountSubSyncBackupAll": "Синхронизируйте и создавайте резервные копии данных сети на всех ваших устройствах", + "accountSubCouldNotLoadPrices": "Не удалось загрузить цены", + "accountSubSubActivated": "Подписка активирована!", + "accountSubPurchaseFailed": "Покупка не удалась", + "accountSubAutoRenewDisclaimer": "Подписки автоматически продлеваются, если не отменить их не позднее чем за 24 часа до окончания текущего периода.", + "accountSubYearlySave": "Ежегодная (экономия 44%)", + "accountSubMonthlyProduct": "Ежемесячная", + "accountSubLinkingRequiresInternet": "Для привязки аккаунта требуется подключение к интернету.", + "accountSubConfirm": "Подтвердить", + "accountSubCancel": "Отмена", + "dataExportTitle": "Экспорт данных", + "dataExportSectionMessages": "Сообщения", + "dataExportSectionTelemetry": "Телеметрия", + "dataExportSectionPositionData": "Данные местоположения", + "dataExportSectionAutomations": "Автоматизации", + "dataExportSectionNetwork": "Сеть", + "dataExportSectionCompleteExport": "Полный экспорт", + "dataExportSectionClearData": "Очистить данные", + "dataExportAllMessages": "Все сообщения", + "dataExportAllMessagesSubtitle": "Экспорт всех сообщений каналов и личных сообщений", + "dataExportDeviceMetrics": "Метрики устройства", + "dataExportDeviceMetricsSubtitle": "Журналы заряда аккумулятора, напряжения, загруженности", + "dataExportEnvironmentMetrics": "Метрики окружающей среды", + "dataExportEnvironmentMetricsSubtitle": "Журналы температуры, влажности, давления", + "dataExportAirQuality": "Качество воздуха", + "dataExportAirQualitySubtitle": "Показания PM2.5, PM10, CO2", + "dataExportPowerMetrics": "Метрики питания", + "dataExportPowerMetricsSubtitle": "Напряжение и ток каналов", + "dataExportPositionHistory": "История местоположений", + "dataExportPositionHistorySubtitle": "Журналы GPS с метками времени", + "dataExportRoutes": "Маршруты", + "dataExportRoutesSubtitle": "Записанные маршруты и треки", + "dataExportTraceroutes": "Трассировки", + "dataExportTraceroutesSubtitle": "Анализ сетевых путей", + "dataExportAutomationRules": "Правила автоматизации", + "dataExportAutomationRulesSubtitle": "Все конфигурации автоматизации", + "dataExportExecutionLog": "Журнал выполнения", + "dataExportExecutionLogSubtitle": "История срабатываний автоматизации с результатами", + "dataExportNodeList": "Список узлов", + "dataExportNodeListSubtitle": "Все обнаруженные узлы с подробностями", + "dataExportExportAll": "Экспортировать все данные", + "dataExportExportAllSubtitle": "Полная резервная копия всех данных приложения", + "dataExportClearAll": "Очистить все данные", + "dataExportClearAllSubtitle": "Удалить все сохранённые данные телеметрии, маршруты и журналы", + "dataExportInfoText": "Экспортированные файлы можно передать по электронной почте, AirDrop или сохранить в «Файлы». Нажмите значок корзины для очистки определённых данных.", "dataExportFormatCsv": "CSV", "dataExportFormatGpx": "GPX", "dataExportFormatJson": "JSON", - "dataExportTooltipClearData": "Clear data", - "dataExportTooltipExport": "Export", - "dataExportClearConfirmTitle": "Clear {dataName}?", - "dataExportClearConfirmMsg": "This will permanently delete all {dataName}. This action cannot be undone.", - "dataExportClearConfirmBtn": "Delete", - "dataExportClearAllConfirmTitle": "Clear All Data?", - "dataExportClearAllConfirmMsg": "This will permanently delete ALL stored data including telemetry, routes, and automation logs. This action cannot be undone.", - "dataExportClearAllConfirmBtn": "Delete All", - "dataExportExportFailed": "Export failed: {error}", - "dataExportDataCleared": "Data cleared", - "dataExportClearFailed": "Failed to clear data: {error}", - "dataExportAllDataCleared": "All data cleared", - "dataExportNoRoutesToExport": "No routes to export", - "dataExportNoAutomationsToExport": "No automations to export", - "dataExportNoAutomationLogEntries": "No automation log entries", - "dataExportClearAllMessages": "all messages", - "dataExportClearDeviceMetrics": "device metrics", - "dataExportClearEnvironmentMetrics": "environment metrics", - "dataExportClearAirQualityData": "air quality data", - "dataExportClearPowerMetrics": "power metrics", - "dataExportClearPositionHistory": "position history", - "dataExportClearAllRoutes": "all routes", - "dataExportClearTracerouteData": "traceroute data", - "dataExportClearAllAutomationRules": "all automation rules", - "dataExportClearAutomationLog": "automation log", - "dataExportShareSubjectMessages": "Socialmesh Messages Export", - "dataExportShareSubjectDeviceMetrics": "Socialmesh Device Metrics Export", - "dataExportShareSubjectEnvironmentMetrics": "Socialmesh Environment Metrics Export", - "dataExportShareSubjectAirQuality": "Socialmesh Air Quality Export", - "dataExportShareSubjectPowerMetrics": "Socialmesh Power Metrics Export", - "dataExportShareSubjectPositionHistory": "Socialmesh Position History Export", - "dataExportShareSubjectRoutes": "Socialmesh Routes Export", - "dataExportShareSubjectTraceroutes": "Socialmesh Traceroute Export", - "dataExportShareSubjectAutomations": "Socialmesh Automations Export", - "dataExportShareSubjectAutomationLog": "Socialmesh Automation Log Export", - "dataExportShareSubjectNodeList": "Socialmesh Node List Export", - "dataExportShareSubjectComplete": "Socialmesh Complete Export", - "dataExportUnknownSender": "Unknown", - "dataExportSnrNotAvailable": "N/A", - "deviceMgmtTitle": "Device Management", - "deviceMgmtDefaultWarning": "Are you sure you want to {action}? This action cannot be undone.", - "deviceMgmtSuccessDisconnect": "{action} - device will disconnect", - "deviceMgmtSuccessCommandSent": "{action} command sent", - "deviceMgmtFailed": "Failed: {error}", - "deviceMgmtNotConnected": "Device not connected. Connect to a device to manage it.", - "deviceMgmtSectionPower": "POWER", - "deviceMgmtSectionTime": "TIME", - "deviceMgmtSectionReset": "RESET", - "deviceMgmtSectionFirmware": "FIRMWARE", - "deviceMgmtRebootTitle": "Reboot Device", - "deviceMgmtRebootSubtitle": "Restart the device", - "deviceMgmtRebootWarning": "The device will reboot in 2 seconds. You will be briefly disconnected while the device restarts.", - "deviceMgmtShutdownTitle": "Shutdown Device", - "deviceMgmtShutdownSubtitle": "Turn off the device", - "deviceMgmtShutdownWarning": "The device will shut down in 2 seconds. You will need to manually power it back on.", - "deviceMgmtSyncTimeTitle": "Sync Time", - "deviceMgmtSyncTimeSubtitle": "Set device time to current time", - "deviceMgmtResetNodeDbTitle": "Reset Node Database", - "deviceMgmtResetNodeDbSubtitle": "Clear all known nodes from device and app", - "deviceMgmtResetNodeDbWarning": "This will clear all discovered nodes from the device and app. Nodes will be rediscovered over time.", - "deviceMgmtFactoryResetConfigTitle": "Factory Reset Config", - "deviceMgmtFactoryResetConfigSubtitle": "Reset everything except the node database", - "deviceMgmtFactoryResetConfigWarning": "This will wipe channels, region, and all settings but preserves the node database.\n\nThe device will reboot in 5 seconds. You will need to set up the region again.", - "deviceMgmtFullFactoryResetTitle": "Full Factory Reset", - "deviceMgmtFullFactoryResetSubtitle": "Erase everything and reset device", - "deviceMgmtFullFactoryResetWarning": "WARNING: This will completely erase the device including:\n· All configuration\n· All channels\n· All known nodes\n· Device identity\n\nThe device will reboot in 5 seconds. You will need to pair and set it up again.", - "deviceMgmtEnterDfuTitle": "Enter DFU Mode", - "deviceMgmtEnterDfuSubtitle": "Boot into firmware update mode", - "deviceMgmtEnterDfuWarning": "The device will enter Device Firmware Update (DFU) mode. You will need to use a firmware update tool to flash new firmware or reset the device.\n\nYou will be disconnected from the device.", - "displayConfigTitle": "Display Configuration", - "displayConfigSave": "Save", - "displayConfigSectionScreen": "SCREEN", - "displayConfigSectionTimeCompass": "TIME & COMPASS", - "displayConfigSectionOledType": "OLED SCREEN TYPE", - "displayConfigSectionUnitsFormat": "UNITS & FORMAT", - "displayConfigSectionDisplayMode": "DISPLAY MODE", - "displayConfigScreenTimeoutAlwaysOn": "Always On", - "displayConfigScreenTimeoutSeconds": "{seconds}s", - "displayConfigScreenTimeoutLabel": "Screen Timeout: {value}", - "displayConfigScreenTimeoutDesc": "How long before screen turns off", - "displayConfigAutoCarouselDisabled": "Disabled", - "displayConfigAutoCarouselOff": "Off", - "displayConfigAutoCarouselLabel": "Auto Carousel: {value}", - "displayConfigAutoCarouselDesc": "Automatically cycle through screens", - "displayConfigFlipScreen": "Flip Screen", - "displayConfigFlipScreenSubtitle": "Rotate display 180°", - "displayConfigWakeOnTap": "Wake on Tap/Motion", - "displayConfigWakeOnTapSubtitle": "Turn on screen when device is moved", - "displayConfigLongNodeNames": "Long Node Names", - "displayConfigLongNodeNamesSubtitle": "Show full node names on device screen", - "displayConfigMessageBubbles": "Message Bubbles", - "displayConfigMessageBubblesSubtitle": "Display messages in bubble format on screen", - "displayConfig12hClock": "12 Hour Clock", - "displayConfig12hClockSubtitle": "Display time in 12-hour format (AM/PM)", - "displayConfigCompassNorth": "Compass Always Points North", - "displayConfigCompassNorthSubtitle": "The compass heading outside the circle always points north", - "displayConfigCompassOrientation": "Compass Orientation", - "displayConfigCompassOrientationDesc": "Adjust compass display rotation", + "dataExportTooltipClearData": "Очистить данные", + "dataExportTooltipExport": "Экспорт", + "dataExportClearConfirmTitle": "Очистить {dataName}?", + "dataExportClearConfirmMsg": "Это действие необратимо удалит все данные {dataName}.", + "dataExportClearConfirmBtn": "Удалить", + "dataExportClearAllConfirmTitle": "Очистить все данные?", + "dataExportClearAllConfirmMsg": "Это необратимо удалит ВСЕ сохранённые данные, включая телеметрию, маршруты и журналы автоматизации.", + "dataExportClearAllConfirmBtn": "Удалить всё", + "dataExportExportFailed": "Экспорт не выполнен: {error}", + "dataExportDataCleared": "Данные очищены", + "dataExportClearFailed": "Не удалось очистить данные: {error}", + "dataExportAllDataCleared": "Все данные очищены", + "dataExportNoRoutesToExport": "Нет маршрутов для экспорта", + "dataExportNoAutomationsToExport": "Нет автоматизаций для экспорта", + "dataExportNoAutomationLogEntries": "Нет записей журнала автоматизации", + "dataExportClearAllMessages": "все сообщения", + "dataExportClearDeviceMetrics": "метрики устройства", + "dataExportClearEnvironmentMetrics": "метрики окружающей среды", + "dataExportClearAirQualityData": "данные качества воздуха", + "dataExportClearPowerMetrics": "метрики питания", + "dataExportClearPositionHistory": "история местоположений", + "dataExportClearAllRoutes": "все маршруты", + "dataExportClearTracerouteData": "данные трассировки", + "dataExportClearAllAutomationRules": "все правила автоматизации", + "dataExportClearAutomationLog": "журнал автоматизации", + "dataExportShareSubjectMessages": "Экспорт сообщений Socialmesh", + "dataExportShareSubjectDeviceMetrics": "Экспорт метрик устройства Socialmesh", + "dataExportShareSubjectEnvironmentMetrics": "Экспорт метрик окружающей среды Socialmesh", + "dataExportShareSubjectAirQuality": "Экспорт данных качества воздуха Socialmesh", + "dataExportShareSubjectPowerMetrics": "Экспорт метрик питания Socialmesh", + "dataExportShareSubjectPositionHistory": "Экспорт истории местоположений Socialmesh", + "dataExportShareSubjectRoutes": "Экспорт маршрутов Socialmesh", + "dataExportShareSubjectTraceroutes": "Экспорт трассировок Socialmesh", + "dataExportShareSubjectAutomations": "Экспорт автоматизаций Socialmesh", + "dataExportShareSubjectAutomationLog": "Экспорт журнала автоматизации Socialmesh", + "dataExportShareSubjectNodeList": "Экспорт списка узлов Socialmesh", + "dataExportShareSubjectComplete": "Полный экспорт Socialmesh", + "dataExportUnknownSender": "Неизвестно", + "dataExportSnrNotAvailable": "Н/Д", + "deviceMgmtTitle": "Управление устройством", + "deviceMgmtDefaultWarning": "Вы уверены, что хотите {action}? Это действие нельзя отменить.", + "deviceMgmtSuccessDisconnect": "{action} — устройство отключится", + "deviceMgmtSuccessCommandSent": "Команда {action} отправлена", + "deviceMgmtFailed": "Ошибка: {error}", + "deviceMgmtNotConnected": "Устройство не подключено. Подключите устройство для управления им.", + "deviceMgmtSectionPower": "ПИТАНИЕ", + "deviceMgmtSectionTime": "ВРЕМЯ", + "deviceMgmtSectionReset": "СБРОС", + "deviceMgmtSectionFirmware": "ПРОШИВКА", + "deviceMgmtRebootTitle": "Перезагрузить устройство", + "deviceMgmtRebootSubtitle": "Перезапустить устройство", + "deviceMgmtRebootWarning": "Устройство перезагрузится через 2 секунды. Вы будете кратковременно отключены на время перезапуска.", + "deviceMgmtShutdownTitle": "Выключить устройство", + "deviceMgmtShutdownSubtitle": "Отключить питание устройства", + "deviceMgmtShutdownWarning": "Устройство выключится через 2 секунды. Для повторного включения потребуется нажать кнопку питания вручную.", + "deviceMgmtSyncTimeTitle": "Синхронизировать время", + "deviceMgmtSyncTimeSubtitle": "Установить на устройстве текущее время", + "deviceMgmtResetNodeDbTitle": "Сбросить базу данных узлов", + "deviceMgmtResetNodeDbSubtitle": "Удалить все известные узлы с устройства и из приложения", + "deviceMgmtResetNodeDbWarning": "Это удалит все обнаруженные узлы с устройства и из приложения. Узлы будут обнаружены повторно со временем.", + "deviceMgmtFactoryResetConfigTitle": "Сброс конфигурации к заводским настройкам", + "deviceMgmtFactoryResetConfigSubtitle": "Сбросить всё, кроме базы данных узлов", + "deviceMgmtFactoryResetConfigWarning": "Это удалит каналы, регион и все настройки, но сохранит базу данных узлов.\n\nУстройство перезагрузится через 5 секунд. Вам потребуется заново настроить регион.", + "deviceMgmtFullFactoryResetTitle": "Полный сброс к заводским настройкам", + "deviceMgmtFullFactoryResetSubtitle": "Полностью стереть данные и сбросить устройство", + "deviceMgmtFullFactoryResetWarning": "ВНИМАНИЕ: Это полностью сотрёт данные устройства, включая:\n· Всю конфигурацию\n· Все каналы\n· Все известные узлы\n· Идентификатор устройства\n\nУстройство перезагрузится через 5 секунд. Вам потребуется выполнить сопряжение и настройку заново.", + "deviceMgmtEnterDfuTitle": "Перейти в режим DFU", + "deviceMgmtEnterDfuSubtitle": "Загрузиться в режим обновления прошивки", + "deviceMgmtEnterDfuWarning": "Устройство перейдёт в режим обновления прошивки (DFU). Для прошивки новой прошивки или сброса устройства потребуется инструмент обновления прошивки.\n\nВы будете отключены от устройства.", + "displayConfigTitle": "Конфигурация дисплея", + "displayConfigSave": "Сохранить", + "displayConfigSectionScreen": "ЭКРАН", + "displayConfigSectionTimeCompass": "ВРЕМЯ И КОМПАС", + "displayConfigSectionOledType": "ТИП OLED ЭКРАНА", + "displayConfigSectionUnitsFormat": "ЕДИНИЦЫ И ФОРМАТ", + "displayConfigSectionDisplayMode": "РЕЖИМ ОТОБРАЖЕНИЯ", + "displayConfigScreenTimeoutAlwaysOn": "Всегда включён", + "displayConfigScreenTimeoutSeconds": "{seconds}с", + "displayConfigScreenTimeoutLabel": "Таймаут экрана: {value}", + "displayConfigScreenTimeoutDesc": "Через какое время экран отключится", + "displayConfigAutoCarouselDisabled": "Отключено", + "displayConfigAutoCarouselOff": "Выкл", + "displayConfigAutoCarouselLabel": "Авто-карусель: {value}", + "displayConfigAutoCarouselDesc": "Автоматически переключаться между экранами", + "displayConfigFlipScreen": "Перевернуть экран", + "displayConfigFlipScreenSubtitle": "Повернуть дисплей на 180°", + "displayConfigWakeOnTap": "Включение по касанию/движению", + "displayConfigWakeOnTapSubtitle": "Включать экран при движении устройства", + "displayConfigLongNodeNames": "Длинные имена узлов", + "displayConfigLongNodeNamesSubtitle": "Показывать полные имена узлов на экране устройства", + "displayConfigMessageBubbles": "Пузырьки сообщений", + "displayConfigMessageBubblesSubtitle": "Отображать сообщения в виде пузырьков на экране", + "displayConfig12hClock": "12-часовые часы", + "displayConfig12hClockSubtitle": "Отображать время в 12-часовом формате (AM/PM)", + "displayConfigCompassNorth": "Компас всегда направлен на север", + "displayConfigCompassNorthSubtitle": "Отметка курса снаружи окружности всегда указывает на север", + "displayConfigCompassOrientation": "Ориентация компаса", + "displayConfigCompassOrientationDesc": "Настроить поворот отображения компаса", "displayConfigDeg0": "0°", "displayConfigDeg90": "90°", "displayConfigDeg180": "180°", "displayConfigDeg270": "270°", - "displayConfigDeg0Inv": "0° Inverted", - "displayConfigDeg90Inv": "90° Inverted", - "displayConfigDeg180Inv": "180° Inverted", - "displayConfigDeg270Inv": "270° Inverted", - "displayConfigOledTypeTitle": "OLED Type", - "displayConfigOledTypeDesc": "Override automatic OLED detection", - "displayConfigOledAuto": "Auto", - "displayConfigOledAutoDesc": "Automatically detect OLED type", - "displayConfigOledSsd1306Desc": "Common 128x64 OLED", - "displayConfigOledSh1106Desc": "132x64 OLED controller", - "displayConfigOledSh1107Desc": "64x128 vertical OLED", - "displayConfigOledSh1107_128Desc": "128x128 square OLED", - "displayConfigMeasurementUnits": "Measurement Units", - "displayConfigMetric": "Metric", - "displayConfigMetricDesc": "Kilometers, Celsius", - "displayConfigImperial": "Imperial", - "displayConfigImperialDesc": "Miles, Fahrenheit", - "displayConfigBoldHeadings": "Bold Headings", - "displayConfigBoldHeadingsSubtitle": "Show compass headings in bold", - "displayConfigDisplayModeTitle": "Display Mode", - "displayConfigDisplayModeDesc": "Choose the display rendering mode", - "displayConfigModeDefault": "Default", - "displayConfigModeDefaultDesc": "Standard display layout", - "displayConfigModeTwoColor": "Two Color", - "displayConfigModeTwoColorDesc": "Optimized for two-color displays", - "displayConfigModeInverted": "Inverted", - "displayConfigModeInvertedDesc": "Dark background, light text", - "displayConfigModeColor": "Color", - "displayConfigModeColorDesc": "Full color display mode", - "displayConfigSaved": "Display configuration saved", - "displayConfigSaveFailed": "Failed to save: {error}", - "extNotifTitle": "External Notification", - "extNotifSave": "Save", - "extNotifNotConnected": "Connect to a device to configure external notification settings", - "extNotifSectionOptions": "Options", - "extNotifSectionPrimaryGpio": "Primary GPIO", - "extNotifSectionOptionalGpio": "Optional GPIO", - "extNotifEnabled": "Enabled", - "extNotifEnabledSubtitle": "Enable external notification module", - "extNotifAlertOnBell": "Alert on Bell", - "extNotifAlertOnBellSubtitle": "Trigger notification when receiving a bell character", - "extNotifAlertOnMessage": "Alert on Message", - "extNotifAlertOnMessageSubtitle": "Trigger notification when receiving a message", - "extNotifUsePwm": "Use PWM Buzzer", - "extNotifUsePwmSubtitle": "Use PWM output for tunes instead of on/off", - "extNotifUseI2s": "Use I2S as Buzzer", - "extNotifUseI2sSubtitle": "Use I2S audio output for RTTTL tunes (T-Watch, T-Deck)", - "extNotifActiveHigh": "Active High", - "extNotifActiveHighSubtitle": "Output pin is pulled high when active", - "extNotifOutputGpioPin": "Output GPIO Pin", - "extNotifGpioUnset": "Unset", + "displayConfigDeg0Inv": "0° инвертированный", + "displayConfigDeg90Inv": "90° инвертированный", + "displayConfigDeg180Inv": "180° инвертированный", + "displayConfigDeg270Inv": "270° инвертированный", + "displayConfigOledTypeTitle": "Тип OLED", + "displayConfigOledTypeDesc": "Переопределить автоматическое определение OLED", + "displayConfigOledAuto": "Авто", + "displayConfigOledAutoDesc": "Автоматически определять тип OLED", + "displayConfigOledSsd1306Desc": "Распространённый OLED 128x64", + "displayConfigOledSh1106Desc": "Контроллер OLED 132x64", + "displayConfigOledSh1107Desc": "Вертикальный OLED 64x128", + "displayConfigOledSh1107_128Desc": "Квадратный OLED 128x128", + "displayConfigMeasurementUnits": "Единицы измерения", + "displayConfigMetric": "Метрическая", + "displayConfigMetricDesc": "Километры, Цельсий", + "displayConfigImperial": "Имперская", + "displayConfigImperialDesc": "Мили, Фаренгейт", + "displayConfigBoldHeadings": "Жирные заголовки", + "displayConfigBoldHeadingsSubtitle": "Отображать курсовые заголовки жирным шрифтом", + "displayConfigDisplayModeTitle": "Режим отображения", + "displayConfigDisplayModeDesc": "Выбрать режим отрисовки дисплея", + "displayConfigModeDefault": "По умолчанию", + "displayConfigModeDefaultDesc": "Стандартный макет дисплея", + "displayConfigModeTwoColor": "Двухцветный", + "displayConfigModeTwoColorDesc": "Оптимизировано для двухцветных дисплеев", + "displayConfigModeInverted": "Инвертированный", + "displayConfigModeInvertedDesc": "Тёмный фон, светлый текст", + "displayConfigModeColor": "Цветной", + "displayConfigModeColorDesc": "Режим полноцветного дисплея", + "displayConfigSaved": "Конфигурация дисплея сохранена", + "displayConfigSaveFailed": "Не удалось сохранить: {error}", + "extNotifTitle": "Внешнее уведомление", + "extNotifSave": "Сохранить", + "extNotifNotConnected": "Подключитесь к устройству для настройки параметров внешнего уведомления", + "extNotifSectionOptions": "Параметры", + "extNotifSectionPrimaryGpio": "Основной GPIO", + "extNotifSectionOptionalGpio": "Дополнительный GPIO", + "extNotifEnabled": "Включено", + "extNotifEnabledSubtitle": "Включить модуль внешнего уведомления", + "extNotifAlertOnBell": "Оповещение при звонке", + "extNotifAlertOnBellSubtitle": "Срабатывать при получении символа звонка", + "extNotifAlertOnMessage": "Оповещение при сообщении", + "extNotifAlertOnMessageSubtitle": "Срабатывать при получении сообщения", + "extNotifUsePwm": "Использовать ШИМ-зуммер", + "extNotifUsePwmSubtitle": "Использовать ШИМ-выход для мелодий вместо вкл/выкл", + "extNotifUseI2s": "Использовать I2S как зуммер", + "extNotifUseI2sSubtitle": "Использовать аудиовыход I2S для мелодий RTTTL (T-Watch, T-Deck)", + "extNotifActiveHigh": "Активный высокий", + "extNotifActiveHighSubtitle": "Вывод подтягивается к высокому уровню при активации", + "extNotifOutputGpioPin": "Вывод GPIO выхода", + "extNotifGpioUnset": "Не задан", "extNotifGpioValue": "GPIO {value}", - "extNotifGpioPinLabel": "Pin {pin}", - "extNotifOutputDuration": "Output Duration", - "extNotifOutputDurationSubtitle": "How long to keep output active", - "extNotifDurationDefault": "Default", - "extNotifDuration100ms": "100ms", - "extNotifDuration250ms": "250ms", - "extNotifDuration500ms": "500ms", - "extNotifDuration1s": "1 second", - "extNotifDuration2s": "2 seconds", - "extNotifDuration5s": "5 seconds", - "extNotifNagTimeout": "Nag Timeout", - "extNotifNagTimeoutSubtitle": "How often to repeat notification", - "extNotifTimeoutDisabled": "Disabled", - "extNotifTimeout15s": "15 seconds", - "extNotifTimeout30s": "30 seconds", - "extNotifTimeout1m": "1 minute", - "extNotifTimeout2m": "2 minutes", - "extNotifTimeout5m": "5 minutes", - "extNotifTimeout10m": "10 minutes", - "extNotifBuzzerOnBell": "Buzzer on Bell", - "extNotifBuzzerOnBellSubtitle": "Alert buzzer GPIO when receiving a bell", - "extNotifVibraOnBell": "Vibra on Bell", - "extNotifVibraOnBellSubtitle": "Alert vibration motor when receiving a bell", - "extNotifBuzzerOnMsg": "Buzzer on Message", - "extNotifBuzzerOnMsgSubtitle": "Alert buzzer GPIO when receiving a message", - "extNotifVibraOnMsg": "Vibra on Message", - "extNotifVibraOnMsgSubtitle": "Alert vibration motor when receiving a message", - "extNotifBuzzerGpioPin": "Buzzer GPIO Pin", - "extNotifVibraGpioPin": "Vibra GPIO Pin", - "extNotifSaved": "External notification settings saved", - "extNotifSaveFailed": "Failed to save: {error}", - "extNotifLoadFailed": "Failed to load config", - "iftttConfigTitle": "IFTTT Integration", - "iftttConfigSave": "Save", - "iftttConfigPremiumTitle": "Connect to 700+ Services", - "iftttConfigPremiumDesc": "Trigger smart home devices, log events to spreadsheets, send Discord/Slack messages, and more.", - "iftttConfigPremiumExampleTitle": "Node goes offline", - "iftttConfigPremiumExampleDesc": "Automatically turn on a smart light or send yourself a notification when your node is no longer heard.", - "iftttConfigSectionWebhook": "WEBHOOK", - "iftttConfigSectionMessageTriggers": "MESSAGE TRIGGERS", - "iftttConfigSectionNodeTriggers": "NODE STATUS TRIGGERS", - "iftttConfigSectionTelemetryTriggers": "TELEMETRY TRIGGERS", - "iftttConfigSectionGeofencing": "GEOFENCING", - "iftttConfigEnable": "Enable IFTTT", - "iftttConfigEnableSubtitle": "Send events to IFTTT Webhooks service", - "iftttConfigDataSharingTitle": "IFTTT Data Sharing", - "iftttConfigDataSharingMsg": "When IFTTT Webhooks are enabled, mesh event data (messages, node status, positions, battery levels) will be sent to IFTTT servers via your personal webhook key.\n\nIFTTT is a third-party service with its own privacy policy. Only the event types you select will be transmitted.", - "iftttConfigIUnderstand": "I Understand", - "iftttConfigWebhookKeyLabel": "Webhook Key", - "iftttConfigWebhookKeyHint": "e.g., cMcOnB_zaJTrZwsVvzVTHY", - "iftttConfigWebhookKeyHelper": "Copy from IFTTT Webhooks URL after /use/", - "iftttConfigTesting": "Testing...", - "iftttConfigTestConnection": "Test Connection", - "iftttConfigEnterKeyToEnable": "Please enter your Webhook Key to enable IFTTT", - "iftttConfigEnterKeyFirst": "Please enter your Webhook Key first", - "iftttConfigTestSuccess": "Test webhook sent! Check your IFTTT applet.", - "iftttConfigTestFailed": "Failed to send test webhook. Check your key.", - "iftttConfigMessageReceived": "Message Received", - "iftttConfigMessageReceivedSubtitle": "Trigger when a message is received", - "iftttConfigSosEmergency": "SOS / Emergency", - "iftttConfigSosEmergencySubtitle": "Trigger on SOS, emergency, help, mayday keywords", - "iftttConfigNodeActive": "Node Active", - "iftttConfigNodeActiveSubtitle": "Trigger when a node is heard recently", - "iftttConfigNodeInactive": "Node Inactive", - "iftttConfigNodeInactiveSubtitle": "Trigger when a node is not heard for a while", - "iftttConfigBatteryLow": "Battery Low", - "iftttConfigBatteryLowSubtitle": "Trigger when battery drops below threshold", - "iftttConfigBatteryThreshold": "Battery Threshold", - "iftttConfigTemperatureAlert": "Temperature Alert", - "iftttConfigTemperatureAlertSubtitle": "Trigger when temperature exceeds threshold", - "iftttConfigTemperatureThreshold": "Temperature Threshold", - "iftttConfigPositionUpdates": "Position Updates", - "iftttConfigPositionUpdatesSubtitle": "Trigger when node exits geofence area", - "iftttConfigGeofenceRadius": "Geofence Radius", + "extNotifGpioPinLabel": "Контакт {pin}", + "extNotifOutputDuration": "Длительность выхода", + "extNotifOutputDurationSubtitle": "Как долго держать выход активным", + "extNotifDurationDefault": "По умолчанию", + "extNotifDuration100ms": "100 мс", + "extNotifDuration250ms": "250 мс", + "extNotifDuration500ms": "500 мс", + "extNotifDuration1s": "1 секунда", + "extNotifDuration2s": "2 секунды", + "extNotifDuration5s": "5 секунд", + "extNotifNagTimeout": "Тайм-аут повтора", + "extNotifNagTimeoutSubtitle": "Как часто повторять уведомление", + "extNotifTimeoutDisabled": "Отключено", + "extNotifTimeout15s": "15 секунд", + "extNotifTimeout30s": "30 секунд", + "extNotifTimeout1m": "1 минута", + "extNotifTimeout2m": "2 минуты", + "extNotifTimeout5m": "5 минут", + "extNotifTimeout10m": "10 минут", + "extNotifBuzzerOnBell": "Зуммер при звонке", + "extNotifBuzzerOnBellSubtitle": "Активировать GPIO зуммера при получении звонка", + "extNotifVibraOnBell": "Вибрация при звонке", + "extNotifVibraOnBellSubtitle": "Активировать мотор вибрации при получении звонка", + "extNotifBuzzerOnMsg": "Зуммер при сообщении", + "extNotifBuzzerOnMsgSubtitle": "Активировать GPIO зуммера при получении сообщения", + "extNotifVibraOnMsg": "Вибрация при сообщении", + "extNotifVibraOnMsgSubtitle": "Активировать мотор вибрации при получении сообщения", + "extNotifBuzzerGpioPin": "Контакт GPIO зуммера", + "extNotifVibraGpioPin": "Контакт GPIO вибрации", + "extNotifSaved": "Настройки внешнего уведомления сохранены", + "extNotifSaveFailed": "Не удалось сохранить: {error}", + "extNotifLoadFailed": "Не удалось загрузить конфигурацию", + "iftttConfigTitle": "Интеграция IFTTT", + "iftttConfigSave": "Сохранить", + "iftttConfigPremiumTitle": "Подключитесь к 700+ сервисам", + "iftttConfigPremiumDesc": "Управляйте устройствами умного дома, записывайте события в таблицы, отправляйте сообщения в Discord/Slack и многое другое.", + "iftttConfigPremiumExampleTitle": "Узел отключился", + "iftttConfigPremiumExampleDesc": "Автоматически включить умный свет или отправить себе уведомление, когда ваш узел перестаёт отвечать.", + "iftttConfigSectionWebhook": "ВЕБХУК", + "iftttConfigSectionMessageTriggers": "ТРИГГЕРЫ СООБЩЕНИЙ", + "iftttConfigSectionNodeTriggers": "ТРИГГЕРЫ СОСТОЯНИЯ УЗЛА", + "iftttConfigSectionTelemetryTriggers": "ТРИГГЕРЫ ТЕЛЕМЕТРИИ", + "iftttConfigSectionGeofencing": "ГЕОЗОНЫ", + "iftttConfigEnable": "Включить IFTTT", + "iftttConfigEnableSubtitle": "Отправлять события в сервис IFTTT Webhooks", + "iftttConfigDataSharingTitle": "Передача данных IFTTT", + "iftttConfigDataSharingMsg": "При включённых IFTTT Webhooks данные о событиях сети (сообщения, статус узлов, местоположения, уровень заряда) будут отправляться на серверы IFTTT через ваш персональный ключ вебхука.\n\nIFTTT — сторонний сервис со своей политикой конфиденциальности. Передаваться будут только выбранные вами типы событий.", + "iftttConfigIUnderstand": "Понятно", + "iftttConfigWebhookKeyLabel": "Ключ вебхука", + "iftttConfigWebhookKeyHint": "например, cMcOnB_zaJTrZwsVvzVTHY", + "iftttConfigWebhookKeyHelper": "Скопируйте из URL IFTTT Webhooks после /use/", + "iftttConfigTesting": "Проверка...", + "iftttConfigTestConnection": "Проверить соединение", + "iftttConfigEnterKeyToEnable": "Введите ключ вебхука для включения IFTTT", + "iftttConfigEnterKeyFirst": "Сначала введите ключ вебхука", + "iftttConfigTestSuccess": "Тестовый вебхук отправлен! Проверьте свой апплет IFTTT.", + "iftttConfigTestFailed": "Не удалось отправить тестовый вебхук. Проверьте ключ.", + "iftttConfigMessageReceived": "Получено сообщение", + "iftttConfigMessageReceivedSubtitle": "Срабатывать при получении сообщения", + "iftttConfigSosEmergency": "SOS / Экстренный сигнал", + "iftttConfigSosEmergencySubtitle": "Срабатывать при ключевых словах SOS, экстренно, помощь, mayday", + "iftttConfigNodeActive": "Узел активен", + "iftttConfigNodeActiveSubtitle": "Срабатывать, когда узел недавно отвечал", + "iftttConfigNodeInactive": "Узел неактивен", + "iftttConfigNodeInactiveSubtitle": "Срабатывать, когда узел долго не отвечает", + "iftttConfigBatteryLow": "Низкий заряд", + "iftttConfigBatteryLowSubtitle": "Срабатывать, когда заряд ниже порогового значения", + "iftttConfigBatteryThreshold": "Порог заряда", + "iftttConfigTemperatureAlert": "Предупреждение о температуре", + "iftttConfigTemperatureAlertSubtitle": "Срабатывать, когда температура превышает порог", + "iftttConfigTemperatureThreshold": "Порог температуры", + "iftttConfigPositionUpdates": "Обновления местоположения", + "iftttConfigPositionUpdatesSubtitle": "Срабатывать, когда узел покидает геозону", + "iftttConfigGeofenceRadius": "Радиус геозоны", "iftttConfigGeofenceRadiusHint": "1000", - "iftttConfigGeofenceUnitM": "m", - "iftttConfigCenterLatitude": "Center Latitude", + "iftttConfigGeofenceUnitM": "м", + "iftttConfigCenterLatitude": "Широта центра", "iftttConfigCenterLatHint": "-33.8688", - "iftttConfigCenterLongitude": "Center Longitude", + "iftttConfigCenterLongitude": "Долгота центра", "iftttConfigCenterLonHint": "151.2093", - "iftttConfigMonitoredNode": "Monitored Node", - "iftttConfigNoNodeSelected": "No node selected. All nodes will be monitored.", - "iftttConfigAlertCooldown": "Alert Cooldown", - "iftttConfigCooldown5min": "5 min", - "iftttConfigCooldown15min": "15 min", - "iftttConfigCooldown30min": "30 min", - "iftttConfigCooldown1hour": "1 hour", - "iftttConfigCooldown2hours": "2 hours", - "iftttConfigCooldown4hours": "4 hours", - "iftttConfigCooldown8hours": "8 hours", - "iftttConfigCooldown24hours": "24 hours", - "iftttConfigCooldownDesc": "Minimum time between geofence alerts for the same node", - "iftttConfigPickOnMap": "Pick on Map", - "iftttConfigSetupGuide": "Setup Guide", - "iftttConfigStep1": "Create an account at ifttt.com", - "iftttConfigStep2": "Search for \"Webhooks\" service and connect it", - "iftttConfigStep3": "Go to Webhooks settings to find your key", - "iftttConfigStep4": "Create applets with Webhooks as the trigger", - "iftttConfigEventNamesRef": "Event Names Reference", - "iftttConfigEventNamesSubtitle": "Use these names in your IFTTT applets", - "iftttConfigSaved": "IFTTT settings saved", - "iftttConfigSaveFailed": "Failed to save IFTTT settings", + "iftttConfigMonitoredNode": "Отслеживаемый узел", + "iftttConfigNoNodeSelected": "Узел не выбран. Будут отслеживаться все узлы.", + "iftttConfigAlertCooldown": "Пауза между оповещениями", + "iftttConfigCooldown5min": "5 мин", + "iftttConfigCooldown15min": "15 мин", + "iftttConfigCooldown30min": "30 мин", + "iftttConfigCooldown1hour": "1 час", + "iftttConfigCooldown2hours": "2 часа", + "iftttConfigCooldown4hours": "4 часа", + "iftttConfigCooldown8hours": "8 часов", + "iftttConfigCooldown24hours": "24 часа", + "iftttConfigCooldownDesc": "Минимальное время между оповещениями о геозоне для одного узла", + "iftttConfigPickOnMap": "Выбрать на карте", + "iftttConfigSetupGuide": "Руководство по настройке", + "iftttConfigStep1": "Создайте аккаунт на ifttt.com", + "iftttConfigStep2": "Найдите сервис «Webhooks» и подключите его", + "iftttConfigStep3": "Перейдите в настройки Webhooks, чтобы найти ваш ключ", + "iftttConfigStep4": "Создавайте апплеты с Webhooks в качестве триггера", + "iftttConfigEventNamesRef": "Справочник имён событий", + "iftttConfigEventNamesSubtitle": "Используйте эти имена в ваших апплетах IFTTT", + "iftttConfigSaved": "Настройки IFTTT сохранены", + "iftttConfigSaveFailed": "Не удалось сохранить настройки IFTTT", "mqttConfigTitle": "MQTT", - "mqttConfigSave": "Save", - "mqttConfigDutyCycleWarning": "Your region has a {percent}% duty cycle. MQTT is not advised when you are duty cycle restricted — the extra traffic will quickly overwhelm your LoRa mesh.", - "mqttConfigEnable": "Enable MQTT", - "mqttConfigEnableSubtitle": "Connect device to an MQTT broker for mesh bridging", - "mqttConfigNoWifiAdvisory": "This device has no WiFi hardware. Enable MQTT Client Proxy below so the app can relay messages on behalf of the device.", - "mqttConfigNoWifiTitle": "No WiFi Hardware", - "mqttConfigNoWifiMsg": "This device does not have WiFi hardware. Without MQTT Client Proxy enabled, the device cannot reach an MQTT broker on its own.\n\nSave anyway without proxy?", - "mqttConfigSaveAnyway": "Save Anyway", - "mqttConfigSectionServer": "SERVER", - "mqttConfigSectionAuth": "AUTHENTICATION", - "mqttConfigSectionOptions": "OPTIONS", - "mqttConfigServerAddressLabel": "Server Address", + "mqttConfigSave": "Сохранить", + "mqttConfigDutyCycleWarning": "В вашем регионе допускается рабочий цикл {percent}%. Использование MQTT не рекомендуется при ограничении рабочего цикла — дополнительный трафик быстро перегрузит вашу LoRa сеть.", + "mqttConfigEnable": "Включить MQTT", + "mqttConfigEnableSubtitle": "Подключить устройство к MQTT-брокеру для расширения сети", + "mqttConfigNoWifiAdvisory": "Это устройство не имеет оборудования WiFi. Включите прокси MQTT-клиента ниже, чтобы приложение могло передавать сообщения от имени устройства.", + "mqttConfigNoWifiTitle": "Нет оборудования WiFi", + "mqttConfigNoWifiMsg": "Это устройство не имеет оборудования WiFi. Без прокси MQTT-клиента устройство не может самостоятельно подключиться к MQTT-брокеру.\n\nВсё равно сохранить без прокси?", + "mqttConfigSaveAnyway": "Всё равно сохранить", + "mqttConfigSectionServer": "СЕРВЕР", + "mqttConfigSectionAuth": "АУТЕНТИФИКАЦИЯ", + "mqttConfigSectionOptions": "ПАРАМЕТРЫ", + "mqttConfigServerAddressLabel": "Адрес сервера", "mqttConfigServerAddressHint": "mqtt.meshtastic.org", - "mqttConfigTopicRootLabel": "Topic Root", + "mqttConfigTopicRootLabel": "Корень топика", "mqttConfigTopicRootHint": "msh", - "mqttConfigUseTls": "Use TLS", - "mqttConfigUseTlsSubtitle": "Encrypt connection to broker", - "mqttConfigUsernameLabel": "Username", - "mqttConfigOptionalHint": "Optional", - "mqttConfigPasswordLabel": "Password", - "mqttConfigEncryption": "Encryption", - "mqttConfigEncryptionSubtitle": "Encrypt mesh messages over MQTT", - "mqttConfigJsonOutput": "JSON Output", - "mqttConfigJsonOutputSubtitle": "Publish messages in JSON format", - "mqttConfigClientProxy": "MQTT Client Proxy", - "mqttConfigClientProxySubtitle": "Use phone's network for MQTT\n(Required for devices without WiFi)", - "mqttConfigMapReporting": "Map Reporting", - "mqttConfigMapReportingSubtitle": "Report position to public mesh map", - "mqttConfigMapReportSettingsHeader": "MAP REPORT SETTINGS", - "mqttConfigPublishInterval": "Publish Interval: {minutes} minutes", - "mqttConfigPublishIntervalDesc": "How often to report position to map", - "mqttConfigPositionPrecision": "Position Precision", - "mqttConfigPositionPrecisionDesc": "Approximate location accuracy for map", - "mqttConfigPrecisionWithin5_8km": "Within 5.8 km", - "mqttConfigPrecisionWithin2_9km": "Within 2.9 km", - "mqttConfigPrecisionWithin1_5km": "Within 1.5 km", - "mqttConfigPrecisionWithin700m": "Within 700 m", - "mqttConfigPrecisionUnknown": "Unknown", - "mqttConfigInfoText": "MQTT allows your device to bridge the local mesh network to the internet. This enables communication with nodes that are not in direct radio range.", - "mqttConfigSaved": "MQTT configuration saved", - "mqttConfigSaveFailed": "Failed to save: {error}", - "securityConfigTitle": "Security", - "securityConfigSave": "Save", - "securityConfigSectionDmKey": "DIRECT MESSAGE KEY", - "securityConfigSectionAdminKeys": "ADMIN KEYS", - "securityConfigSectionDeviceMgmt": "DEVICE MANAGEMENT", - "securityConfigSectionAccessControls": "ACCESS CONTROLS", - "securityConfigPublicKey": "Public Key", - "securityConfigNoKeySet": "No key set", - "securityConfigPublicKeyDesc": "Your public key is sent to other nodes for secure messaging", - "securityConfigPrivateKey": "Private Key", - "securityConfigPrivateKeyHint": "Base64 encoded 32-byte key", - "securityConfigPrivateKeyDesc": "Used to compute shared secret with remote devices", - "securityConfigRegenKeyPair": "Regenerate Key Pair", - "securityConfigGenerating": "Generating...", - "securityConfigGenerate": "Generate", - "securityConfigRegenDesc": "Generate a new key pair (public key will be automatically derived)", - "securityConfigKeyBackup": "Key Backup", - "securityConfigBackupDesc": "Backup your private key to secure storage for recovery. Keys are stored in the device keychain with iCloud sync enabled.", - "securityConfigBackupBtn": "Backup", - "securityConfigRestoreBtn": "Restore", - "securityConfigDeleteBackupTooltip": "Delete backup", - "securityConfigAdminKeysDesc": "Public keys authorized to send admin messages to this node", - "securityConfigPrimaryAdminKey": "Primary Admin Key", - "securityConfigSecondaryAdminKey": "Secondary Admin Key", - "securityConfigTertiaryAdminKey": "Tertiary Admin Key", - "securityConfigAdminKeyHint": "Base64 encoded public key", - "securityConfigManagedMode": "Managed Mode", - "securityConfigManagedModeSubtitle": "Device is managed by an external system", - "securityConfigSerialConsole": "Serial Console", - "securityConfigSerialConsoleSubtitle": "Enable USB serial console access", - "securityConfigDebugLogging": "Debug Logging", - "securityConfigDebugLoggingSubtitle": "Enable verbose debug log output", - "securityConfigAdminChannel": "Admin Channel", - "securityConfigAdminChannelSubtitle": "Allow remote admin via admin channel", - "securityConfigWarning": "Disabling serial console or enabling managed mode may make it difficult to recover the device. Make sure you understand the implications before making changes.", - "securityConfigDeleteBackupTitle": "Delete Backup?", - "securityConfigDeleteBackupMsg": "This will permanently delete the backed up private key from secure storage. This cannot be undone.", - "securityConfigDeleteBtn": "Delete", - "securityConfigNewKeyPairGenerated": "New key pair generated", - "securityConfigKeyGenFailed": "Failed to generate key: {error}", - "securityConfigSaved": "Security configuration saved", - "securityConfigSaveFailed": "Failed to save: {error}", - "securityConfigInvalidPrivateKey": "Invalid private key format", - "securityConfigInvalidAdminKey": "Invalid admin key format", - "securityConfigNoDevice": "No connected device", - "securityConfigBackedUp": "Private key backed up to secure storage", - "securityConfigBackupFailed": "Failed to backup key: {error}", - "securityConfigNoBackupFound": "No backup found for this device", - "securityConfigRestored": "Private key restored from backup", - "securityConfigRestoreFailed": "Failed to restore key: {error}", - "securityConfigBackupDeleted": "Backup deleted", - "securityConfigDeleteBackupFailed": "Failed to delete backup: {error}", - "trafficMgmtTitle": "Traffic Management", - "trafficMgmtSave": "Save", - "trafficMgmtSectionGeneral": "GENERAL", - "trafficMgmtSectionPositionDedup": "POSITION DEDUPLICATION", - "trafficMgmtSectionNodeinfoResponse": "NODEINFO DIRECT RESPONSE", - "trafficMgmtSectionRateLimit": "RATE LIMITING", - "trafficMgmtSectionUnknownPackets": "UNKNOWN PACKETS", - "trafficMgmtSectionHopMgmt": "HOP MANAGEMENT", - "trafficMgmtEnable": "Enable Traffic Management", - "trafficMgmtEnableSubtitle": "Master toggle for all traffic management features", - "trafficMgmtPositionDedup": "Position Deduplication", - "trafficMgmtPositionDedupSubtitle": "Drop duplicate position packets", - "trafficMgmtPrecisionBits": "Precision Bits: {value}", - "trafficMgmtPrecisionBitsDesc": "Lower values mean more aggressive deduplication", - "trafficMgmtPrecisionBitsLabel": "{value} bits", - "trafficMgmtMinInterval": "Min Interval: {seconds}s", - "trafficMgmtMinIntervalDesc": "Minimum seconds between position updates", - "trafficMgmtDirectResponse": "Direct Response", - "trafficMgmtDirectResponseSubtitle": "Respond to NodeInfo requests directly", - "trafficMgmtMaxHops": "Max Hops: {value}", - "trafficMgmtMaxHopsDesc": "Maximum hops for direct NodeInfo response", - "trafficMgmtPerNodeRateLimit": "Per-Node Rate Limiting", - "trafficMgmtPerNodeRateLimitSubtitle": "Limit packet rate from individual nodes", - "trafficMgmtWindow": "Window: {seconds}s", - "trafficMgmtWindowDesc": "Time window for rate limit calculation", - "trafficMgmtMaxPackets": "Max Packets: {value}", - "trafficMgmtMaxPacketsDesc": "Maximum packets per window before dropping", - "trafficMgmtDropUnknown": "Drop Unknown Packets", - "trafficMgmtDropUnknownSubtitle": "Drop packets from unknown sources", - "trafficMgmtThreshold": "Threshold: {value}", - "trafficMgmtThresholdDesc": "Number of unknown packets before dropping", - "trafficMgmtExhaustHopTelemetry": "Exhaust Hop on Telemetry", - "trafficMgmtExhaustHopTelemetrySub": "Set hop limit to 0 for relayed telemetry", - "trafficMgmtExhaustHopPosition": "Exhaust Hop on Position", - "trafficMgmtExhaustHopPositionSub": "Set hop limit to 0 for relayed positions", - "trafficMgmtPreserveRouterHops": "Preserve Router Hops", - "trafficMgmtPreserveRouterHopsSub": "Preserve hop count for router nodes", - "trafficMgmtSaved": "Traffic management configuration saved", - "trafficMgmtSaveFailed": "Failed to save: {error}", - "adminPanelTitle": "Admin", - "adminPanelSectionShop": "SHOP MANAGEMENT", - "adminPanelShopDashboard": "Shop Admin Dashboard", - "adminPanelShopDashboardSub": "Manage products, orders, and inventory", - "adminPanelDeviceShop": "Device Shop", - "adminPanelDeviceShopSub": "View and manage device listings", - "adminPanelSectionModeration": "CONTENT MODERATION", - "adminPanelBugReports": "Bug Reports", - "adminPanelBugReportsSub": "View and respond to user bug reports", - "adminPanelReviewMod": "Review Moderation", - "adminPanelReviewModSub": "Approve or reject user reviews", - "adminPanelReportedContent": "Reported Content", - "adminPanelReportedContentSub": "Review flagged posts and comments", - "adminPanelWidgetReview": "Widget Marketplace Review", - "adminPanelWidgetReviewSub": "Approve pending widget submissions", - "adminPanelSectionUsers": "USER MANAGEMENT", - "adminPanelSocialSeeding": "Social Seeding", - "adminPanelSocialSeedingSub": "Manage follow requests and connections", - "adminPanelUserPurchases": "User Purchases", - "adminPanelUserPurchasesSub": "View and manage user transactions", - "adminPanelSectionConfig": "APP CONFIGURATION", - "adminPanelBroadcast": "Broadcast Notification", - "adminPanelBroadcastSub": "Send push notification to all users", - "adminPanelQrStyles": "QR Code Styles", - "adminPanelQrStylesSub": "Preview branded QR code designs", - "adminPanelSectionDiag": "DEVICE DIAGNOSTICS", - "adminPanelDiagHarness": "Diagnostic Harness", - "adminPanelDiagHarnessSub": "Run protocol probes and export debug bundle", - "adminPanelConformance": "Conformance Harness", - "adminPanelConformanceSub": "Provider-bound device conformance & stress tests", + "mqttConfigUseTls": "Использовать TLS", + "mqttConfigUseTlsSubtitle": "Шифровать подключение к брокеру", + "mqttConfigUsernameLabel": "Имя пользователя", + "mqttConfigOptionalHint": "Необязательно", + "mqttConfigPasswordLabel": "Пароль", + "mqttConfigEncryption": "Шифрование", + "mqttConfigEncryptionSubtitle": "Шифровать сообщения сети через MQTT", + "mqttConfigJsonOutput": "JSON вывод", + "mqttConfigJsonOutputSubtitle": "Публиковать сообщения в формате JSON", + "mqttConfigClientProxy": "Прокси MQTT-клиента", + "mqttConfigClientProxySubtitle": "Использовать сеть телефона для MQTT\n(Необходимо для устройств без WiFi)", + "mqttConfigMapReporting": "Отчёт на карте", + "mqttConfigMapReportingSubtitle": "Передавать местоположение на публичную карту сети", + "mqttConfigMapReportSettingsHeader": "НАСТРОЙКИ ОТЧЁТА НА КАРТЕ", + "mqttConfigPublishInterval": "Интервал публикации: {minutes} мин", + "mqttConfigPublishIntervalDesc": "Как часто передавать местоположение на карту", + "mqttConfigPositionPrecision": "Точность местоположения", + "mqttConfigPositionPrecisionDesc": "Приблизительная точность положения для карты", + "mqttConfigPrecisionWithin5_8km": "В пределах 5,8 км", + "mqttConfigPrecisionWithin2_9km": "В пределах 2,9 км", + "mqttConfigPrecisionWithin1_5km": "В пределах 1,5 км", + "mqttConfigPrecisionWithin700m": "В пределах 700 м", + "mqttConfigPrecisionUnknown": "Неизвестно", + "mqttConfigInfoText": "MQTT позволяет устройству связать локальную радиосеть с интернетом. Это обеспечивает связь с узлами, находящимися вне зоны прямого радиоприёма.", + "mqttConfigSaved": "Конфигурация MQTT сохранена", + "mqttConfigSaveFailed": "Не удалось сохранить: {error}", + "securityConfigTitle": "Безопасность", + "securityConfigSave": "Сохранить", + "securityConfigSectionDmKey": "КЛЮЧ ЛИЧНЫХ СООБЩЕНИЙ", + "securityConfigSectionAdminKeys": "КЛЮЧИ АДМИНИСТРАТОРА", + "securityConfigSectionDeviceMgmt": "УПРАВЛЕНИЕ УСТРОЙСТВОМ", + "securityConfigSectionAccessControls": "КОНТРОЛЬ ДОСТУПА", + "securityConfigPublicKey": "Открытый ключ", + "securityConfigNoKeySet": "Ключ не задан", + "securityConfigPublicKeyDesc": "Ваш открытый ключ отправляется другим узлам для защищённого обмена сообщениями", + "securityConfigPrivateKey": "Закрытый ключ", + "securityConfigPrivateKeyHint": "32-байтовый ключ в кодировке Base64", + "securityConfigPrivateKeyDesc": "Используется для вычисления общего секрета с удалёнными устройствами", + "securityConfigRegenKeyPair": "Обновить пару ключей", + "securityConfigGenerating": "Генерация...", + "securityConfigGenerate": "Сгенерировать", + "securityConfigRegenDesc": "Создать новую пару ключей (открытый ключ будет получен автоматически)", + "securityConfigKeyBackup": "Резервная копия ключа", + "securityConfigBackupDesc": "Создайте резервную копию закрытого ключа в защищённом хранилище для восстановления. Ключи хранятся в связке ключей устройства с включённой синхронизацией iCloud.", + "securityConfigBackupBtn": "Создать копию", + "securityConfigRestoreBtn": "Восстановить", + "securityConfigDeleteBackupTooltip": "Удалить резервную копию", + "securityConfigAdminKeysDesc": "Открытые ключи, уполномоченные отправлять административные сообщения этому узлу", + "securityConfigPrimaryAdminKey": "Основной ключ администратора", + "securityConfigSecondaryAdminKey": "Дополнительный ключ администратора", + "securityConfigTertiaryAdminKey": "Третий ключ администратора", + "securityConfigAdminKeyHint": "Открытый ключ в кодировке Base64", + "securityConfigManagedMode": "Управляемый режим", + "securityConfigManagedModeSubtitle": "Устройство управляется внешней системой", + "securityConfigSerialConsole": "Последовательная консоль", + "securityConfigSerialConsoleSubtitle": "Включить доступ к консоли через USB", + "securityConfigDebugLogging": "Журнал отладки", + "securityConfigDebugLoggingSubtitle": "Включить подробный вывод журнала отладки", + "securityConfigAdminChannel": "Канал администратора", + "securityConfigAdminChannelSubtitle": "Разрешить удалённое администрирование через канал администратора", + "securityConfigWarning": "Отключение последовательной консоли или включение управляемого режима может затруднить восстановление устройства. Убедитесь, что понимаете последствия, прежде чем вносить изменения.", + "securityConfigDeleteBackupTitle": "Удалить резервную копию?", + "securityConfigDeleteBackupMsg": "Это необратимо удалит резервную копию закрытого ключа из защищённого хранилища.", + "securityConfigDeleteBtn": "Удалить", + "securityConfigNewKeyPairGenerated": "Создана новая пара ключей", + "securityConfigKeyGenFailed": "Не удалось сгенерировать ключ: {error}", + "securityConfigSaved": "Конфигурация безопасности сохранена", + "securityConfigSaveFailed": "Не удалось сохранить: {error}", + "securityConfigInvalidPrivateKey": "Неверный формат закрытого ключа", + "securityConfigInvalidAdminKey": "Неверный формат ключа администратора", + "securityConfigNoDevice": "Нет подключённого устройства", + "securityConfigBackedUp": "Закрытый ключ сохранён в защищённом хранилище", + "securityConfigBackupFailed": "Не удалось создать резервную копию ключа: {error}", + "securityConfigNoBackupFound": "Резервная копия для этого устройства не найдена", + "securityConfigRestored": "Закрытый ключ восстановлен из резервной копии", + "securityConfigRestoreFailed": "Не удалось восстановить ключ: {error}", + "securityConfigBackupDeleted": "Резервная копия удалена", + "securityConfigDeleteBackupFailed": "Не удалось удалить резервную копию: {error}", + "trafficMgmtTitle": "Управление трафиком", + "trafficMgmtSave": "Сохранить", + "trafficMgmtSectionGeneral": "ОБЩЕЕ", + "trafficMgmtSectionPositionDedup": "ДЕДУПЛИКАЦИЯ МЕСТОПОЛОЖЕНИЙ", + "trafficMgmtSectionNodeinfoResponse": "ПРЯМОЙ ОТВЕТ НА NODEINFO", + "trafficMgmtSectionRateLimit": "ОГРАНИЧЕНИЕ СКОРОСТИ", + "trafficMgmtSectionUnknownPackets": "НЕИЗВЕСТНЫЕ ПАКЕТЫ", + "trafficMgmtSectionHopMgmt": "УПРАВЛЕНИЕ ПЕРЕХОДАМИ", + "trafficMgmtEnable": "Включить управление трафиком", + "trafficMgmtEnableSubtitle": "Главный переключатель всех функций управления трафиком", + "trafficMgmtPositionDedup": "Дедупликация местоположений", + "trafficMgmtPositionDedupSubtitle": "Отбрасывать дублирующиеся пакеты местоположения", + "trafficMgmtPrecisionBits": "Биты точности: {value}", + "trafficMgmtPrecisionBitsDesc": "Меньшее значение означает более агрессивную дедупликацию", + "trafficMgmtPrecisionBitsLabel": "{value} бит", + "trafficMgmtMinInterval": "Мин. интервал: {seconds}с", + "trafficMgmtMinIntervalDesc": "Минимальный интервал между обновлениями местоположения в секундах", + "trafficMgmtDirectResponse": "Прямой ответ", + "trafficMgmtDirectResponseSubtitle": "Отвечать на запросы NodeInfo напрямую", + "trafficMgmtMaxHops": "Макс. переходов: {value}", + "trafficMgmtMaxHopsDesc": "Максимальное число переходов для прямого ответа NodeInfo", + "trafficMgmtPerNodeRateLimit": "Ограничение скорости на узел", + "trafficMgmtPerNodeRateLimitSubtitle": "Ограничивать скорость пакетов от отдельных узлов", + "trafficMgmtWindow": "Окно: {seconds}с", + "trafficMgmtWindowDesc": "Временное окно для расчёта ограничения скорости", + "trafficMgmtMaxPackets": "Макс. пакетов: {value}", + "trafficMgmtMaxPacketsDesc": "Максимальное число пакетов в окне перед отбрасыванием", + "trafficMgmtDropUnknown": "Отбрасывать неизвестные пакеты", + "trafficMgmtDropUnknownSubtitle": "Отбрасывать пакеты из неизвестных источников", + "trafficMgmtThreshold": "Порог: {value}", + "trafficMgmtThresholdDesc": "Количество неизвестных пакетов перед отбрасыванием", + "trafficMgmtExhaustHopTelemetry": "Исчерпание переходов для телеметрии", + "trafficMgmtExhaustHopTelemetrySub": "Установить лимит переходов 0 для ретранслируемой телеметрии", + "trafficMgmtExhaustHopPosition": "Исчерпание переходов для местоположения", + "trafficMgmtExhaustHopPositionSub": "Установить лимит переходов 0 для ретранслируемых местоположений", + "trafficMgmtPreserveRouterHops": "Сохранять переходы маршрутизатора", + "trafficMgmtPreserveRouterHopsSub": "Сохранять счётчик переходов для узлов-маршрутизаторов", + "trafficMgmtSaved": "Конфигурация управления трафиком сохранена", + "trafficMgmtSaveFailed": "Не удалось сохранить: {error}", + "adminPanelTitle": "Администратор", + "adminPanelSectionShop": "УПРАВЛЕНИЕ МАГАЗИНОМ", + "adminPanelShopDashboard": "Панель управления магазином", + "adminPanelShopDashboardSub": "Управление товарами, заказами и запасами", + "adminPanelDeviceShop": "Магазин устройств", + "adminPanelDeviceShopSub": "Просмотр и управление списком устройств", + "adminPanelSectionModeration": "МОДЕРАЦИЯ КОНТЕНТА", + "adminPanelBugReports": "Отчёты об ошибках", + "adminPanelBugReportsSub": "Просмотр отчётов об ошибках и ответы пользователям", + "adminPanelReviewMod": "Модерация отзывов", + "adminPanelReviewModSub": "Одобрение или отклонение отзывов пользователей", + "adminPanelReportedContent": "Жалобы на контент", + "adminPanelReportedContentSub": "Проверка публикаций и комментариев, на которые поступили жалобы", + "adminPanelWidgetReview": "Проверка виджетов для маркетплейса", + "adminPanelWidgetReviewSub": "Одобрение ожидающих заявок на виджеты", + "adminPanelSectionUsers": "УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ", + "adminPanelSocialSeeding": "Социальное заполнение", + "adminPanelSocialSeedingSub": "Управление запросами на подписку и связями", + "adminPanelUserPurchases": "Покупки пользователей", + "adminPanelUserPurchasesSub": "Просмотр транзакций пользователей и управление ими", + "adminPanelSectionConfig": "КОНФИГУРАЦИЯ ПРИЛОЖЕНИЯ", + "adminPanelBroadcast": "Массовое уведомление", + "adminPanelBroadcastSub": "Отправить push-уведомление всем пользователям", + "adminPanelQrStyles": "Стили QR-кодов", + "adminPanelQrStylesSub": "Предварительный просмотр фирменных дизайнов QR-кодов", + "adminPanelSectionDiag": "ДИАГНОСТИКА УСТРОЙСТВ", + "adminPanelDiagHarness": "Стенд диагностики", + "adminPanelDiagHarnessSub": "Запуск протокольных проверок и экспорт отладочного пакета", + "adminPanelConformance": "Стенд соответствия", + "adminPanelConformanceSub": "Тесты соответствия и нагрузочные тесты устройств с привязкой к провайдеру", "adminPanelBadgeOverflow": "99+", - "adminBroadcastTitle": "Broadcast Notification", - "adminBroadcastSignInRequired": "You must be signed in to send notifications", - "adminBroadcastTestSentTitle": "Test Sent", - "adminBroadcastSentTitle": "Broadcast Sent", - "adminBroadcastTestSentBody": "Your test notification has been sent to all admins.", - "adminBroadcastSentBody": "Your notification has been sent to all Socialmesh users.", - "adminBroadcastDone": "Done", - "adminBroadcastFailedDetailed": "Failed to send: {code} - {message}", - "adminBroadcastFailed": "Failed to send: {error}", - "adminBroadcastSelectDeepLink": "Select Deep Link", - "adminBroadcastSelectIcon": "Select Icon", - "adminBroadcastPreviewTitlePlaceholder": "Notification Title", - "adminBroadcastPreviewBodyPlaceholder": "Notification message will appear here...", - "adminBroadcastWarning": "This will send a push notification to every Socialmesh user. Use sparingly for important announcements only.", - "adminBroadcastIconLabel": "Icon", - "adminBroadcastClear": "Clear", - "adminBroadcastFieldTitle": "Title", - "adminBroadcastTitleHint": "Notification title...", - "adminBroadcastTitleRequired": "Title is required", - "adminBroadcastFieldMessage": "Message", - "adminBroadcastMessageHint": "Notification message...", - "adminBroadcastMessageRequired": "Message is required", - "adminBroadcastDeepLinkLabel": "Deep Link (Optional)", - "adminBroadcastDeepLinkHelper": "Screen to open when notification is tapped.", - "adminBroadcastDeepLinkNone": "None", - "adminBroadcastSendingTest": "Sending Test...", - "adminBroadcastTestButton": "Test to Admins Only", - "adminBroadcastTestHint": "Send a test notification to admins before broadcasting to all users.", - "adminBroadcastCountdownCancel": "Cancel — sending in {seconds}...", - "adminBroadcastSending": "Sending...", - "adminBroadcastSendAll": "Send to Everyone", - "adminBroadcastSendHint": "Sends a push notification to all Socialmesh users. A {seconds}s countdown gives you time to cancel.", - "adminBroadcastPreviewLabel": "PREVIEW", + "adminBroadcastTitle": "Массовое уведомление", + "adminBroadcastSignInRequired": "Для отправки уведомлений необходимо войти в систему", + "adminBroadcastTestSentTitle": "Тест отправлен", + "adminBroadcastSentTitle": "Рассылка отправлена", + "adminBroadcastTestSentBody": "Тестовое уведомление отправлено всем администраторам.", + "adminBroadcastSentBody": "Уведомление отправлено всем пользователям Socialmesh.", + "adminBroadcastDone": "Готово", + "adminBroadcastFailedDetailed": "Не удалось отправить: {code} - {message}", + "adminBroadcastFailed": "Не удалось отправить: {error}", + "adminBroadcastSelectDeepLink": "Выбрать глубокую ссылку", + "adminBroadcastSelectIcon": "Выбрать иконку", + "adminBroadcastPreviewTitlePlaceholder": "Заголовок уведомления", + "adminBroadcastPreviewBodyPlaceholder": "Здесь будет отображаться текст уведомления...", + "adminBroadcastWarning": "Это отправит push-уведомление всем пользователям Socialmesh. Используйте редко и только для важных объявлений.", + "adminBroadcastIconLabel": "Иконка", + "adminBroadcastClear": "Очистить", + "adminBroadcastFieldTitle": "Заголовок", + "adminBroadcastTitleHint": "Заголовок уведомления...", + "adminBroadcastTitleRequired": "Заголовок обязателен", + "adminBroadcastFieldMessage": "Сообщение", + "adminBroadcastMessageHint": "Текст уведомления...", + "adminBroadcastMessageRequired": "Сообщение обязательно", + "adminBroadcastDeepLinkLabel": "Глубокая ссылка (необязательно)", + "adminBroadcastDeepLinkHelper": "Экран, который откроется при нажатии на уведомление.", + "adminBroadcastDeepLinkNone": "Нет", + "adminBroadcastSendingTest": "Отправка теста...", + "adminBroadcastTestButton": "Тест только для администраторов", + "adminBroadcastTestHint": "Отправьте тестовое уведомление администраторам перед рассылкой всем пользователям.", + "adminBroadcastCountdownCancel": "Отмена — отправка через {seconds}с...", + "adminBroadcastSending": "Отправка...", + "adminBroadcastSendAll": "Отправить всем", + "adminBroadcastSendHint": "Отправляет push-уведомление всем пользователям Socialmesh. Обратный отсчёт {seconds}с даёт время для отмены.", + "adminBroadcastPreviewLabel": "ПРЕДПРОСМОТР", "adminBroadcastPreviewAppName": "SOCIALMESH", - "adminBroadcastPreviewNow": "now", - "adminBroadcastIconCatGeneral": "GENERAL", - "adminBroadcastIconCatSocial": "SOCIAL", - "adminBroadcastIconCatPremium": "PREMIUM", - "adminBroadcastIconAnnouncement": "Announcement", - "adminBroadcastIconUpdate": "App Update", - "adminBroadcastIconFeature": "New Feature", - "adminBroadcastIconMaintenance": "Maintenance", - "adminBroadcastIconAlert": "Alert", - "adminBroadcastIconCelebration": "Celebration", - "adminBroadcastIconTip": "Tip", + "adminBroadcastPreviewNow": "сейчас", + "adminBroadcastIconCatGeneral": "ОБЩЕЕ", + "adminBroadcastIconCatSocial": "СОЦИАЛЬНОЕ", + "adminBroadcastIconCatPremium": "ПРЕМИУМ", + "adminBroadcastIconAnnouncement": "Объявление", + "adminBroadcastIconUpdate": "Обновление приложения", + "adminBroadcastIconFeature": "Новая функция", + "adminBroadcastIconMaintenance": "Техническое обслуживание", + "adminBroadcastIconAlert": "Предупреждение", + "adminBroadcastIconCelebration": "Праздник", + "adminBroadcastIconTip": "Совет", "adminBroadcastIconSignals": "Signals", "adminBroadcastIconNodedex": "NodeDex", "adminBroadcastIconAether": "Aether", - "adminBroadcastIconActivity": "Activity", + "adminBroadcastIconActivity": "Активность", "adminBroadcastIconPresence": "Presence", - "adminBroadcastIconCommunity": "Community", - "adminBroadcastIconWorldMap": "World Map", - "adminBroadcastIconThemes": "Theme Pack", - "adminBroadcastIconRingtones": "Ringtone Pack", - "adminBroadcastIconWidgets": "Widgets", - "adminBroadcastIconAutomations": "Automations", - "adminBroadcastIconIfttt": "IFTTT Integration", - "adminBroadcastDefTitleAnnouncement": "Announcement", - "adminBroadcastDefTitleUpdate": "App Update Available", - "adminBroadcastDefTitleFeature": "New Feature", - "adminBroadcastDefTitleMaintenance": "Scheduled Maintenance", - "adminBroadcastDefTitleAlert": "Important Alert", - "adminBroadcastDefTitleCelebration": "Celebration", - "adminBroadcastDefTitleTip": "Pro Tip", - "adminBroadcastDefTitleSignals": "Signals Update", - "adminBroadcastDefTitleNodedex": "NodeDex Update", - "adminBroadcastDefTitleAether": "Aether Update", - "adminBroadcastDefTitleActivity": "Activity Update", - "adminBroadcastDefTitlePresence": "Presence Update", - "adminBroadcastDefTitleCommunity": "Community Update", - "adminBroadcastDefTitleWorldMap": "World Map Update", - "adminBroadcastDefTitleThemes": "New Theme Pack", - "adminBroadcastDefTitleRingtones": "New Ringtone Pack", - "adminBroadcastDefTitleWidgets": "New Widgets", - "adminBroadcastDefTitleAutomations": "Automations Update", - "adminBroadcastDefTitleIfttt": "IFTTT Integration", - "adminBroadcastDefBodyAnnouncement": "We have an important announcement for the Socialmesh community.", - "adminBroadcastDefBodyUpdate": "A new version of Socialmesh is available with improvements and bug fixes.", - "adminBroadcastDefBodyFeature": "We just launched a new feature in Socialmesh. Check it out!", - "adminBroadcastDefBodyMaintenance": "Socialmesh services will be briefly unavailable for scheduled maintenance.", - "adminBroadcastDefBodyAlert": "Please be aware of an important issue affecting Socialmesh.", - "adminBroadcastDefBodyCelebration": "We have something exciting to celebrate with the Socialmesh community!", - "adminBroadcastDefBodyTip": "Here is a helpful tip to get the most out of Socialmesh.", - "adminBroadcastDefBodySignals": "Check out what is new in Signals, your mesh presence feed.", - "adminBroadcastDefBodyNodedex": "NodeDex has new features for discovering and tracking mesh nodes.", - "adminBroadcastDefBodyAether": "New improvements to Aether flight sharing are now live.", - "adminBroadcastDefBodyActivity": "See what is happening in your Activity feed.", - "adminBroadcastDefBodyPresence": "Presence detection has been improved for better mesh awareness.", - "adminBroadcastDefBodyCommunity": "Join the latest Socialmesh community initiatives.", - "adminBroadcastDefBodyWorldMap": "The World Mesh Map has new features for exploring global mesh coverage.", - "adminBroadcastDefBodyThemes": "A new theme pack is now available in the Socialmesh store.", - "adminBroadcastDefBodyRingtones": "A new ringtone pack is now available for your mesh notifications.", - "adminBroadcastDefBodyWidgets": "New home screen widgets are now available for Socialmesh.", - "adminBroadcastDefBodyAutomations": "New automation triggers and actions are now available.", - "adminBroadcastDefBodyIfttt": "Connect Socialmesh with your favourite services via IFTTT.", - "adminBroadcastDeepLinkCatCore": "CORE", - "adminBroadcastDeepLinkCatSocial": "SOCIAL", + "adminBroadcastIconCommunity": "Сообщество", + "adminBroadcastIconWorldMap": "Карта мира", + "adminBroadcastIconThemes": "Набор тем", + "adminBroadcastIconRingtones": "Набор рингтонов", + "adminBroadcastIconWidgets": "Виджеты", + "adminBroadcastIconAutomations": "Автоматизации", + "adminBroadcastIconIfttt": "Интеграция IFTTT", + "adminBroadcastDefTitleAnnouncement": "Объявление", + "adminBroadcastDefTitleUpdate": "Доступно обновление приложения", + "adminBroadcastDefTitleFeature": "Новая функция", + "adminBroadcastDefTitleMaintenance": "Плановое техническое обслуживание", + "adminBroadcastDefTitleAlert": "Важное предупреждение", + "adminBroadcastDefTitleCelebration": "Праздник", + "adminBroadcastDefTitleTip": "Полезный совет", + "adminBroadcastDefTitleSignals": "Обновление Signals", + "adminBroadcastDefTitleNodedex": "Обновление NodeDex", + "adminBroadcastDefTitleAether": "Обновление Aether", + "adminBroadcastDefTitleActivity": "Обновление активности", + "adminBroadcastDefTitlePresence": "Обновление Presence", + "adminBroadcastDefTitleCommunity": "Обновление сообщества", + "adminBroadcastDefTitleWorldMap": "Обновление карты мира", + "adminBroadcastDefTitleThemes": "Новый набор тем", + "adminBroadcastDefTitleRingtones": "Новый набор рингтонов", + "adminBroadcastDefTitleWidgets": "Новые виджеты", + "adminBroadcastDefTitleAutomations": "Обновление автоматизаций", + "adminBroadcastDefTitleIfttt": "Интеграция IFTTT", + "adminBroadcastDefBodyAnnouncement": "У нас есть важное объявление для сообщества Socialmesh.", + "adminBroadcastDefBodyUpdate": "Доступна новая версия Socialmesh с улучшениями и исправлениями ошибок.", + "adminBroadcastDefBodyFeature": "Мы только что запустили новую функцию в Socialmesh. Попробуйте!", + "adminBroadcastDefBodyMaintenance": "Сервисы Socialmesh будут кратковременно недоступны в связи с плановым техническим обслуживанием.", + "adminBroadcastDefBodyAlert": "Обратите внимание на важную проблему, затрагивающую Socialmesh.", + "adminBroadcastDefBodyCelebration": "У нас есть повод отпраздновать вместе с сообществом Socialmesh!", + "adminBroadcastDefBodyTip": "Вот полезный совет, который поможет вам получить максимум от Socialmesh.", + "adminBroadcastDefBodySignals": "Узнайте, что нового в Signals — вашей mesh-ленте присутствия.", + "adminBroadcastDefBodyNodedex": "В NodeDex появились новые функции для обнаружения и отслеживания mesh-узлов.", + "adminBroadcastDefBodyAether": "Новые улучшения Aether для обмена полётами теперь доступны.", + "adminBroadcastDefBodyActivity": "Посмотрите, что происходит в вашей ленте активности.", + "adminBroadcastDefBodyPresence": "Обнаружение присутствия улучшено для лучшего осознания mesh-сети.", + "adminBroadcastDefBodyCommunity": "Присоединяйтесь к последним инициативам сообщества Socialmesh.", + "adminBroadcastDefBodyWorldMap": "На карте глобальной mesh-сети появились новые функции для изучения покрытия.", + "adminBroadcastDefBodyThemes": "В магазине Socialmesh теперь доступен новый набор тем.", + "adminBroadcastDefBodyRingtones": "Новый набор рингтонов для ваших mesh-уведомлений теперь доступен.", + "adminBroadcastDefBodyWidgets": "Новые виджеты для главного экрана теперь доступны в Socialmesh.", + "adminBroadcastDefBodyAutomations": "Доступны новые триггеры и действия для автоматизаций.", + "adminBroadcastDefBodyIfttt": "Подключите Socialmesh к любимым сервисам через IFTTT.", + "adminBroadcastDeepLinkCatCore": "ОСНОВНОЕ", + "adminBroadcastDeepLinkCatSocial": "СОЦИАЛЬНОЕ", "adminBroadcastDeepLinkCatMesh": "MESH", - "adminBroadcastDeepLinkCatPremium": "PREMIUM", - "adminBroadcastLinkSettings": "Settings", - "adminBroadcastLinkAccount": "Account & Subscriptions", - "adminBroadcastLinkScanner": "Scanner", - "adminBroadcastLinkMessages": "Messages", - "adminBroadcastLinkChannels": "Channels", - "adminBroadcastLinkNodes": "Nodes", - "adminBroadcastLinkMap": "Map", + "adminBroadcastDeepLinkCatPremium": "ПРЕМИУМ", + "adminBroadcastLinkSettings": "Настройки", + "adminBroadcastLinkAccount": "Аккаунт и подписки", + "adminBroadcastLinkScanner": "Сканер", + "adminBroadcastLinkMessages": "Сообщения", + "adminBroadcastLinkChannels": "Каналы", + "adminBroadcastLinkNodes": "Узлы", + "adminBroadcastLinkMap": "Карта", "adminBroadcastLinkSignals": "Signals", "adminBroadcastLinkNodedex": "NodeDex", "adminBroadcastLinkAether": "Aether", - "adminBroadcastLinkActivity": "Activity", + "adminBroadcastLinkActivity": "Активность", "adminBroadcastLinkPresence": "Presence", - "adminBroadcastLinkTimeline": "Timeline", - "adminBroadcastLinkWorldMap": "World Map", - "adminBroadcastLinkGlobe": "3D Globe", - "adminBroadcastLinkReachability": "Reachability", - "adminBroadcastLinkThemes": "Theme Pack", - "adminBroadcastLinkRingtones": "Ringtone Pack", - "adminBroadcastLinkWidgets": "Widgets", - "adminBroadcastLinkAutomations": "Automations", - "adminBroadcastLinkIfttt": "IFTTT Integration", - "adminDiagTitle": "Admin Diagnostics", - "adminDiagTargetLocal": "Local device", - "adminDiagTargetRemote": "Remote: {hexId}", - "adminDiagDescription": "Run diagnostic probes against your connected device and export a detailed bundle for debugging protocol/transport issues.", - "adminDiagTargetLabel": "Target", - "adminDiagMyNodeLabel": "My Node", - "adminDiagStressToggle": "Include stress tests", - "adminDiagStressToggleSub": "Burst reads and out-of-order correlation", - "adminDiagWriteToggle": "Include write tests (reversible)", - "adminDiagWriteToggleSub": "No-op writes with read-back verification", - "adminDiagRunButton": "Run Diagnostics", - "adminDiagNoDevice": "No device connected", - "adminDiagProbeProgress": "{completed} / {total} probes", - "adminDiagCancel": "Cancel", - "adminDiagResultSummary": "{passed} passed, {failed} failed", - "adminDiagExportBundle": "Export Bundle", - "adminDiagCopySummary": "Copy Summary to Clipboard", - "adminDiagRunAgain": "Run Again", - "adminDiagWriteTestsDialogTitle": "Enable Write Tests?", - "adminDiagWriteTestsDialogBody": "Write tests perform no-op writes (same value) to verify round-trip behavior. They do not change device state, but they do send SET commands to the device.\n\nAre you sure you want to include write tests?", - "adminDiagWriteTestsCancel": "Cancel", - "adminDiagWriteTestsEnable": "Enable", - "adminDiagExportFailed": "Export failed: {error}", - "adminDiagCopiedToClipboard": "Summary copied to clipboard", - "adminPurchasesTitle": "User Purchases", - "adminPurchasesLabelTotal": " TOTAL · ", - "adminPurchasesLabelPaying": " PAYING · ", - "adminPurchasesLabelFree": " FREE · ", - "adminPurchasesLabelRevenue": " REVENUE", - "adminPurchasesLabelExcluded": " EXCLUDED", - "adminPurchasesStatTotalUsers": "Total Users", - "adminPurchasesStatPaying": "Paying", - "adminPurchasesStatExcludedCount": "{count} excluded", - "adminPurchasesStatFree": "Free", - "adminPurchasesStatConversion": "Conversion", + "adminBroadcastLinkTimeline": "Лента", + "adminBroadcastLinkWorldMap": "Карта мира", + "adminBroadcastLinkGlobe": "3D-глобус", + "adminBroadcastLinkReachability": "Доступность", + "adminBroadcastLinkThemes": "Набор тем", + "adminBroadcastLinkRingtones": "Набор рингтонов", + "adminBroadcastLinkWidgets": "Виджеты", + "adminBroadcastLinkAutomations": "Автоматизации", + "adminBroadcastLinkIfttt": "Интеграция IFTTT", + "adminDiagTitle": "Диагностика администратора", + "adminDiagTargetLocal": "Локальное устройство", + "adminDiagTargetRemote": "Удалённое: {hexId}", + "adminDiagDescription": "Запускайте диагностические проверки подключённого устройства и экспортируйте подробный пакет данных для отладки проблем с протоколом и транспортом.", + "adminDiagTargetLabel": "Цель", + "adminDiagMyNodeLabel": "Мой узел", + "adminDiagStressToggle": "Включить стресс-тесты", + "adminDiagStressToggleSub": "Пакетное чтение и корреляция не по порядку", + "adminDiagWriteToggle": "Включить тесты записи (обратимые)", + "adminDiagWriteToggleSub": "Фиктивные записи с проверкой чтения", + "adminDiagRunButton": "Запустить диагностику", + "adminDiagNoDevice": "Устройство не подключено", + "adminDiagProbeProgress": "{completed} / {total} проверок", + "adminDiagCancel": "Отмена", + "adminDiagResultSummary": "{passed} пройдено, {failed} не пройдено", + "adminDiagExportBundle": "Экспортировать пакет", + "adminDiagCopySummary": "Скопировать сводку в буфер обмена", + "adminDiagRunAgain": "Запустить снова", + "adminDiagWriteTestsDialogTitle": "Включить тесты записи?", + "adminDiagWriteTestsDialogBody": "Тесты записи выполняют фиктивные записи (то же значение) для проверки поведения при передаче. Они не изменяют состояние устройства, но отправляют команды SET на устройство.\n\nВы уверены, что хотите включить тесты записи?", + "adminDiagWriteTestsCancel": "Отмена", + "adminDiagWriteTestsEnable": "Включить", + "adminDiagExportFailed": "Ошибка экспорта: {error}", + "adminDiagCopiedToClipboard": "Сводка скопирована в буфер обмена", + "adminPurchasesTitle": "Покупки пользователей", + "adminPurchasesLabelTotal": " ВСЕГО · ", + "adminPurchasesLabelPaying": " ПЛАТЯЩИХ · ", + "adminPurchasesLabelFree": " БЕСПЛАТНЫХ · ", + "adminPurchasesLabelRevenue": " ВЫРУЧКА", + "adminPurchasesLabelExcluded": " ИСКЛЮЧЕНО", + "adminPurchasesStatTotalUsers": "Всего пользователей", + "adminPurchasesStatPaying": "Платящие", + "adminPurchasesStatExcludedCount": "Исключено: {count}", + "adminPurchasesStatFree": "Бесплатные", + "adminPurchasesStatConversion": "Конверсия", "adminPurchasesStatArpu": "ARPU", - "adminPurchasesStatArpuTooltip": "Average Revenue Per User", - "adminPurchasesStatGross": "Gross Revenue", - "adminPurchasesStatExcluded": "Excluded", - "adminPurchasesStatNet": "Net Revenue", - "adminPurchasesStatNewUsers24h": "New Users (24h)", - "adminPurchasesStatPurchases24h": "Purchases (24h)", - "adminPurchasesStatRevenue24h": "Revenue (24h)", - "adminPurchasesSearchHint": "Search users...", - "adminPurchasesFilterAll": "All", - "adminPurchasesFilterPaying": "Paying", - "adminPurchasesFilterFree": "Free", - "adminPurchasesFilterExcluded": "Excluded", - "adminPurchasesFilterAnonymous": "Anonymous", - "adminPurchasesFilterDeleted": "Deleted", - "adminPurchasesBannerTitle": "Shows purchases synced via app login or RevenueCat webhooks.", - "adminPurchasesBannerSubtitle": "Users must open the app while signed in for their purchases to appear here.", - "adminPurchasesErrorLoading": "Error loading users", - "adminPurchasesRetry": "Retry", - "adminPurchasesNoSearchResults": "No users match your search", - "adminPurchasesNoUsers": "No users found", - "adminPurchasesUnknownUser": "Unknown User", - "adminPurchasesAnonymousTag": "Anonymous", - "adminPurchasesDeletedTag": "Deleted", - "adminPurchasesAnonRcUser": "Anonymous RevenueCat User", - "adminPurchasesFallbackCloudSync": "Cloud Sync", - "adminPurchasesSectionIds": "Identifiers", + "adminPurchasesStatArpuTooltip": "Средняя выручка на пользователя", + "adminPurchasesStatGross": "Валовая выручка", + "adminPurchasesStatExcluded": "Исключено", + "adminPurchasesStatNet": "Чистая выручка", + "adminPurchasesStatNewUsers24h": "Новых пользователей (24ч)", + "adminPurchasesStatPurchases24h": "Покупок (24ч)", + "adminPurchasesStatRevenue24h": "Выручка (24ч)", + "adminPurchasesSearchHint": "Поиск пользователей...", + "adminPurchasesFilterAll": "Все", + "adminPurchasesFilterPaying": "Платящие", + "adminPurchasesFilterFree": "Бесплатные", + "adminPurchasesFilterExcluded": "Исключённые", + "adminPurchasesFilterAnonymous": "Анонимные", + "adminPurchasesFilterDeleted": "Удалённые", + "adminPurchasesBannerTitle": "Отображаются покупки, синхронизированные через вход в приложение или вебхуки RevenueCat.", + "adminPurchasesBannerSubtitle": "Пользователи должны открыть приложение, будучи авторизованными, чтобы их покупки отобразились здесь.", + "adminPurchasesErrorLoading": "Ошибка загрузки пользователей", + "adminPurchasesRetry": "Повторить", + "adminPurchasesNoSearchResults": "Пользователи не найдены", + "adminPurchasesNoUsers": "Пользователи не найдены", + "adminPurchasesUnknownUser": "Неизвестный пользователь", + "adminPurchasesAnonymousTag": "Анонимный", + "adminPurchasesDeletedTag": "Удалён", + "adminPurchasesAnonRcUser": "Анонимный пользователь RevenueCat", + "adminPurchasesFallbackCloudSync": "Облачная синхронизация", + "adminPurchasesSectionIds": "Идентификаторы", "adminPurchasesFirebaseUid": "Firebase UID", "adminPurchasesRevenueCatId": "RevenueCat ID", - "adminPurchasesMemberSince": "Member Since", - "adminPurchasesSectionPurchases": "Purchases", - "adminPurchasesItemCount": "{count} items", - "adminPurchasesNoPurchases": "No purchases", - "adminPurchasesCopied": "Copied to clipboard", - "adminPurchasesCopyTooltip": "Copy", - "adminQrStyleTitle": "QR Code Styles", - "adminQrStyleHeading": "Branded QR Code Styles", - "adminQrStyleDescription": "Preview different QR code styles with the Socialmesh logo. All styles use Level H error correction for reliable scanning.", - "adminQrStyleSmooth": "Smooth", - "adminQrStyleSmoothDesc": "Modern, rounded liquid-like modules. Premium feel.", - "adminQrStyleDots": "Dots", - "adminQrStyleDotsDesc": "Circular dot modules. Clean and minimal look.", - "adminQrStyleSquares": "Squares", - "adminQrStyleSquaresDesc": "Classic blocky QR style. Maximum compatibility.", - "adminQrStyleElevatedHeader": "ELEVATED STYLES", - "adminQrStyleElevatedSub": "Premium color treatments using {styleName} pattern", - "adminQrStyleNeonGlow": "Neon Glow", - "adminQrStyleFrostedGlass": "Frosted Glass", - "adminQrStyleInverted": "Inverted", - "adminQrStyleHolographic": "Holographic", - "adminQrStyleAccentBranded": "Accent Branded", - "adminQrStyleMinimal": "Minimal", - "adminQrStyleCyberpunk": "Cyberpunk", - "adminQrStyleAccentGlow": "Accent Glow", - "adminQrStyleOcean": "Ocean", - "adminQrStyleLuxury": "Luxury", - "adminQrStyleSelected": "Selected: {styleName}", - "adminQrStyleScanToVerify": "Scan to verify", - "adminBugReportsTitle": "Bug Reports", - "adminBugReportsSearchHint": "Search reports", - "adminBugReportsLoadError": "Failed to load reports", - "adminBugReportsMessageTooLong": "Message exceeds 2,000 characters.", - "adminBugReportsReplySent": "Response sent.", - "adminBugReportsReplyFailed": "Failed to send: {error}", - "adminBugReportsResolved": "Report resolved.", - "adminBugReportsReopened": "Report reopened.", - "adminBugReportsStatusFailed": "Failed to update status: {error}", - "adminBugReportsStatusOpen": "OPEN", - "adminBugReportsStatusUserReplied": "USER REPLIED", - "adminBugReportsStatusResponded": "RESPONDED", - "adminBugReportsStatusResolved": "RESOLVED", - "adminBugReportsTimeJustNow": "just now", - "adminBugReportsTimeMinutes": "{minutes}m ago", - "adminBugReportsTimeHours": "{hours}h ago", - "adminBugReportsTimeDays": "{days}d ago", - "adminBugReportsSectionDesc": "DESCRIPTION", - "adminBugReportsSectionScreenshot": "SCREENSHOT", - "adminBugReportsSectionDetails": "DETAILS", - "adminBugReportsDetailReportId": "Report ID", - "adminBugReportsDetailUserId": "User ID", - "adminBugReportsAnonymousValue": "anonymous", - "adminBugReportsDetailEmail": "Email", - "adminBugReportsDetailDevice": "Device", - "adminBugReportsDetailOs": "OS Version", - "adminBugReportsDetailAppVer": "App Version", - "adminBugReportsSectionConversation": "CONVERSATION", - "adminBugReportsThreadYou": "You", - "adminBugReportsThreadUser": "User", - "adminBugReportsReplyHint": "Write a response...", - "adminBugReportsReopen": "Reopen", - "adminBugReportsResolve": "Resolve", - "adminBugReportsCountdownCancel": "Cancel · {seconds}", - "adminBugReportsSend": "Send", - "adminBugReportsAnonNotice": "Anonymous report — replies cannot be delivered.", - "adminBugReportsEmptyFilter": "No reports match your filter.", - "adminBugReportsEmptyAll": "No bug reports yet.", - "adminConformanceTitle": "Conformance Harness", - "adminConformanceDescription": "Provider-bound device conformance testing. All mutations flow through the same provider entrypoints used by the actual screens.", - "adminConformanceTargetDevice": "Target Device", - "adminConformanceTargetRemote": "Remote: {target}", - "adminConformanceTargetLocal": "Local device", - "adminConformanceNodesAvailable": "{count} remote node(s) available", - "adminConformanceOtaPki": "Over-the-air admin via PKI", - "adminConformanceNoNodes": "No PKI-capable remote nodes", - "adminConformanceSwitchLocal": "Switch to Local", - "adminConformanceTestOptions": "Test Options", - "adminConformanceDestructive": "Destructive Tests", - "adminConformanceDestructiveSub": "Randomized mutations, burst stress, node DB reset. May temporarily change device config.", - "adminConformanceRunRemoteDestructive": "Run Remote Conformance (Destructive)", - "adminConformanceRunRemoteSafe": "Run Remote Conformance (Safe)", - "adminConformanceRunLocalDestructive": "Run Conformance (Destructive)", - "adminConformanceRunLocalSafe": "Run Conformance (Safe)", - "adminConformanceProgress": "{completed} / {total} (pass: {pass}, fail: {fail})", - "adminConformanceCancel": "Cancel", - "adminConformanceAllPassed": "All Tests Passed", - "adminConformanceSomeFailed": "Some Tests Failed", - "adminConformanceLabelPassed": "Passed", - "adminConformanceLabelFailed": "Failed", - "adminConformanceLabelSkipped": "Skipped", - "adminConformanceLabelTimeouts": "Timeouts", - "adminConformanceAnomalies": "Anomalies:", - "adminConformanceTestResults": "Test Results", - "adminConformanceExportBundle": "Export Bundle", - "adminConformanceRunAgain": "Run Again", - "adminConformanceInitializing": "Initializing", - "globalLayerDiagnosticsTitle": "Diagnostics", - "globalLayerCopyReportTooltip": "Copy report", - "globalLayerCheckResultsHeader": "Check Results", - "globalLayerConnectionDiagnosticsTitle": "Connection Diagnostics", - "globalLayerConnectionDiagnosticsDescription": "Run a series of checks to verify your broker connection. Each step tests a different layer of the connection stack.", - "globalLayerRunningChecksProgress": "Running checks... {passed}/{total}", - "globalLayerRunAgain": "Run Again", - "globalLayerStartDiagnostics": "Start Diagnostics", - "globalLayerSummaryHeader": "Summary", - "globalLayerTotalTime": "Total time: {milliseconds}ms", - "globalLayerAllClearTitle": "All Clear", - "globalLayerAllChecksPassed": "All {count} checks passed", - "globalLayerWarningsFoundTitle": "Warnings Found", - "globalLayerWarningsFoundMessage": "All checks passed but with warnings to review", - "globalLayerIssuesFoundTitle": "Issues Found", - "globalLayerChecksFailedCount": "{failed} of {total} checks failed", - "globalLayerDiagnosticsReportCopied": "Diagnostics report copied to clipboard", - "globalLayerChecking": "Checking...", - "globalLayerSkippedBecauseFailed": "Skipped because {checkName} failed.", - "globalLayerFixCheckFirst": "Fix {checkName} first, then re-run diagnostics.", - "globalLayerNoHostnameConfigured": "No hostname configured.", - "globalLayerEnterBrokerHostname": "Enter a broker hostname in the setup wizard.", - "globalLayerHostnameResolved": "Hostname \"{host}\" resolved successfully.", - "globalLayerTcpConnectionEstablished": "TCP connection to {host}:{port} established.", - "globalLayerTlsHandshakeCompleted": "TLS handshake completed successfully.", - "globalLayerAuthenticatedAs": "Authenticated as \"{username}\".", - "globalLayerAnonymousConnection": "Anonymous connection accepted by broker.", - "globalLayerSubscribedToTopics": "Subscribed to {count} topic(s) successfully.", - "globalLayerSubscribeCapabilityVerified": "Subscribe capability verified (no topics enabled).", - "globalLayerPublishTestPassed": "Test message published and received on loopback.", - "globalLayerFailedToLoadConfig": "Failed to load Global Layer configuration", - "globalLayerRetry": "Retry", - "globalLayerCopyDiagnosticsTooltip": "Copy diagnostics", - "globalLayerTopicExplorerTitle": "Topic Explorer", - "globalLayerRunDiagnosticsMenuItem": "Run Diagnostics", - "globalLayerReconfigureMenuItem": "Reconfigure", - "globalLayerReset": "Reset", - "globalLayerRecentActivityHeader": "Recent Activity", - "globalLayerPausedSnackbar": "Global Layer paused", - "globalLayerResumedSnackbar": "Global Layer resumed", - "globalLayerDiagnosticsCopiedSnackbar": "Diagnostics copied to clipboard", - "globalLayerResetTitle": "Reset Global Layer", - "globalLayerResetMessage": "This will clear all broker configuration, credentials, and connection history. You will need to run the setup wizard again.", - "globalLayerQuickActionsHeader": "Quick Actions", - "globalLayerDisconnectAction": "Disconnect", - "globalLayerConnectAction": "Connect", - "globalLayerPauseAction": "Pause", - "globalLayerResumeAction": "Resume", - "globalLayerDiagnoseAction": "Diagnose", - "globalLayerTopicsAction": "Topics", - "globalLayerBrokerHeader": "Broker", - "globalLayerHostLabel": "Host", - "globalLayerPortLabel": "Port", + "adminPurchasesMemberSince": "Участник с", + "adminPurchasesSectionPurchases": "Покупки", + "adminPurchasesItemCount": "{count} позиций", + "adminPurchasesNoPurchases": "Покупки отсутствуют", + "adminPurchasesCopied": "Скопировано в буфер обмена", + "adminPurchasesCopyTooltip": "Скопировать", + "adminQrStyleTitle": "Стили QR-кодов", + "adminQrStyleHeading": "Фирменные стили QR-кодов", + "adminQrStyleDescription": "Предпросмотр различных стилей QR-кодов с логотипом Socialmesh. Все стили используют уровень коррекции ошибок H для надёжного сканирования.", + "adminQrStyleSmooth": "Плавный", + "adminQrStyleSmoothDesc": "Современные закруглённые жидкообразные модули. Премиальный вид.", + "adminQrStyleDots": "Точки", + "adminQrStyleDotsDesc": "Круглые модули-точки. Чистый и минималистичный вид.", + "adminQrStyleSquares": "Квадраты", + "adminQrStyleSquaresDesc": "Классический блочный стиль QR. Максимальная совместимость.", + "adminQrStyleElevatedHeader": "РАСШИРЕННЫЕ СТИЛИ", + "adminQrStyleElevatedSub": "Премиальные цветовые решения с использованием паттерна {styleName}", + "adminQrStyleNeonGlow": "Неоновое свечение", + "adminQrStyleFrostedGlass": "Матовое стекло", + "adminQrStyleInverted": "Инвертированный", + "adminQrStyleHolographic": "Голографический", + "adminQrStyleAccentBranded": "Фирменный акцент", + "adminQrStyleMinimal": "Минимальный", + "adminQrStyleCyberpunk": "Киберпанк", + "adminQrStyleAccentGlow": "Акцентное свечение", + "adminQrStyleOcean": "Океан", + "adminQrStyleLuxury": "Люкс", + "adminQrStyleSelected": "Выбрано: {styleName}", + "adminQrStyleScanToVerify": "Сканируйте для проверки", + "adminBugReportsTitle": "Отчёты об ошибках", + "adminBugReportsSearchHint": "Поиск отчётов", + "adminBugReportsLoadError": "Не удалось загрузить отчёты", + "adminBugReportsMessageTooLong": "Сообщение превышает 2 000 символов.", + "adminBugReportsReplySent": "Ответ отправлен.", + "adminBugReportsReplyFailed": "Не удалось отправить: {error}", + "adminBugReportsResolved": "Отчёт решён.", + "adminBugReportsReopened": "Отчёт повторно открыт.", + "adminBugReportsStatusFailed": "Не удалось обновить статус: {error}", + "adminBugReportsStatusOpen": "ОТКРЫТ", + "adminBugReportsStatusUserReplied": "ПОЛЬЗОВАТЕЛЬ ОТВЕТИЛ", + "adminBugReportsStatusResponded": "ПОЛУЧЕН ОТВЕТ", + "adminBugReportsStatusResolved": "РЕШЁН", + "adminBugReportsTimeJustNow": "только что", + "adminBugReportsTimeMinutes": "{minutes}мин. назад", + "adminBugReportsTimeHours": "{hours}ч. назад", + "adminBugReportsTimeDays": "{days}д. назад", + "adminBugReportsSectionDesc": "ОПИСАНИЕ", + "adminBugReportsSectionScreenshot": "СНИМОК ЭКРАНА", + "adminBugReportsSectionDetails": "ДЕТАЛИ", + "adminBugReportsDetailReportId": "ID отчёта", + "adminBugReportsDetailUserId": "ID пользователя", + "adminBugReportsAnonymousValue": "анонимно", + "adminBugReportsDetailEmail": "Электронная почта", + "adminBugReportsDetailDevice": "Устройство", + "adminBugReportsDetailOs": "Версия ОС", + "adminBugReportsDetailAppVer": "Версия приложения", + "adminBugReportsSectionConversation": "ПЕРЕПИСКА", + "adminBugReportsThreadYou": "Вы", + "adminBugReportsThreadUser": "Пользователь", + "adminBugReportsReplyHint": "Напишите ответ...", + "adminBugReportsReopen": "Открыть заново", + "adminBugReportsResolve": "Решить", + "adminBugReportsCountdownCancel": "Отмена · {seconds}", + "adminBugReportsSend": "Отправить", + "adminBugReportsAnonNotice": "Анонимный отчёт — ответы не могут быть доставлены.", + "adminBugReportsEmptyFilter": "Нет отчётов, соответствующих вашему фильтру.", + "adminBugReportsEmptyAll": "Отчётов об ошибках пока нет.", + "adminConformanceTitle": "Стенд тестирования соответствия", + "adminConformanceDescription": "Тестирование соответствия устройства через провайдер. Все мутации проходят через те же точки входа провайдера, что используются реальными экранами.", + "adminConformanceTargetDevice": "Целевое устройство", + "adminConformanceTargetRemote": "Удалённое: {target}", + "adminConformanceTargetLocal": "Локальное устройство", + "adminConformanceNodesAvailable": "Доступно {count} удалённых узлов", + "adminConformanceOtaPki": "Удалённое управление через PKI", + "adminConformanceNoNodes": "Нет удалённых узлов с поддержкой PKI", + "adminConformanceSwitchLocal": "Переключиться на локальное", + "adminConformanceTestOptions": "Параметры тестирования", + "adminConformanceDestructive": "Деструктивные тесты", + "adminConformanceDestructiveSub": "Случайные мутации, пакетная нагрузка, сброс базы узлов. Может временно изменить конфигурацию устройства.", + "adminConformanceRunRemoteDestructive": "Запустить удалённое тестирование (деструктивное)", + "adminConformanceRunRemoteSafe": "Запустить удалённое тестирование (безопасное)", + "adminConformanceRunLocalDestructive": "Запустить тестирование (деструктивное)", + "adminConformanceRunLocalSafe": "Запустить тестирование (безопасное)", + "adminConformanceProgress": "{completed} / {total} (пройдено: {pass}, не пройдено: {fail})", + "adminConformanceCancel": "Отмена", + "adminConformanceAllPassed": "Все тесты пройдены", + "adminConformanceSomeFailed": "Некоторые тесты не пройдены", + "adminConformanceLabelPassed": "Пройдено", + "adminConformanceLabelFailed": "Не пройдено", + "adminConformanceLabelSkipped": "Пропущено", + "adminConformanceLabelTimeouts": "Таймауты", + "adminConformanceAnomalies": "Аномалии:", + "adminConformanceTestResults": "Результаты тестов", + "adminConformanceExportBundle": "Экспортировать пакет", + "adminConformanceRunAgain": "Запустить снова", + "adminConformanceInitializing": "Инициализация", + "globalLayerDiagnosticsTitle": "Диагностика", + "globalLayerCopyReportTooltip": "Копировать отчёт", + "globalLayerCheckResultsHeader": "Результаты проверки", + "globalLayerConnectionDiagnosticsTitle": "Диагностика подключения", + "globalLayerConnectionDiagnosticsDescription": "Выполнить серию проверок для верификации подключения к брокеру. Каждый шаг тестирует отдельный уровень стека подключения.", + "globalLayerRunningChecksProgress": "Выполняются проверки... {passed}/{total}", + "globalLayerRunAgain": "Запустить снова", + "globalLayerStartDiagnostics": "Начать диагностику", + "globalLayerSummaryHeader": "Сводка", + "globalLayerTotalTime": "Общее время: {milliseconds}мс", + "globalLayerAllClearTitle": "Всё в порядке", + "globalLayerAllChecksPassed": "Все {count} проверки пройдены", + "globalLayerWarningsFoundTitle": "Обнаружены предупреждения", + "globalLayerWarningsFoundMessage": "Все проверки пройдены, но есть предупреждения для просмотра", + "globalLayerIssuesFoundTitle": "Обнаружены проблемы", + "globalLayerChecksFailedCount": "{failed} из {total} проверок не пройдено", + "globalLayerDiagnosticsReportCopied": "Отчёт диагностики скопирован в буфер обмена", + "globalLayerChecking": "Проверка...", + "globalLayerSkippedBecauseFailed": "Пропущено, так как {checkName} не прошла.", + "globalLayerFixCheckFirst": "Сначала исправьте {checkName}, затем повторно запустите диагностику.", + "globalLayerNoHostnameConfigured": "Имя хоста не настроено.", + "globalLayerEnterBrokerHostname": "Введите имя хоста брокера в мастере настройки.", + "globalLayerHostnameResolved": "Имя хоста \"{host}\" успешно разрешено.", + "globalLayerTcpConnectionEstablished": "TCP-соединение с {host}:{port} установлено.", + "globalLayerTlsHandshakeCompleted": "TLS-рукопожатие успешно завершено.", + "globalLayerAuthenticatedAs": "Выполнена аутентификация как \"{username}\".", + "globalLayerAnonymousConnection": "Анонимное подключение принято брокером.", + "globalLayerSubscribedToTopics": "Выполнена подписка на {count} тем успешно.", + "globalLayerSubscribeCapabilityVerified": "Возможность подписки подтверждена (темы не включены).", + "globalLayerPublishTestPassed": "Тестовое сообщение опубликовано и получено в режиме обратной петли.", + "globalLayerFailedToLoadConfig": "Не удалось загрузить конфигурацию Глобального слоя", + "globalLayerRetry": "Повторить", + "globalLayerCopyDiagnosticsTooltip": "Копировать диагностику", + "globalLayerTopicExplorerTitle": "Обозреватель тем", + "globalLayerRunDiagnosticsMenuItem": "Запустить диагностику", + "globalLayerReconfigureMenuItem": "Перенастроить", + "globalLayerReset": "Сбросить", + "globalLayerRecentActivityHeader": "Последняя активность", + "globalLayerPausedSnackbar": "Глобальный слой приостановлен", + "globalLayerResumedSnackbar": "Глобальный слой возобновлён", + "globalLayerDiagnosticsCopiedSnackbar": "Диагностика скопирована в буфер обмена", + "globalLayerResetTitle": "Сбросить Глобальный слой", + "globalLayerResetMessage": "Это очистит всю конфигурацию брокера, учётные данные и историю подключений. Вам потребуется повторно запустить мастер настройки.", + "globalLayerQuickActionsHeader": "Быстрые действия", + "globalLayerDisconnectAction": "Отключиться", + "globalLayerConnectAction": "Подключиться", + "globalLayerPauseAction": "Приостановить", + "globalLayerResumeAction": "Возобновить", + "globalLayerDiagnoseAction": "Диагностировать", + "globalLayerTopicsAction": "Темы", + "globalLayerBrokerHeader": "Брокер", + "globalLayerHostLabel": "Хост", + "globalLayerPortLabel": "Порт", "globalLayerTlsLabel": "TLS", - "globalLayerTlsEnabled": "Enabled", - "globalLayerTlsDisabled": "Disabled", - "globalLayerUserLabel": "User", - "globalLayerLastConnectedLabel": "Last connected", - "globalLayerTopicsLabel": "Topics", - "globalLayerActiveTopicsCount": "{count} active", - "globalLayerJustNow": "Just now", - "globalLayerMinutesAgo": "{minutes}m ago", - "globalLayerHoursAgo": "{hours}h ago", - "globalLayerDaysAgo": "{days}d ago", - "globalLayerSecondsAgo": "{seconds}s ago", - "globalLayerDateFormat": "{day}/{month}/{year}", - "globalLayerShortDateFormat": "{month}/{day}", - "globalLayerHealthHeader": "Health", - "globalLayerHealthy": "Healthy", - "globalLayerUnhealthy": "Unhealthy", - "globalLayerPingLabel": "Ping", - "globalLayerReconnectsLabel": "Reconnects", - "globalLayerInboundLabel": "Inbound", - "globalLayerOutboundLabel": "Outbound", - "globalLayerThroughputLabel": "Throughput", - "globalLayerSessionLabel": "Session", - "globalLayerActiveErrors": "{count} active error(s)", - "globalLayerPrivacyHeader": "Privacy", - "globalLayerPrivacyAllOff": "All Off", - "globalLayerShareMessagesLabel": "Share Messages", - "globalLayerShareMessagesDescription": "Forward local messages to broker", - "globalLayerShareTelemetryLabel": "Share Telemetry", - "globalLayerShareTelemetryDescription": "Publish device health data", - "globalLayerAcceptInboundLabel": "Accept Inbound", - "globalLayerAcceptInboundDescription": "Receive messages from broker", - "globalLayerStatusOn": "ON", - "globalLayerStatusOff": "OFF", - "globalLayerAddFromTemplate": "Add from Template", - "globalLayerAddCustomTopic": "Add Custom Topic", - "globalLayerSubscriptionsHeader": "Subscriptions", - "globalLayerAddButton": "Add", - "globalLayerRemoveTopicTitle": "Remove Topic", - "globalLayerRemoveTopicMessage": "Remove \"{label}\" ({topic}) from your subscriptions? You can add it back later.", - "globalLayerRemoveConfirm": "Remove", - "globalLayerRemovedSnackbar": "Removed \"{label}\"", - "globalLayerUndo": "Undo", - "globalLayerFailedToLoadTopics": "Failed to load topics: {error}", - "globalLayerNoTopicSubscriptions": "No Topic Subscriptions", - "globalLayerEmptyTopicsDescription": "Add topics to control which types of mesh data flow through the Global Layer. Each topic corresponds to a category like chat, telemetry, or position.", - "globalLayerFromTemplateButton": "From Template", - "globalLayerCustomButton": "Custom", - "globalLayerTopicPaused": "Paused", - "globalLayerTopicListening": "Listening", - "globalLayerTopicOffline": "Offline", - "globalLayerStatsTopics": "Topics", - "globalLayerStatsActive": "Active", - "globalLayerStatsMessages": "Messages", - "globalLayerStatsRate": "Rate", - "globalLayerAddCustomTopicDescription": "Subscribe to a custom MQTT topic. Wildcards (+, #) are allowed for subscribe topics.", - "globalLayerLabelFieldLabel": "Label", - "globalLayerLabelFieldHint": "e.g. Weather Reports", - "globalLayerMqttTopicFieldLabel": "MQTT Topic", - "globalLayerMqttTopicFieldHint": "e.g. msh/weather/+", - "globalLayerAddSubscriptionButton": "Add Subscription", - "globalLayerAddFromTemplateDescription": "Choose a predefined topic template. Placeholders will be resolved using the values below.", - "globalLayerChannelFieldLabel": "Channel", + "globalLayerTlsEnabled": "Включён", + "globalLayerTlsDisabled": "Отключён", + "globalLayerUserLabel": "Пользователь", + "globalLayerLastConnectedLabel": "Последнее подключение", + "globalLayerTopicsLabel": "Темы", + "globalLayerActiveTopicsCount": "{count} активных", + "globalLayerJustNow": "Только что", + "globalLayerMinutesAgo": "{minutes}м назад", + "globalLayerHoursAgo": "{hours}ч назад", + "globalLayerDaysAgo": "{days}д назад", + "globalLayerSecondsAgo": "{seconds}с назад", + "globalLayerDateFormat": "{day}.{month}.{year}", + "globalLayerShortDateFormat": "{day}.{month}", + "globalLayerHealthHeader": "Состояние", + "globalLayerHealthy": "Исправен", + "globalLayerUnhealthy": "Неисправен", + "globalLayerPingLabel": "Пинг", + "globalLayerReconnectsLabel": "Переподключения", + "globalLayerInboundLabel": "Входящие", + "globalLayerOutboundLabel": "Исходящие", + "globalLayerThroughputLabel": "Пропускная способность", + "globalLayerSessionLabel": "Сессия", + "globalLayerActiveErrors": "{count} активных ошибок", + "globalLayerPrivacyHeader": "Конфиденциальность", + "globalLayerPrivacyAllOff": "Всё выключено", + "globalLayerShareMessagesLabel": "Поделиться сообщениями", + "globalLayerShareMessagesDescription": "Пересылать локальные сообщения на брокер", + "globalLayerShareTelemetryLabel": "Поделиться телеметрией", + "globalLayerShareTelemetryDescription": "Публиковать данные о состоянии устройства", + "globalLayerAcceptInboundLabel": "Принимать входящие", + "globalLayerAcceptInboundDescription": "Получать сообщения от брокера", + "globalLayerStatusOn": "ВКЛ", + "globalLayerStatusOff": "ВЫКЛ", + "globalLayerAddFromTemplate": "Добавить из шаблона", + "globalLayerAddCustomTopic": "Добавить пользовательскую тему", + "globalLayerSubscriptionsHeader": "Подписки", + "globalLayerAddButton": "Добавить", + "globalLayerRemoveTopicTitle": "Удалить тему", + "globalLayerRemoveTopicMessage": "Удалить \"{label}\" ({topic}) из ваших подписок? Вы сможете добавить её позже.", + "globalLayerRemoveConfirm": "Удалить", + "globalLayerRemovedSnackbar": "Удалено \"{label}\"", + "globalLayerUndo": "Отменить", + "globalLayerFailedToLoadTopics": "Не удалось загрузить темы: {error}", + "globalLayerNoTopicSubscriptions": "Нет подписок на темы", + "globalLayerEmptyTopicsDescription": "Добавьте темы, чтобы управлять тем, какие типы данных сети проходят через Глобальный слой.", + "globalLayerFromTemplateButton": "Из шаблона", + "globalLayerCustomButton": "Пользовательская", + "globalLayerTopicPaused": "Приостановлена", + "globalLayerTopicListening": "Прослушивается", + "globalLayerTopicOffline": "Не в сети", + "globalLayerStatsTopics": "Темы", + "globalLayerStatsActive": "Активные", + "globalLayerStatsMessages": "Сообщения", + "globalLayerStatsRate": "Скорость", + "globalLayerAddCustomTopicDescription": "Подписаться на пользовательскую тему MQTT. Для тем подписки разрешены символы подстановки (+, #).", + "globalLayerLabelFieldLabel": "Метка", + "globalLayerLabelFieldHint": "например, Отчёты о погоде", + "globalLayerMqttTopicFieldLabel": "Тема MQTT", + "globalLayerMqttTopicFieldHint": "например, msh/weather/+", + "globalLayerAddSubscriptionButton": "Добавить подписку", + "globalLayerAddFromTemplateDescription": "Выберите предопределённый шаблон темы. Заполнители будут заменены значениями, указанными ниже.", + "globalLayerChannelFieldLabel": "Канал", "globalLayerChannelFieldHint": "LongFast", - "globalLayerNodeIdFieldLabel": "Node ID", + "globalLayerNodeIdFieldLabel": "ID узла", "globalLayerNodeIdFieldHint": "!a1b2c3d4", - "globalLayerTemplateAdded": "Added", - "adminFollowRequestFrom": "FROM", - "adminFollowRequestTo": "TO", - "adminPostsFilteredCount": "Filtered ({count})", - "dashboardAddToFavorites": "Add to favorites", - "dashboardAddWidget": "Add Widget", - "dashboardAddWidgets": "Add Widgets", - "dashboardChUtilLabel": "Ch. Util", - "dashboardDone": "Done", - "dashboardEditTitle": "Edit Dashboard", - "dashboardHealthConnection": "Connection", - "dashboardHealthNodes": "Nodes", - "dashboardHealthOffline": "Offline", - "dashboardHealthOnline": "Online", - "dashboardHealthSignal": "Signal", - "dashboardHelp": "Help", - "dashboardLastHour": "Last Hour", + "globalLayerTemplateAdded": "Добавлено", + "adminFollowRequestFrom": "ОТ", + "adminFollowRequestTo": "КОМУ", + "adminPostsFilteredCount": "Отфильтровано ({count})", + "dashboardAddToFavorites": "Добавить в избранное", + "dashboardAddWidget": "Добавить виджет", + "dashboardAddWidgets": "Добавить виджеты", + "dashboardChUtilLabel": "Исп. кан.", + "dashboardDone": "Готово", + "dashboardEditTitle": "Редактировать панель", + "dashboardHealthConnection": "Соединение", + "dashboardHealthNodes": "Узлы", + "dashboardHealthOffline": "Не в сети", + "dashboardHealthOnline": "В сети", + "dashboardHealthSignal": "Сигнал", + "dashboardHelp": "Справка", + "dashboardLastHour": "Последний час", "dashboardLive": "LIVE", - "dashboardNoChannelsConfigured": "No channels configured", - "dashboardNoMessagesYet": "No messages yet", - "dashboardNoNearbyNodes": "No nearby nodes detected", - "dashboardNoSignalData": "No signal data available", - "dashboardNodesLabel": "Nodes", - "dashboardQuickMessage": "Quick\nMessage", - "dashboardRemoveConfirm": "Remove", - "dashboardRemoveFromFavorites": "Remove from favorites", - "dashboardRemoveWidget": "Remove widget", - "dashboardRemoveWidgetMessage": "Are you sure you want to remove \"{displayName}\" from your dashboard?", - "dashboardRemoveWidgetTitle": "Remove Widget?", + "dashboardNoChannelsConfigured": "Каналы не настроены", + "dashboardNoMessagesYet": "Сообщений пока нет", + "dashboardNoNearbyNodes": "Ближайшие узлы не обнаружены", + "dashboardNoSignalData": "Данные о сигнале недоступны", + "dashboardNodesLabel": "Узлы", + "dashboardQuickMessage": "Быстрое\nсообщение", + "dashboardRemoveConfirm": "Удалить", + "dashboardRemoveFromFavorites": "Удалить из избранного", + "dashboardRemoveWidget": "Удалить виджет", + "dashboardRemoveWidgetMessage": "Вы уверены, что хотите удалить «{displayName}» с панели?", + "dashboardRemoveWidgetTitle": "Удалить виджет?", "dashboardRssiLabel": "RSSI", - "dashboardSettings": "Settings", - "dashboardShareLocation": "Share\nLocation", - "dashboardSignalLabel": "SIGNAL", + "dashboardSettings": "Настройки", + "dashboardShareLocation": "Поделиться\nположением", + "dashboardSignalLabel": "СИГНАЛ", "dashboardSnrLabel": "SNR", - "dashboardStatusLabel": "Status", - "dashboardStatusOffline": "Offline", - "dashboardStatusOnline": "Online", - "dashboardTitle": "Dashboard", - "dashboardTraceroute": "Traceroute", - "dashboardWidgetActiveNodes": "Active Nodes", - "dashboardWidgetActiveNodesDesc": "Nodes heard in the last hour", - "dashboardWidgetAirtimeUsage": "Airtime Usage", - "dashboardWidgetAirtimeUsageDesc": "Radio transmission time and limits", - "dashboardWidgetChannelActivity": "Channel Activity", - "dashboardWidgetChannelActivityDesc": "Message activity per channel", - "dashboardWidgetGpsPosition": "GPS Position", - "dashboardWidgetGpsPositionDesc": "Current device location", - "dashboardWidgetMeshHealth": "Mesh Health", - "dashboardWidgetMeshHealthDesc": "Overall mesh network health score", - "dashboardWidgetMessages": "Messages", - "dashboardWidgetMessagesDesc": "Total messages sent and received", - "dashboardWidgetNetworkTopology": "Network Topology", - "dashboardWidgetNetworkTopologyDesc": "Visual mesh network graph", - "dashboardWidgetNodes": "Nodes", - "dashboardWidgetNodesDesc": "Total discovered nodes on the mesh", - "dashboardWidgetPacketStats": "Packet Statistics", - "dashboardWidgetPacketStatsDesc": "Sent, received, and dropped packet counts", - "dashboardWidgetQuickActions": "Quick Actions", - "dashboardWidgetQuickActionsDesc": "Fast access to common features", - "dashboardWidgetRangeTest": "Range Test", - "dashboardWidgetRangeTestDesc": "Test signal range with other nodes", - "dashboardWidgetRecentMessages": "Recent Messages", - "dashboardWidgetRecentMessagesDesc": "Latest messages from the mesh", - "dashboardWidgetSignalStrength": "Signal Strength", - "dashboardWidgetSignalStrengthDesc": "Live RSSI, SNR, and channel utilization chart", - "dashboardWidgetWeatherData": "Weather Data", - "dashboardWidgetWeatherDataDesc": "Environmental sensor readings", - "discoveryFilterAllSources": "All Sources", - "draggableTextHint": "Type something...", - "globalLayerAdvanced": "ADVANCED", - "globalLayerAuth": "Auth", - "globalLayerAuthentication": "AUTHENTICATION", - "globalLayerBack": "Back", - "globalLayerBrokerAddress": "Broker Address", - "globalLayerClientId": "Client ID", - "globalLayerClientIdHint": "Auto-generated if empty", - "globalLayerConnection": "CONNECTION", - "globalLayerContinue": "Continue", - "globalLayerCustomiseConnection": "Customise connection details", - "globalLayerDataTypes": "DATA TYPES", - "globalLayerEnable": "Enable Global Layer", - "globalLayerMqttNote": "Under the hood, this uses an MQTT broker — a standard internet messaging server. You do not need to know how MQTT works to use the Global Layer.", - "globalLayerNext": "Next", - "globalLayerOptional": "Optional", - "globalLayerPassword": "Password", - "globalLayerPort": "Port", - "globalLayerPreConfiguredAuth": "Pre-configured (public credentials)", - "globalLayerServer": "Server", - "globalLayerSetupTitle": "Global Layer Setup", - "globalLayerStepOf": "Step {current} of {total}", - "globalLayerTopicRoot": "TOPIC ROOT", - "globalLayerTopicRootDescription": "The root prefix for all topics. Change this to keep your mesh traffic separate from others on the same broker.", - "globalLayerTopicRootLabel": "Topic Root", - "globalLayerUsername": "Username", - "globalLayerWhatItDoes": "What it does", - "globalLayerWhatItDoesNot": "What it does NOT do", + "dashboardStatusLabel": "Статус", + "dashboardStatusOffline": "Не в сети", + "dashboardStatusOnline": "В сети", + "dashboardTitle": "Панель", + "dashboardTraceroute": "Трассировка", + "dashboardWidgetActiveNodes": "Активные узлы", + "dashboardWidgetActiveNodesDesc": "Узлы, активные за последний час", + "dashboardWidgetAirtimeUsage": "Использование эфирного времени", + "dashboardWidgetAirtimeUsageDesc": "Время радиопередачи и ограничения", + "dashboardWidgetChannelActivity": "Активность канала", + "dashboardWidgetChannelActivityDesc": "Активность сообщений по каналам", + "dashboardWidgetGpsPosition": "GPS-позиция", + "dashboardWidgetGpsPositionDesc": "Текущее местоположение устройства", + "dashboardWidgetMeshHealth": "Состояние сети", + "dashboardWidgetMeshHealthDesc": "Общий показатель здоровья радиосети", + "dashboardWidgetMessages": "Сообщения", + "dashboardWidgetMessagesDesc": "Всего отправлено и получено сообщений", + "dashboardWidgetNetworkTopology": "Топология сети", + "dashboardWidgetNetworkTopologyDesc": "Визуальный граф радиосети", + "dashboardWidgetNodes": "Узлы", + "dashboardWidgetNodesDesc": "Всего обнаруженных узлов в сети", + "dashboardWidgetPacketStats": "Статистика пакетов", + "dashboardWidgetPacketStatsDesc": "Количество отправленных, полученных и отброшенных пакетов", + "dashboardWidgetQuickActions": "Быстрые действия", + "dashboardWidgetQuickActionsDesc": "Быстрый доступ к основным функциям", + "dashboardWidgetRangeTest": "Тест дальности", + "dashboardWidgetRangeTestDesc": "Тест дальности сигнала с другими узлами", + "dashboardWidgetRecentMessages": "Последние сообщения", + "dashboardWidgetRecentMessagesDesc": "Свежие сообщения из сети", + "dashboardWidgetSignalStrength": "Мощность сигнала", + "dashboardWidgetSignalStrengthDesc": "График RSSI, SNR и загруженности канала в реальном времени", + "dashboardWidgetWeatherData": "Погодные данные", + "dashboardWidgetWeatherDataDesc": "Показания датчиков окружающей среды", + "discoveryFilterAllSources": "Все источники", + "draggableTextHint": "Введите текст...", + "globalLayerAdvanced": "ДОПОЛНИТЕЛЬНО", + "globalLayerAuth": "Аутентификация", + "globalLayerAuthentication": "АУТЕНТИФИКАЦИЯ", + "globalLayerBack": "Назад", + "globalLayerBrokerAddress": "Адрес брокера", + "globalLayerClientId": "ID клиента", + "globalLayerClientIdHint": "Генерируется автоматически, если не указан", + "globalLayerConnection": "ПОДКЛЮЧЕНИЕ", + "globalLayerContinue": "Продолжить", + "globalLayerCustomiseConnection": "Настроить параметры подключения", + "globalLayerDataTypes": "ТИПЫ ДАННЫХ", + "globalLayerEnable": "Включить Глобальный слой", + "globalLayerMqttNote": "Под капотом используется брокер MQTT. Вам не нужно знать, как работает MQTT, чтобы использовать Глобальный слой.", + "globalLayerNext": "Далее", + "globalLayerOptional": "Необязательно", + "globalLayerPassword": "Пароль", + "globalLayerPort": "Порт", + "globalLayerPreConfiguredAuth": "Предварительно настроено (публичные учётные данные)", + "globalLayerServer": "Сервер", + "globalLayerSetupTitle": "Настройка Глобального слоя", + "globalLayerStepOf": "Шаг {current} из {total}", + "globalLayerTopicRoot": "КОРЕНЬ ТЕМЫ", + "globalLayerTopicRootDescription": "Корневой префикс для всех тем. Измените его, чтобы отделить трафик вашей сети.", + "globalLayerTopicRootLabel": "Корень темы", + "globalLayerUsername": "Имя пользователя", + "globalLayerWhatItDoes": "Что это делает", + "globalLayerWhatItDoesNot": "Чего это НЕ делает", "helpCenterProgressLabel": "{completed} / {total}", - "mapControlsCenterOnMe": "Center on me", - "mapControlsFitAll": "Fit all", - "mapControlsResetNorth": "Reset north", - "mapNodeDrawerClosePanel": "Close panel", - "nodeSelectorSearchHint": "Search nodes...", - "portalViewBroker": "Broker", - "portalViewLocalMesh": "Local Mesh", - "portalViewRemote": "Remote", - "positionConfigAltitudeHint": "e.g., 100", - "positionConfigLatitudeHint": "e.g., 37.7749", - "positionConfigLongitudeHint": "e.g., -122.4194", + "mapControlsCenterOnMe": "Центрировать на мне", + "mapControlsFitAll": "Вписать всё", + "mapControlsResetNorth": "Сброс севера", + "mapNodeDrawerClosePanel": "Закрыть панель", + "nodeSelectorSearchHint": "Поиск узлов...", + "portalViewBroker": "Брокер", + "portalViewLocalMesh": "Локальная сеть", + "portalViewRemote": "Удалённый", + "positionConfigAltitudeHint": "например, 100", + "positionConfigLatitudeHint": "например, 37.7749", + "positionConfigLongitudeHint": "например, -122.4194", "privacySettingsFirebaseTitle": "Firebase (Google)", "privacySettingsRevenueCatTitle": "RevenueCat", "privacySettingsSigilTitle": "Sigil API (Socialmesh)", - "profileDeleteConfirmLabel": "Delete", - "scannerFilteringByUuid": "Filtering by Meshtastic UUID", - "scannerScanningAllDevices": "Scanning all devices (dev mode)", - "scannerShowAllBleDevices": "Show all BLE devices", - "settingsGlyphMatrixTestSubtitle": "Nothing Phone 3 LED patterns", - "signalQualityExcellent": "Excellent", - "signalQualityFair": "Fair", - "signalQualityGood": "Good", - "signalQualityPoor": "Poor", - "signalQualityVeryGood": "Very Good", - "signalQualityWeak": "Weak", - "themeSettingsError": "Error: {error}", - "widgetWizardAdd": "Add", - "dashboardRequestPositions": "Request\nPositions", - "adminPostsDeleteAllCount": "Delete all ({count})", - "globalLayerAllowInboundChat": "Allow inbound global chat", - "globalLayerDiagBrokerEmpty": "Broker address is empty.", - "globalLayerDiagUnexpectedError": "Unexpected error: {error}", - "globalLayerDiagUsernameNoPassword": "Username provided but password is empty.", - "globalLayerShareMessages": "Share messages to Global Layer", - "globalLayerShareTelemetry": "Share telemetry", - "aetherInFlight": "In Flight", - "aetherLiveFlightData": "Live Flight Data", - "aetherOnGround": "On Ground", - "globalLayerNodesSeenVia": "{count} nodes seen via Global Layer", - "helpChannelCreationTitle": "Creating a Channel", - "helpChannelCreationDescription": "Learn how to create and configure mesh channels", - "helpEncryptionLevelsTitle": "Channel Encryption", - "helpEncryptionLevelsDescription": "Understanding privacy and encryption options", - "helpMessageRoutingTitle": "How Messages Travel", - "helpMessageRoutingDescription": "Understanding mesh routing and message hops", - "helpNodesOverviewTitle": "Your Mesh Network", - "helpNodesOverviewDescription": "Understanding the nodes in your mesh", - "helpNodeRolesTitle": "Node Roles", - "helpNodeRolesDescription": "CLIENT vs ROUTER vs REPEATER explained", - "helpRegionSelectionTitle": "Selecting Your Region", - "helpRegionSelectionDescription": "Frequency bands and legal compliance", - "helpDeviceConnectionTitle": "Connecting Your Device", - "helpDeviceConnectionDescription": "BLE vs USB and pairing process", - "helpGpsSettingsTitle": "GPS & Position Sharing", - "helpGpsSettingsDescription": "Location updates and privacy", - "helpSignalMetricsTitle": "Understanding Signal Strength", - "helpSignalMetricsDescription": "SNR, RSSI, and what they mean", - "helpMapOverviewTitle": "Mesh Map", - "helpMapOverviewDescription": "See your mesh network on a map", - "helpChannelsOverviewTitle": "Your Channels", - "helpChannelsOverviewDescription": "Managing mesh communication channels", - "helpAutomationsOverviewTitle": "Automations", - "helpAutomationsOverviewDescription": "Automatic actions for your mesh", - "helpDashboardOverviewTitle": "Your Dashboard", - "helpDashboardOverviewDescription": "Your customizable mesh command center", - "helpWidgetBuilderOverviewTitle": "Widget Builder", - "helpWidgetBuilderOverviewDescription": "Create your own custom widgets", - "helpMarketplaceOverviewTitle": "Widget Marketplace", - "helpMarketplaceOverviewDescription": "Discover widgets made by the community", - "helpSignalsOverviewTitle": "Signals", - "helpSignalsOverviewDescription": "Broadcast ephemeral signals to your mesh", - "helpSignalCreationTitle": "Creating a Signal", - "helpSignalCreationDescription": "How to compose and broadcast a signal", - "helpSignalDetailTitle": "Signal Details", - "helpSignalDetailDescription": "Interacting with a signal and its responses", - "helpWorldMeshOverviewTitle": "World Mesh", - "helpWorldMeshOverviewDescription": "Global mesh network visualization", - "helpRoutesOverviewTitle": "Routes", - "helpRoutesOverviewDescription": "Record and share GPS routes", - "helpPositionOverviewTitle": "Position History", - "helpPositionOverviewDescription": "GPS position logs for all nodes on your mesh", - "helpSettingsOverviewTitle": "Settings", - "helpSettingsOverviewDescription": "Configure your app and device", - "helpProfileOverviewTitle": "Your Profile", - "helpProfileOverviewDescription": "Manage your mesh identity", + "profileDeleteConfirmLabel": "Удалить", + "scannerFilteringByUuid": "Фильтрация по UUID Meshtastic", + "scannerScanningAllDevices": "Сканирование всех устройств (режим разработчика)", + "scannerShowAllBleDevices": "Показать все BLE устройства", + "settingsGlyphMatrixTestSubtitle": "LED-паттерны для Nothing Phone 3", + "signalQualityExcellent": "Отличный", + "signalQualityFair": "Удовлетворительный", + "signalQualityGood": "Хороший", + "signalQualityPoor": "Слабый", + "signalQualityVeryGood": "Очень хороший", + "signalQualityWeak": "Очень слабый", + "themeSettingsError": "Ошибка: {error}", + "widgetWizardAdd": "Добавить", + "dashboardRequestPositions": "Запросить\nположения", + "adminPostsDeleteAllCount": "Удалить все ({count})", + "globalLayerAllowInboundChat": "Разрешить входящий глобальный чат", + "globalLayerDiagBrokerEmpty": "Адрес брокера пуст.", + "globalLayerDiagUnexpectedError": "Неожиданная ошибка: {error}", + "globalLayerDiagUsernameNoPassword": "Указано имя пользователя, но пароль пуст.", + "globalLayerShareMessages": "Делиться сообщениями через Глобальный слой", + "globalLayerShareTelemetry": "Делиться телеметрией", + "aetherInFlight": "В полёте", + "aetherLiveFlightData": "Данные рейса в реальном времени", + "aetherOnGround": "На земле", + "globalLayerNodesSeenVia": "{count} узлов обнаружено через Глобальный слой", + "helpChannelCreationTitle": "Создание канала", + "helpChannelCreationDescription": "Узнайте, как создавать и настраивать mesh-каналы", + "helpEncryptionLevelsTitle": "Шифрование канала", + "helpEncryptionLevelsDescription": "Понимание параметров конфиденциальности и шифрования", + "helpMessageRoutingTitle": "Как передаются сообщения", + "helpMessageRoutingDescription": "Понимание маршрутизации в mesh-сети и ретрансляции сообщений", + "helpNodesOverviewTitle": "Ваша mesh-сеть", + "helpNodesOverviewDescription": "Знакомство с узлами вашей mesh-сети", + "helpNodeRolesTitle": "Роли узлов", + "helpNodeRolesDescription": "Объяснение ролей CLIENT, ROUTER и REPEATER", + "helpRegionSelectionTitle": "Выбор региона", + "helpRegionSelectionDescription": "Частотные диапазоны и соответствие законодательству", + "helpDeviceConnectionTitle": "Подключение устройства", + "helpDeviceConnectionDescription": "BLE против USB и процесс сопряжения", + "helpGpsSettingsTitle": "GPS и передача местоположения", + "helpGpsSettingsDescription": "Обновления местоположения и конфиденциальность", + "helpSignalMetricsTitle": "Понимание уровня сигнала", + "helpSignalMetricsDescription": "SNR, RSSI и что они означают", + "helpMapOverviewTitle": "Карта mesh-сети", + "helpMapOverviewDescription": "Просматривайте mesh-сеть на карте", + "helpChannelsOverviewTitle": "Ваши каналы", + "helpChannelsOverviewDescription": "Управление каналами mesh-связи", + "helpAutomationsOverviewTitle": "Автоматизации", + "helpAutomationsOverviewDescription": "Автоматические действия для вашей mesh-сети", + "helpDashboardOverviewTitle": "Ваша панель управления", + "helpDashboardOverviewDescription": "Настраиваемый центр управления mesh-сетью", + "helpWidgetBuilderOverviewTitle": "Конструктор виджетов", + "helpWidgetBuilderOverviewDescription": "Создавайте собственные виджеты", + "helpMarketplaceOverviewTitle": "Маркетплейс виджетов", + "helpMarketplaceOverviewDescription": "Открывайте виджеты, созданные сообществом", + "helpSignalsOverviewTitle": "Сигналы", + "helpSignalsOverviewDescription": "Рассылайте кратковременные сигналы в вашу mesh-сеть", + "helpSignalCreationTitle": "Создание сигнала", + "helpSignalCreationDescription": "Как составить и разослать сигнал", + "helpSignalDetailTitle": "Детали сигнала", + "helpSignalDetailDescription": "Взаимодействие с сигналом и его ответами", + "helpWorldMeshOverviewTitle": "Мировая сеть", + "helpWorldMeshOverviewDescription": "Визуализация глобальной mesh-сети", + "helpRoutesOverviewTitle": "Маршруты", + "helpRoutesOverviewDescription": "Записывайте и делитесь GPS-маршрутами", + "helpPositionOverviewTitle": "История позиций", + "helpPositionOverviewDescription": "Журналы GPS-позиций всех узлов вашей mesh-сети", + "helpSettingsOverviewTitle": "Настройки", + "helpSettingsOverviewDescription": "Настройка приложения и устройства", + "helpProfileOverviewTitle": "Ваш профиль", + "helpProfileOverviewDescription": "Управление вашей идентичностью в mesh-сети", "helpMesh3dOverviewTitle": "Mesh 3D", - "helpMesh3dOverviewDescription": "3D network topology visualization", - "helpGlobeOverviewTitle": "Globe View", - "helpGlobeOverviewDescription": "3D globe with your mesh", - "helpTimelineOverviewTitle": "Timeline", - "helpTimelineOverviewDescription": "Your mesh activity history", - "helpDeviceShopOverviewTitle": "Device Shop", - "helpDeviceShopOverviewDescription": "Browse Meshtastic hardware", - "helpOfflineMapsOverviewTitle": "Offline Maps", - "helpOfflineMapsOverviewDescription": "Map display settings and controls", - "helpRadioConfigOverviewTitle": "Radio Settings", - "helpRadioConfigOverviewDescription": "Configure your LoRa radio", - "helpPresenceOverviewTitle": "Node Presence", - "helpPresenceOverviewDescription": "Track which nodes are active on your mesh", - "helpReachabilityOverviewTitle": "Mesh Reachability", - "helpReachabilityOverviewDescription": "Understand which nodes you can reach", - "helpMeshHealthOverviewTitle": "Mesh Health", - "helpMeshHealthOverviewDescription": "Monitor your mesh network health", - "helpTracerouteOverviewTitle": "Traceroute", - "helpTracerouteOverviewDescription": "Discover the route packets take across your mesh", - "helpNodedexOverviewTitle": "NodeDex Field Journal", - "helpNodedexOverviewDescription": "Your personal record of every node discovered on the mesh", - "helpNodedexAlbumTitle": "Collector Album", - "helpNodedexAlbumDescription": "A collectible card view of your discovered nodes", - "helpNodedexConstellationTitle": "Constellation View", - "helpNodedexConstellationDescription": "A star-map visualization of co-seen node relationships", - "helpNodedexDetailTitle": "Node Profile", - "helpNodedexDetailDescription": "Understanding a node's full identity and history", - "helpCloudSyncOverviewTitle": "Cloud Sync", - "helpCloudSyncOverviewDescription": "Premium cross-device sync for your mesh data", + "helpMesh3dOverviewDescription": "3D-визуализация топологии сети", + "helpGlobeOverviewTitle": "Вид глобуса", + "helpGlobeOverviewDescription": "3D-глобус с вашей mesh-сетью", + "helpTimelineOverviewTitle": "Хронология", + "helpTimelineOverviewDescription": "История активности в вашей mesh-сети", + "helpDeviceShopOverviewTitle": "Магазин устройств", + "helpDeviceShopOverviewDescription": "Обзор оборудования Meshtastic", + "helpOfflineMapsOverviewTitle": "Офлайн-карты", + "helpOfflineMapsOverviewDescription": "Параметры отображения и управления картой", + "helpRadioConfigOverviewTitle": "Настройки радио", + "helpRadioConfigOverviewDescription": "Настройка вашего LoRa радио", + "helpPresenceOverviewTitle": "Присутствие узла", + "helpPresenceOverviewDescription": "Отслеживайте, какие узлы активны в вашей mesh-сети", + "helpReachabilityOverviewTitle": "Достижимость mesh-сети", + "helpReachabilityOverviewDescription": "Определение доступных для вас узлов", + "helpMeshHealthOverviewTitle": "Здоровье mesh-сети", + "helpMeshHealthOverviewDescription": "Мониторинг состояния вашей mesh-сети", + "helpTracerouteOverviewTitle": "Трассировка маршрута", + "helpTracerouteOverviewDescription": "Определение пути прохождения пакетов через вашу mesh-сеть", + "helpNodedexOverviewTitle": "Полевой журнал NodeDex", + "helpNodedexOverviewDescription": "Ваша личная запись обо всех узлах, обнаруженных в mesh-сети", + "helpNodedexAlbumTitle": "Альбом коллекционера", + "helpNodedexAlbumDescription": "Представление обнаруженных узлов в виде коллекционных карточек", + "helpNodedexConstellationTitle": "Вид созвездия", + "helpNodedexConstellationDescription": "Визуализация связей совместно обнаруженных узлов в виде звёздной карты", + "helpNodedexDetailTitle": "Профиль узла", + "helpNodedexDetailDescription": "Полная история и идентификация узла", + "helpCloudSyncOverviewTitle": "Облачная синхронизация", + "helpCloudSyncOverviewDescription": "Премиум-синхронизация данных mesh-сети между устройствами", "helpAetherOverviewTitle": "Aether", - "helpAetherOverviewDescription": "Track Meshtastic nodes at altitude", - "helpTakGatewayOverviewTitle": "TAK Gateway", - "helpTakGatewayOverviewDescription": "Bridge your mesh into the TAK ecosystem", - "helpRadioComplianceTitle": "Radio Rules & Your Responsibilities", - "helpRadioComplianceDescription": "Understand your legal obligations when using radio devices", - "helpAcceptableUseTitle": "Acceptable Use & Prohibited Activities", - "helpAcceptableUseDescription": "What you can and cannot do with Socialmesh", - "helpUserResponsibilityTitle": "Your Data, Your Responsibility", - "helpUserResponsibilityDescription": "How Socialmesh handles data and what you are responsible for", - "helpFileTransferOverviewTitle": "File Transfers", - "helpFileTransferOverviewDescription": "Send files over the mesh radio without internet", - "helpFileTransferLimitsTitle": "Why Only 8 KB?", - "helpFileTransferLimitsDescription": "Airtime budget and LoRa duty cycle explained", - "helpChannelIntroBubble": "Let's make a **channel**! It's like a walkie-talkie. Only your friends who know the secret can listen in.", - "helpChannelNameBubble": "First, pick a **name** for your channel. Something easy to remember, like 'Family' or 'Hiking Buddies'.", - "helpPrivacyLevelBubble": "How secret should your channel be?\\n\\n**OPEN**: Anyone can listen in.\\n**SHARED**: Like a password everyone knows.\\n**PRIVATE**: Only friends you invite.\\n**MAXIMUM**: Super duper secret!", - "helpEncryptionKeyBubble": "I made a **secret key** for you! It scrambles your messages so only your friends can read them. Like a secret code!", - "helpChannelCompleteBubble": "All done! Show your friends the **QR code** and they can join your channel. Easy peasy!", - "helpEncryptionIntroBubble": "Let me explain **encryption levels**. It's like choosing how secret your messages are!", - "helpDefaultKeyBubble": "**DEFAULT KEY** means everyone in the mesh can read your messages. It's public! Use this for general announcements or testing.", - "helpPskEncryptionBubble": "**PSK** (Pre-Shared Key) means you generate a random secret key. Only people with this exact key can decode your messages. Much more private!", - "helpPskSharingBubble": "Share your PSK via **QR code**! When someone scans it, they get the key and channel settings. Easy peasy!", - "helpRoutingIntroBubble": "Want to see how I work? When you send a message, I **bounce it from node to node** like a game of hot potato!", - "helpRoutingHopsBubble": "Each **hop** is when a node receives your message and forwards it. Most messages need **1-3 hops** to reach their destination!", - "helpRoutingRouterRoleBubble": "**ROUTER** nodes are the mesh superheroes - they relay messages for everyone! **CLIENT** nodes only send/receive their own messages.", - "helpRoutingStoreForwardBubble": "**Store & Forward** is awesome! If the recipient hasn't been heard recently, I'll hold onto the message and deliver it when a packet arrives.", - "helpNodesIntroBubble": "This is your **mesh network**! Every device you see here is a node that can talk to you.", - "helpNodesStatusBubble": "**Green dot** means **Active** (heard very recently). **Yellow** means **Seen recently**. **Gray** means **Inactive**. LoRa has no offline signal—status is inferred.", - "helpNodesInfoBubble": "Each card shows the node's **name**, **battery level**, and **signal strength**. Tap any node to see more details!", - "helpNodesFiltersBubble": "Use the **filters** at the top to find specific nodes. You can show only **Active** nodes, favorites, or nodes with GPS.", - "helpNodesActionsBubble": "Tap a node to **send a message**, see their **location on the map**, or check their **telemetry data**!", - "helpRolesIntroBubble": "**Node roles** determine how your device helps the mesh. Let me break it down for you!", - "helpRoleClientBubble": "**CLIENT**: Your device sends and receives messages but doesn't relay for others. Great for **battery life**!", - "helpRoleRouterBubble": "**ROUTER**: You're a mesh superhero! You relay messages for everyone. Uses more battery but makes the mesh stronger!", - "helpRoleRouterLateBubble": "**ROUTER LATE**: Rebroadcasts after other routers. Extends coverage without taking priority hops. Great for backup relays!", - "helpRoleClientBaseBubble": "**CLIENT BASE**: Base station for your favorited nodes. Routes their packets like a router, handles everything else like a client!", - "helpRegionIntroBubble": "This is important! Your **region** determines which radio frequencies you can legally use.", - "helpRegionLegalBubble": "Each country has different rules. Using the **wrong frequency** can be illegal! Always match your physical location.", - "helpRegionBandsBubble": "Most regions use **915MHz** (Americas) or **868MHz** (Europe). Some use **433MHz**. Your device's hardware must support the frequency!", - "helpRegionWarningBubble": "Wrong region = **can't communicate** with others! Make sure everyone in your mesh uses the same region setting.", - "helpConnectionIntroBubble": "Let's connect your Meshtastic device! There are two ways: **Bluetooth** or **USB**.", - "helpConnectionBleBubble": "**BLUETOOTH** (BLE): Wireless! Your device shows up as **Meshtastic_XXXX**. Just tap to connect. Works while device is in your pocket!", - "helpConnectionUsbBubble": "**USB**: Plug in with a cable. More reliable, charges your device, slightly faster. Great for configuration!", - "helpConnectionPairingBubble": "First time? Your device needs to be in **pairing mode**. Check for a Bluetooth icon on the screen or press the button!", - "helpConnectionTroubleshootBubble": "Can't find your device? Check:\\n- **Bluetooth is on**\\n- Device has power\\n- Device isn't connected elsewhere\\n- You're close enough (under 10m)", - "helpGpsIntroBubble": "**GPS** lets others see where you are on the map! Let me explain how it works.", - "helpGpsBroadcastBubble": "Your device broadcasts **position updates** every few minutes. Other nodes see you appear on their map!", - "helpGpsPrivacyBubble": "Privacy matters! You can **disable GPS** or set update intervals. Turn it off when you want to stay hidden!", - "helpGpsBatteryBubble": "GPS uses **battery**! Longer update intervals = better battery life. Balance privacy and utility!", - "helpMetricsIntroBubble": "Let's decode those signal numbers! They tell you how good your connection is.", - "helpMetricsRssiBubble": "**RSSI** (Received Signal Strength): How loud the signal is. Higher is better! **-50 dBm** = excellent, **-120 dBm** = barely hanging on.", - "helpMetricsSnrBubble": "**SNR** (Signal-to-Noise Ratio): How clear the signal is. Positive = good, negative = noisy! **+10 dB** = great, **-10 dB** = struggling.", - "helpMetricsPracticalBubble": "In practice: **Green** = excellent, **yellow** = okay, **red** = poor. Move closer or find higher ground to improve!", - "helpMapIntroBubble": "Welcome to the **Mesh Map**! Every dot you see is a node with GPS. They're all part of your network!", - "helpMapMarkersBubble": "**Tap any marker** to see who it is. You can send them a message, check their battery, or see when they were last heard!", - "helpMapFeaturesBubble": "Try the **heatmap** to see where nodes cluster, or **connection lines** to see who can talk to who!", - "helpMapMeasureBubble": "Use **measure mode** to check distances between points. Great for planning where to put a new node!", - "helpMapFiltersBubble": "Use **filters** to show only **Active** nodes, or nodes with GPS. Helps when your map gets crowded!", - "helpChannelsIntroBubble": "These are your **channels**! Think of them like different radio frequencies. Each one is a separate conversation.", - "helpChannelsPrimaryBubble": "The **Primary** channel is special. It's always slot 0 and can't be deleted. Most mesh traffic goes here!", - "helpChannelsSecondaryBubble": "**Secondary channels** are for private groups. Create one for your family, hiking club, or emergency team!", - "helpChannelsEncryptionBubble": "See the **lock icon**? That means the channel is encrypted. Only people with the key can read messages!", - "helpChannelsShareBubble": "Tap a channel to see its **QR code**. Friends can scan it to join instantly with the right settings!", - "helpAutomationsIntroBubble": "**Automations** make your mesh smarter! Set up rules and I'll do things automatically for you.", - "helpAutomationsTriggersBubble": "Every automation starts with a **trigger**. Like when a node becomes inactive, battery gets low, or you enter an area!", - "helpAutomationsActionsBubble": "Then pick an **action**! Send a message, play a sound, show a notification, or even trigger IFTTT!", - "helpAutomationsExamplesBubble": "Example: **Alert me when Dad's battery drops below 20%**. Or **Send 'I'm home!' when I enter my geofence**!", - "helpAutomationsToggleBubble": "Use the **toggle switch** to enable or disable automations. Test them out before going live!", - "helpDashboardIntroBubble": "Welcome to your **Dashboard**! This is your personalized command center. Everything you need, at a glance!", - "helpDashboardWidgetsBubble": "Each card is a **widget**. They show live data from your mesh - battery levels, messages, weather, and more!", - "helpDashboardReorderBubble": "**Long-press and drag** to rearrange widgets. Put your favorites at the top! Tap **Edit** to add or remove them.", - "helpDashboardTapBubble": "**Tap any widget** to see more details or take action. Try tapping a node widget to see all their info!", - "helpBuilderIntroBubble": "Welcome to the **Widget Builder**! Here you can create your own custom widgets from scratch!", - "helpBuilderTemplatesBubble": "Start with a **template** or build from blank. Templates give you gauges, charts, and status cards ready to customize!", - "helpBuilderBindingsBubble": "The magic is in **data bindings**! Connect any element to live mesh data - battery, GPS, temperature, signal strength!", - "helpBuilderPreviewBubble": "Use **Preview** to see how your widget looks with real data before saving. Tweak until it's perfect!", - "helpMarketplaceIntroBubble": "Welcome to the **Marketplace**! Browse widgets created by other mesh enthusiasts around the world!", - "helpMarketplaceBrowseBubble": "Browse by **category** - find status displays, charts, gauges, or creative designs. Tap any widget to preview it!", - "helpMarketplaceInstallBubble": "Found one you like? **Tap install** and it's added to your collection. Use it on your dashboard right away!", - "helpMarketplaceShareBubble": "Made something cool? **Share your widgets** to the marketplace and help the community!", - "helpSignalsIntroBubble": "Welcome to **Signals**! Broadcast moments to your mesh. Signals are **ephemeral** - you choose how long they last, from **15 minutes** up to **24 hours**.", - "helpSignalsCreateBubble": "Tap the **sensor icon** to go active! Add text, a photo, or your location. Choose your TTL - shorter times work great for quick check-ins.", - "helpSignalsProximityBubble": "Signals show **proximity badges** - how many hops away the sender is. **Nearby** signals (0-1 hops) appear first!", - "helpSignalsFiltersBubble": "Use **filters** to focus on what matters: nearby signals, mesh-only, or content with media. Toggle between **list** and **grid** views!", - "helpSignalsPrivacyBubble": "Signals are **mesh-first** - they travel through the radio network. When they fade, they're gone. True ephemeral, off-grid content!", - "helpCreateIntroBubble": "Time to **Go Active**! A signal is an ephemeral broadcast — it lives on the mesh for a set time, then fades away. Let me walk you through it.", - "helpCreateTextBubble": "Type your message in the main field — up to **280 characters**. The circular counter in the corner shows how many you have left.", - "helpCreateImageBubble": "Tap the **image icon** to attach a photo. Images are uploaded via cloud when you are online — they are not available in mesh-only mode.", - "helpCreateLocationBubble": "Tap the **location pin** to attach your device's GPS position. Your location is fuzzed to a configurable radius for privacy. Tap again to remove it.", - "helpCreateTtlBubble": "The **timer icon** sets your TTL — how long the signal stays alive. Choose from **15 minutes** up to **24 hours**. Shorter times work great for quick check-ins.", - "helpCreateIntentBubble": "Pick a **Presence Intent** to tell the mesh what you are up to — exploring, monitoring, helping, or just listening. It adds context without extra words.", - "helpCreateStatusBubble": "The **short status** field is a one-liner that appears as a subtitle on your signal card. Think of it as a mood or caption.", - "helpCreateSubmitBubble": "When you are ready, hit **Broadcast**! Your signal travels through the mesh radio first. If cloud is available, it syncs there too for wider reach.", - "helpDetailIntroBubble": "This is the **signal detail** screen. You can read the full content, see where it was posted, and browse all responses.", - "helpDetailTtlBubble": "The **TTL bar** shows how much time the signal has left. When it reaches zero the signal expires and this screen closes automatically.", - "helpDetailResponsesBubble": "Responses are **threaded**. You can reply directly to the signal or to another person's response. Nested replies indent so you can follow the conversation.", - "helpDetailVotingBubble": "Tap the **up or down arrow** on any response to vote. Votes surface the most useful replies. You can change your vote at any time.", - "helpDetailReplyBubble": "Use the **reply bar** at the bottom to respond. Tap the reply icon on any response to start a threaded conversation with that person.", - "helpDetailActionsBubble": "The **overflow menu** (three dots) lets you **delete** your own signal or **report** someone else's. Only one of those options appears depending on whether you authored the signal.", - "helpWorldIntroBubble": "Welcome to **World Mesh**! See the entire global Meshtastic network. Every dot is a node sharing its location!", - "helpWorldScopeBubble": "Zoom out to see the **worldwide mesh**, or zoom in to explore local clusters. It's amazing how many nodes exist!", - "helpWorldDataBubble": "Data comes from **MQTT** - nodes that opted to share their position publicly. Your local nodes appear too!", - "helpWorldFiltersBubble": "Use **filters** to show specific regions or time ranges. Find active meshes near places you're visiting!", - "helpRoutesIntroBubble": "**Routes** lets you record your journeys! Perfect for hikes, bike rides, or any adventure off the grid.", - "helpRoutesRecordBubble": "Tap **Record** to start tracking. I'll save your GPS points as you move. Works even without cell signal!", - "helpRoutesGpxBubble": "**Import GPX files** to follow existing trails. Export your routes to share with others or use in other apps!", - "helpRoutesShareBubble": "Share routes with your mesh buddies! Great for coordinating meet-up points or showing others your favorite trails.", - "helpPositionIntroBubble": "**Position History** records every GPS position broadcast by nodes on your mesh. Think of it as a flight recorder for location data!", - "helpPositionListMapBubble": "Switch between **list view** and **map view** using the overflow menu. The map draws colour-coded trails per node so you can visualise movement over time.", - "helpPositionFiltersBubble": "Use **filter chips** to narrow results: today, this week, good GPS fix, or just your own node. Combine with a **custom date range** for precise slicing.", - "helpPositionSearchBubble": "The **search bar** filters by node name. Handy when you have dozens of nodes and want to track a specific one.", - "helpPositionMapNodesBubble": "In map view, tap the **node list** button to pick a single node. Each node gets its own colour trail with distance calculations between points.", - "helpPositionExportBubble": "**Export as CSV** from the overflow menu for analysis in spreadsheets or GIS tools. Great for documenting coverage tests!", - "helpPositionGoodFixBubble": "The **Good Fix** filter shows only positions with 6+ satellites. This helps you ignore noisy indoor fixes and focus on reliable outdoor data.", - "helpSettingsIntroBubble": "Welcome to **Settings**! Here you can customize everything about your app and connected device.", - "helpSettingsDeviceBubble": "**Device settings** let you configure your Meshtastic radio - name, region, power levels, and modules!", - "helpSettingsAppBubble": "**App settings** control themes, notifications, privacy options, and how the app behaves.", - "helpSettingsCloudBubble": "**Cloud Sync** is a premium subscription that syncs your **NodeDex**, **automations**, **widgets**, and **profile** across all your devices. It also serves as your **backup** — if you ever delete the app or switch phones, Cloud Sync restores everything. Without it, all data lives only on this device and is lost if the app is removed.", - "helpProfileIntroBubble": "This is **your profile**! Customize your mesh identity with a display name, callsign, and avatar.", - "helpProfileCustomizeBubble": "Your profile is **optional and private by default**. Customize it to stand out on the mesh!", - "helpProfileShareBubble": "Add a **callsign**, **avatar**, and **links** to make your profile yours.", - "helpProfileCloudBubble": "**Cloud Sync** is a premium feature that backs up your profile, NodeDex, automations, and widgets to the cloud. It protects your data — if you delete the app or get a new phone, everything **restores automatically** when you sign back in. Without it, your data exists only on this device.", - "helpMesh3dIntroBubble": "Welcome to **Mesh 3D**! See your entire network in three dimensions. Drag to rotate, pinch to zoom!", - "helpMesh3dNodesBubble": "Each sphere is a **node**. Lines show connections based on signal strength. Closer = stronger signal!", - "helpMesh3dColorsBubble": "Colors show **node health**. Green = active, yellow = fading, gray = inactive. Status is inferred from last heard.", - "helpMesh3dTapBubble": "**Tap any node** to select it and see details. Great for understanding your network topology!", - "helpGlobeIntroBubble": "Spin the **Globe** to see your mesh from space! Every glowing point is a node with GPS coordinates.", - "helpGlobeInteractBubble": "**Drag to spin**, pinch to zoom. Tap a node to fly to its location and see details!", - "helpGlobeArcsBubble": "Watch the **connection arcs** - they show message paths traveling across your mesh in real-time!", - "helpTimelineIntroBubble": "The **Timeline** shows everything happening on your mesh. Messages, node changes, telemetry - all in order!", - "helpTimelineFilterBubble": "Use **filters** to focus on specific event types. Just messages? Only node joins? You control the view!", - "helpTimelineTapBubble": "**Tap any event** to see full details. Great for debugging or understanding what's happening on your network!", - "helpShopIntroBubble": "Welcome to the **Device Shop**! Browse Meshtastic-compatible radios and accessories.", - "helpShopCompareBubble": "**Compare devices** by range, battery, and features. I've rated each one to help you choose!", - "helpShopLinksBubble": "Tap **Buy** to visit trusted vendors. Prices and availability shown are from real stores!", - "helpOfflineIntroBubble": "**Offline Maps** let you use the map without internet! Essential for adventures off the grid.", - "helpOfflineDownloadBubble": "**Select a region** and zoom level, then tap download. I'll save all the map tiles to your device!", - "helpOfflineManageBubble": "Manage your downloads here - see storage used and **delete** old regions you don't need anymore.", - "helpRadioIntroBubble": "**Radio settings** control how your device transmits. Region, power, and modem preset are key!", - "helpRadioRegionBubble": "Your **region** determines legal frequencies. Set this wrong and you could interfere with other services!", - "helpRadioModemBubble": "**Modem preset** balances range vs speed. Long-range = slower but further. Short-fast = quick but closer.", - "helpRadioPowerBubble": "Higher **TX power** means more range but uses more battery. Find the sweet spot for your needs!", - "helpPresenceIntroBubble": "**Presence** shows which nodes are active, recently seen, or inactive on your mesh network.", - "helpPresenceActiveBubble": "**Active** nodes (green) sent a message in the last 2 minutes. They're definitely online!", - "helpPresenceRecentBubble": "**Recently seen** nodes (yellow) were active 2-10 minutes ago. Probably still around.", - "helpPresenceInactiveBubble": "**Inactive** nodes (gray) haven't been heard from in over 10 minutes. They might be out of range or powered off.", - "helpPresenceChartBubble": "The **activity chart** shows recent node activity over time. Watch the mesh come alive!", - "helpReachabilityIntroBubble": "**Reachability** estimates how likely you are to reach each node. This is based on passively observed mesh data.", - "helpReachabilityBetaBubble": "This is **BETA** - we don't send test packets! Everything is estimated from messages we see flowing through the mesh.", - "helpReachabilityHighBubble": "**High** reachability (bright) means we've seen lots of communication with that node. Messages will probably get through!", - "helpReachabilityMediumBubble": "**Medium** reachability (dimmer) means some communication but not consistent. Messages might make it.", - "helpReachabilityLowBubble": "**Low** reachability (very dim) means we rarely see communication. The node might be too far or behind obstacles.", - "helpHealthIntroBubble": "**Mesh Health** monitors your network for issues like congestion, packet loss, and problematic nodes.", - "helpHealthStatusBubble": "The **status indicator** shows overall mesh health. Green = healthy, yellow = issues detected, red = critical problems.", - "helpHealthMetricsBubble": "**Metrics** show packet counts, retransmissions, and hop counts. Watch for high retransmit rates!", - "helpHealthUtilizationBubble": "The **utilization chart** shows how busy your mesh is over time. Spikes might indicate problems.", - "helpHealthIssuesBubble": "**Issues** section highlights specific problems and suggests fixes. Check here if things seem slow!", - "helpHealthMonitoringBubble": "Use the **pause** button to stop monitoring if you want to save battery. Hit **reset** to clear the data and start fresh!", - "helpTracerouteIntroBubble": "**Traceroute** discovers the actual path your packets take to reach another node. It reveals which relays are forwarding your data.", - "helpTracerouteHowBubble": "When you send a traceroute, each relay along the route adds itself to the packet. The destination sends it back so you can see **both directions**.", - "helpTracerouteSendBubble": "Send a traceroute from a **node's detail sheet** (tap the route icon) or from **Dashboard Quick Actions** where you can pick any known node.", - "helpTracerouteCooldownBubble": "There is a **30-second cooldown** between traceroutes to respect airtime fairness. A visible countdown shows the remaining time.", - "helpTracerouteResultsBubble": "Results show **forward** and **return** hop paths with per-hop **SNR** (signal-to-noise ratio). This lets you correlate route quality with link performance.", - "helpTracerouteHistoryBubble": "All traceroutes are saved to **Traceroute History** (Settings > Telemetry Logs). Filter by response status, search by node name, and compare runs over time.", - "helpTracerouteExportBubble": "Export your traceroute history as **CSV** for trend analysis or documentation. Use the overflow menu on the history screen.", - "helpTracerouteTipsBubble": "**Pro tip:** Run traceroutes after repositioning nodes, changing antennas, or adjusting channels to validate your changes with real route data!", - "helpNodedexIntroBubble": "Welcome to the **NodeDex** — your personal mesh field journal! Every node you discover is recorded here with a unique **Sigil** and personality **Trait**.", - "helpNodedexSigilsBubble": "Each node gets a **procedural Sigil** — a geometric glyph generated from its identity. No two nodes share the same sigil. Think of it as a visual fingerprint for the mesh!", - "helpNodedexTraitsBubble": "Nodes earn **Traits** based on real behavior — **Wanderer** moves between regions, **Beacon** is always online, **Ghost** is rarely seen, **Sentinel** holds a fixed position, **Relay** forwards traffic.", - "helpNodedexFiltersBubble": "Use the **filter chips** to show only specific traits, recently discovered nodes, or nodes you have tagged. The **search bar** finds nodes by name or hex ID.", - "helpNodedexFieldJournalBubble": "As you observe more nodes, your **field journal** fills in — each node earns a **Patina score** and **identity overlay** based on real encounters. The more you observe, the richer the detail!", - "helpNodedexAlbumModeBubble": "Tap the **view toggle** in the app bar to switch to **Album mode** — a collector-style card grid grouped by trait, rarity, or region. Each card shows the node's sigil with a holographic shimmer based on rarity!", - "helpNodedexAtmosphereBubble": "Notice the subtle **ambient particles** behind the screen? That is the **Elemental Atmosphere** — rain, embers, mist, and starlight driven by your real mesh data. More nodes and activity means more atmosphere!", - "helpNodedexCloudSyncBubble": "Your NodeDex is stored locally in SQLite and survives app restarts — but **not** app deletion. If you uninstall the app or switch phones, your local NodeDex is gone. With a **Cloud Sync** subscription, your entire journal — sigils, encounters, social tags, notes, and co-seen links — backs up to the cloud and **restores automatically** on any device you sign into.", - "helpNodedexExportBubble": "Use the **menu** to **export** your NodeDex as a JSON file for backup, or **import** one from another device. Your field journal travels with you — even without Cloud Sync!", - "helpNodedexSigilBubble": "This is the node's **Sigil** — a unique procedural glyph generated from its identity. No two nodes share the same sigil. It's like a visual fingerprint!", - "helpNodedexTraitBubble": "The **Trait** is an inferred personality based on how this node behaves — movement patterns, signal consistency, encounter frequency. Confidence grows with more data.", - "helpNodedexAutoSummaryBubble": "**Auto-Summary** computes insights from encounter history — time-of-day distribution, observation streaks, and busiest-day patterns. Everything updates automatically as new encounters arrive.", - "helpNodedexObservationTimelineBubble": "The **Observation Timeline** visualizes this node's encounter density over time, with relative labels showing how recently each observation was recorded.", - "helpNodedexDiscoveryBubble": "**Discovery Stats** show when you first and last saw this node, how many encounters you've had, and the closest range recorded. These update automatically.", - "helpNodedexSignalBubble": "**Signal Records** track the best and most recent SNR and RSSI values. These help you understand link quality — higher SNR and less negative RSSI mean stronger signals.", - "helpNodedexSocialTagBubble": "The **Social Tag** is a label you assign to categorize this node — friend, relay, base station, or anything else. It's your personal metadata, never shared over the mesh.", - "helpNodedexNoteBubble": "**Your Note** is a free-text field for anything you want to remember about this node. Location hints, operator name, antenna type — whatever helps you.", - "helpNodedexRegionsBubble": "**Region History** records every regulatory region where this node has been observed. Useful for tracking mobile nodes across different areas.", - "helpNodedexEncountersBubble": "**Recent Encounters** is a timeline of when this node appeared on your mesh. Each entry shows the timestamp, signal quality, and range if GPS was available.", - "helpNodedexActivityTimelineBubble": "The **Activity Timeline** is a unified chronological feed of everything observed about this node — encounters, messages, presence changes, signals, and milestones.", - "helpNodedexCoseenBubble": "**Co-Seen Links** show nodes frequently observed in the same session as this one. Tap any link to see the full relationship — shared encounters, message counts, and connection strength.", - "helpNodedexDeviceBubble": "**Device Info** shows live telemetry — battery level, hardware model, firmware version, and uptime. This data comes from the node directly and updates in real time.", - "helpAlbumIntroBubble": "Welcome to the **Collector Album** — a card-collector view of your NodeDex! Every discovered node becomes a collectible card with its sigil, trait, and rarity tier.", - "helpAlbumCoverBubble": "The **Album Cover** is your dashboard — it shows your **Explorer Title**, total nodes, encounters, regions explored, and a rarity breakdown bar. Watch your collection grow!", - "helpAlbumGroupingBubble": "Use the **group chips** to organize cards by **Trait** (Beacon, Relay, Ghost...), **Rarity** (Common through Legendary), or **Region** (geographic area). Each group gets its own album page.", - "helpAlbumRarityBubble": "Cards earn **rarity tiers** based on encounter count and trait. **Common** nodes are newly seen, while **Legendary** cards combine rare traits with deep observation history. Rarity drives the border glow and holographic shimmer!", - "helpAlbumInteractionsBubble": "**Tap** a card to open the node's full profile. **Long-press** to open the **Card Gallery** — a full-screen carousel where you can swipe through cards and tap to flip them over for stats!", - "helpAlbumGalleryBubble": "In the **Card Gallery**, swipe left and right to browse cards. **Tap** a card to flip it — the back shows discovery stats, signal records, encounter count, and patina score. Swipe down to dismiss.", - "helpAlbumHolographicBubble": "Higher-rarity cards shimmer with a **holographic effect** — the rarer the card, the brighter the glow. This effect respects your **reduce-motion** setting and uses an optimized painter for grid thumbnails.", - "helpAlbumPersistenceBubble": "Your album view preference and grouping choice are **saved automatically**. With **Cloud Sync**, your entire collection — sigils, encounters, tags, notes — backs up and syncs across all your devices. Delete the app, get a new phone — your collection is safe and restores on sign-in.", - "helpConstellationIntroBubble": "Welcome to the **Constellation** — a star-map of your mesh network! Nodes appear as stars, and lines between them show **co-seen relationships** — nodes observed in the same session.", - "helpConstellationLayoutBubble": "The layout is **force-directed** — nodes that are frequently co-seen cluster together, while isolated nodes drift to the edges. The graph stabilizes after a moment so nothing shifts while you explore.", - "helpConstellationInteractionsBubble": "**Tap** a node to highlight its connections. **Double-tap** to zoom into a cluster. **Long-press** to open the node's full profile. **Pinch** to zoom in and out of the star map.", - "helpConstellationEdgesBubble": "Use the **edge density** button in the app bar to control how many connections are shown. **Sparse** shows only the strongest links, **All** shows everything. The right density depends on your network size.", - "helpConstellationSearchBubble": "The **search** icon lets you find a specific node by name or hex ID. The view automatically zooms and pans to center the matching node with a pulse highlight.", - "helpConstellationAtmosphereBubble": "The constellation has its own **Elemental Atmosphere** — subtle starlight and mist particles behind the graph, driven by your real mesh data. It never obstructs the visualization.", - "helpConstellationDataBubble": "Co-seen data is built **automatically** from your encounters. The more sessions you observe, the richer the constellation becomes. All relationship data is stored locally — but is **lost if you delete the app**. With **Cloud Sync**, your entire constellation backs up and restores on any device you sign into.", - "helpCloudSyncIntroBubble": "**Cloud Sync** is a premium subscription that keeps your mesh data synchronized across all your devices — and serves as your **backup**. Without it, all data lives only on-device and is permanently lost if you delete the app or lose your phone.", - "helpCloudSyncWhatSyncsBubble": "Cloud Sync backs up your **NodeDex** (sigils, encounters, social tags, notes, co-seen links), **automations**, **custom widgets**, and **profile**. Reinstall the app, switch phones, or sign in on a second device — your entire mesh identity restores automatically.", - "helpCloudSyncOfflineFirstBubble": "The app is **offline-first**. Changes are saved locally to SQLite immediately and queued in an **outbox**. When you are online, the outbox drains to the cloud automatically — no manual sync needed.", - "helpCloudSyncConflictBubble": "If you edit the same node on two devices, Cloud Sync uses **last-write-wins** conflict resolution with per-field timestamps. Social tags and notes resolve independently so you never lose both edits.", - "helpCloudSyncSubscriptionBubble": "Cloud Sync is available as a **monthly** or **yearly** subscription. You can subscribe from **Settings > Account & Subscription**. Cancelled subscriptions keep working until the billing period ends.", - "helpCloudSyncWithoutBubble": "Without Cloud Sync, all your data stays on-device only. It survives app restarts, but **not** app deletion or a phone reset. You can **export** your NodeDex as JSON for manual backup. Cloud Sync automates this and adds cross-device restore — but the app works fully offline without it.", - "helpAetherIntroBubble": "**Aether** lets you track Meshtastic nodes at altitude! At 35,000 ft, LoRa signals can reach **400+ km** — far beyond typical ground-level range.", - "helpAetherScheduleBubble": "**Schedule a flight** before you fly. Enter your flight number, airports, departure time, and your node's ID. Other mesh enthusiasts can then track your journey and try to receive your signal.", - "helpAetherActiveBubble": "**Active flights** show live position data from the OpenSky Network API. You'll see altitude, speed, heading, and estimated coverage radius based on radio horizon calculations.", - "helpAetherReportsBubble": "**Reception reports** let ground stations report when they receive your signal. Reports include distance, RSSI, and SNR. All reports are saved to the **global leaderboard**.", - "helpAetherLeaderboardBubble": "The **leaderboard is global and persistent** — stored in the cloud, not on your device. Rankings survive app reinstalls and are visible to the entire Socialmesh community. Top 3 get gold, silver, and bronze!", - "helpAetherTipsBubble": "**Tips**: Window seats help. Turn off airplane mode briefly during cruise altitude (where permitted). Ground stations with elevated antennas have better odds. Good luck!", - "helpTakIntroBubble": "**TAK Gateway** bridges your mesh into the Team Awareness Kit (TAK) ecosystem. It streams live **Cursor-on-Target** entities from a TAK server straight onto your map.", - "helpTakConnectBubble": "Tap the **link icon** in the app bar to connect or disconnect. The status card shows your gateway URL, connection uptime, and total events received.", - "helpTakAffiliationsBubble": "Every entity is colored by **standard affiliation** — blue for friendly, red for hostile, green for neutral, yellow for unknown. The icon changes by dimension too: ground, air, sea, or space.", - "helpTakFilterBubble": "Use the **filter chips** to narrow the list by affiliation, or type a callsign in the **search bar**. The stale-mode chip cycles between all, active-only, and stale-only.", - "helpTakDetailBubble": "Tap any entity to open its **detail screen** — full CoT fields, coordinates, speed, course, and raw XML. Use the map icon to jump straight to its position on the map.", - "helpTakTrackingBubble": "**Long-press** an entity tile to toggle tracking. Tracked entities are highlighted on the map and stay visible even when the TAK screen is closed.", - "helpTakSettingsBubble": "Open **TAK Settings** from the overflow menu to change the gateway URL, toggle auto-connect, and adjust the stale timeout. All settings persist between sessions.", - "helpRadioResponsibilityBubble": "**You** are responsible for making sure your radio equipment is legal in your country and that you operate within permitted frequency bands and power limits.", - "helpRadioLicenceBubble": "Some regions require an **amateur radio licence** before you can transmit. Check with your local regulatory authority — for example, ACMA in Australia or FCC in the US.", - "helpRadioInterferenceBubble": "Never interfere with **emergency communications** or licensed services. Violations can result in fines or criminal penalties.", - "helpRadioTermsLinkBubble": "For full details, check the **Radio and Legal Compliance** section in our Terms of Service. You can find it in Settings under Terms of Service.", - "helpUseIntroBubble": "Socialmesh is a powerful tool — automations, signals, and mesh messaging give you a lot of capability. With that comes responsibility!", - "helpUseLawfulBubble": "Use the App only for **lawful purposes**. Do not transmit harmful, threatening, or abusive content over the mesh network.", - "helpUseAutomationsBubble": "Automations are great for alerts and notifications, but do not use them to **spam the mesh** or flood other users with unwanted messages.", - "helpUseImpersonationBubble": "Do not **impersonate** other people or entities on the mesh network. Be yourself!", - "helpUseTermsLinkBubble": "The full list of prohibited activities is in the **Use of the Service** section of our Terms. You can review it anytime in Settings.", - "helpResponsibilityIntroBubble": "Socialmesh is designed to be **privacy-first**. Your messages and data stay on your device — we do not store them on any server.", - "helpResponsibilitySignalsBubble": "When you create a **Signal**, it is broadcast over the mesh network. Anyone within range can receive it. Think of it like a public radio broadcast.", - "helpResponsibilityContentBubble": "You are responsible for **everything you transmit**. Do not share personal information, sensitive data, or content that could harm others.", - "helpResponsibilityThirdPartyBubble": "Some features use **third-party services** like RevenueCat for purchases and Firebase for crash reports. These have their own privacy policies.", - "helpResponsibilityTermsLinkBubble": "For complete details, review our **Terms of Service** and **Privacy Policy** in Settings. They explain exactly what data stays local and what is shared.", - "helpFtIntroBubble": "**File Transfers** let you send small files — text, configs, coordinates — directly over LoRa radio. No internet, no servers.", - "helpFtHowBubble": "Files are split into **~200-byte chunks** and sent one at a time over the mesh. The receiver reassembles them automatically.", - "helpFtNackBubble": "Missed a chunk? No problem. The receiver sends a **NACK** (negative acknowledgement) to request retransmission of exactly the missing pieces.", - "helpFtLimitBubble": "Files are capped at **8 KB**. LoRa is a slow, shared, low-power radio — a single transfer can occupy the channel for up to a minute at long-range settings.", - "helpFtBetaBubble": "This feature is **BETA**. Both nodes must be running Socialmesh on the same mesh channel. Standard Meshtastic nodes cannot receive these transfers.", - "helpFtContactsBubble": "Use the **Contacts** tab to choose a node, then tap **Send File**. The Contacts tab shows every node your device has seen on the mesh.", - "helpFtlSharedBubble": "LoRa channels are **shared and slow**. Every byte you send is airtime stolen from every other node in range. Treat it like a walkie-talkie frequency, not Wi-Fi.", - "helpFtlToaBubble": "**Time on Air** per chunk depends on Spreading Factor (SF). SF7 (fast, short range): ~30 ms/chunk. SF12 (slow, long range): ~1,500 ms/chunk.", - "helpFtlMathBubble": "8 KB ÷ 200 bytes/chunk = **41 chunks**. At SF7: ~1.2 seconds total. At SF12: **~62 seconds** of continuous radio transmission.", - "helpFtlDutyBubble": "EU868 and similar bands impose a **1% duty cycle** — your radio can only transmit for 36 seconds per hour. At SF12, one 8 KB transfer nearly exhausts that entire budget.", - "helpFtlCapBubble": "8 KB is the **safest ceiling** that keeps transfers survivable at worst-case spreading factors without violating duty cycle regulations or blocking the mesh for minutes.", - "helpFtlUsbBubble": "BLE and USB-connected transfers carry no radio duty-cycle risk. In a future release, higher limits will be unlocked for direct wired connections.", - "helpNodeDexSectionSigil": "A unique procedural glyph generated from this node's identity. ", - "helpNodeDexSectionTrait": "An inferred personality archetype derived from behavioral signals: ", - "helpNodeDexSectionAutoSummary": "Computed insights from this node's encounter history. The time-of-day ", - "helpNodeDexSectionObservationTimeline": "A visual timeline of this node's observation history. The bar shows ", - "helpNodeDexSectionDiscovery": "Tracks when this node was first and last seen on your mesh, the total ", - "helpNodeDexSectionSignal": "Best and most recent SNR (Signal-to-Noise Ratio) and RSSI ", - "helpNodeDexSectionSocialTag": "A personal label you assign to categorize this node. Social tags are ", - "helpNodeDexSectionNote": "A free-text note for anything you want to remember about this node. ", - "helpNodeDexSectionRegions": "Every regulatory region where this node has been observed. Region ", - "helpNodeDexSectionEncounters": "A chronological timeline of when this node appeared on your mesh. ", - "helpNodeDexSectionActivityTimeline": "A unified chronological feed of everything observed about this node: ", - "helpNodeDexSectionCoseen": "Nodes that are frequently observed in the same session as this node. ", - "helpNodeDexSectionDevice": "Live telemetry from the node: battery percentage, hardware model, ", - "helpNodeDexSectionAlbumRarity": "Rarity tiers are computed from encounter count and inferred trait. ", - "helpNodeDexSectionAlbumGrouping": "Cards can be grouped by Trait (behavioral archetype), Rarity ", - "helpNodeDexSectionAlbumExplorerTitle": "Your Explorer Title reflects your overall collection progress. ", - "helpNodeDexSectionAlbumHolographic": "The holographic shimmer on cards is a visual indicator of rarity. ", - "helpNodeDexSectionAlbumPatina": "Patina is a composite score reflecting how deeply you have observed ", - "helpNodeDexSectionAlbumCloudSync": "With a Cloud Sync subscription, your entire NodeDex album backs up ", - "helpTakSectionStatus": "The status card shows whether the WebSocket connection to the TAK ", - "helpTakSectionAffiliation": "Affiliation describes the relationship of an entity to ", - "helpTakSectionCotType": "The CoT type string encodes an entity's affiliation, dimension, ", - "helpTakSectionIdentity": "The UID uniquely identifies this entity across all CoT messages. ", - "helpTakSectionPosition": "Latitude and longitude in WGS-84 decimal degrees as reported in ", - "helpTakSectionMotion": "Speed, course, and altitude parsed from the CoT event's track and ", - "helpTakSectionTimestamps": "Event Time is when the CoT event was generated. Stale Time is when ", - "helpTakSectionTracking": "Tracked entities are pinned and highlighted on the map with a ", - "helpTakSectionRawPayload": "The raw JSON payload as received from the TAK Gateway WebSocket. ", - "helpTakSectionFilters": "Filter chips let you narrow the entity list by affiliation. The ", - "helpTakSectionSettings": "TAK Settings let you configure the gateway URL, toggle auto-connect ", - "accessRestrictedTitle": "Access Restricted", - "goBack": "Go Back", - "deviceNotConnected": "Device Not Connected", - "connectDevice": "Connect Device", - "connectDeviceToUseFeature": "Connect device to use this feature", - "positionRequestedFrom": "Position requested from {name}", - "failedGeneric": "Failed: {error}", - "failedToUpdateSignalLocationRadius": "Failed to update signal location radius: {error}", - "failedToSaveConfiguration": "Failed to save configuration: {error}", - "automationActionError": "Action {index}: {error}", - "failedToPlay": "Failed to play: {error}", - "whatsNewVersion190Subtitle": "Version 1.9.0", - "whatsNewReachabilityTitle": "Reachability", - "whatsNewReachabilityDescription": "Estimate how likely you are to reach each node on your mesh — without sending a single test packet.\\n\\nReachability passively observes traffic flowing through the network and assigns High, Medium, or Low confidence to every node. Find it in the drawer menu under Mesh.", - "whatsNewVersion1100Subtitle": "Version 1.10.0", - "whatsNewWorldMapTitle": "World Map", - "whatsNewWorldMapDescription": "See the entire global Meshtastic network on a single map. Every dot is a node sharing its location — zoom, pan, and tap to explore node details, hardware info, and last-seen times.\\n\\nNo connection required. The World Map pulls live data from the Socialmesh backend so you can explore the mesh anywhere.", - "whatsNewVersion1101Subtitle": "Version 1.10.1", - "whatsNewPresenceTitle": "Presence", - "whatsNewPresenceDescription": "See who is active on your mesh at a glance. Presence shows real-time node activity with intent indicators — whether someone is monitoring, mobile, or at a fixed base station.\\n\\nFilter by activity level, search by name, and tap any node to see their full profile. Find it in the drawer under Social.", - "whatsNewVersion1110Subtitle": "Version 1.11.0", - "whatsNewSignalsTitle": "Signals", - "whatsNewSignalsDescription": "Broadcast ephemeral moments to your mesh. Signals are short-lived posts — share text, a photo, or your location with a TTL from 15 minutes up to 24 hours.\\n\\nNearby signals appear first with proximity badges showing hop count. When they fade, they are gone. True off-grid, ephemeral content.", - "whatsNewVersion1130Subtitle": "Version 1.13.0", + "helpAetherOverviewDescription": "Отслеживание узлов Meshtastic на высоте", + "helpTakGatewayOverviewTitle": "TAK Шлюз", + "helpTakGatewayOverviewDescription": "Интеграция вашей mesh-сети в экосистему TAK", + "helpRadioComplianceTitle": "Правила использования радио и ваши обязанности", + "helpRadioComplianceDescription": "Понимание ваших правовых обязательств при использовании радиоустройств", + "helpAcceptableUseTitle": "Допустимое использование и запрещённые действия", + "helpAcceptableUseDescription": "Что можно и нельзя делать в Socialmesh", + "helpUserResponsibilityTitle": "Ваши данные — ваша ответственность", + "helpUserResponsibilityDescription": "Как Socialmesh обрабатывает данные и за что вы несёте ответственность", + "helpFileTransferOverviewTitle": "Передача файлов", + "helpFileTransferOverviewDescription": "Отправка файлов по радиоканалу mesh-сети без интернета", + "helpFileTransferLimitsTitle": "Почему только 8 КБ?", + "helpFileTransferLimitsDescription": "Объяснение бюджета эфирного времени и рабочего цикла LoRa", + "helpChannelIntroBubble": "Давайте создадим **канал**! Это как рация. Только ваши друзья, знающие секрет, смогут слушать.", + "helpChannelNameBubble": "Сначала выберите **название** для вашего канала. Что-то лёгкое для запоминания, например «Семья» или «Друзья-туристы».", + "helpPrivacyLevelBubble": "Насколько секретным должен быть ваш канал?\\n\\n**ОТКРЫТЫЙ**: Любой может слушать.\\n**ОБЩИЙ**: Как пароль, который знают все.\\n**ПРИВАТНЫЙ**: Только приглашённые вами друзья.\\n**МАКСИМАЛЬНЫЙ**: Сверхсекретный!", + "helpEncryptionKeyBubble": "Я создал для вас **секретный ключ**! Он зашифровывает ваши сообщения, чтобы их могли читать только ваши друзья. Как секретный код!", + "helpChannelCompleteBubble": "Всё готово! Покажите друзьям **QR-код**, и они смогут присоединиться к вашему каналу. Проще простого!", + "helpEncryptionIntroBubble": "Позвольте объяснить **уровни шифрования**. Это как выбор степени секретности ваших сообщений!", + "helpDefaultKeyBubble": "**КЛЮЧ ПО УМОЛЧАНИЮ** означает, что все участники mesh-сети могут читать ваши сообщения. Это публично! Используйте для общих объявлений или тестирования.", + "helpPskEncryptionBubble": "**PSK** (Pre-Shared Key) означает, что вы создаёте случайный секретный ключ. Только люди с этим точным ключом смогут расшифровать ваши сообщения. Намного приватнее!", + "helpPskSharingBubble": "Поделитесь своим PSK через **QR-код**! При сканировании собеседник получит ключ и настройки канала. Проще простого!", + "helpRoutingIntroBubble": "Хотите увидеть, как это работает? Когда вы отправляете сообщение, оно **передаётся от узла к узлу**, как горячая картошка!", + "helpRoutingHopsBubble": "Каждый **прыжок** — это когда узел получает ваше сообщение и пересылает его дальше. Большинству сообщений нужно **1–3 прыжка**, чтобы достичь получателя!", + "helpRoutingRouterRoleBubble": "Узлы **ROUTER** — супергерои mesh-сети: они ретранслируют сообщения для всех! Узлы **CLIENT** лишь отправляют и получают собственные сообщения.", + "helpRoutingStoreForwardBubble": "**Store & Forward** — отличная функция! Если от получателя давно не было сигнала, сообщение будет сохранено и доставлено при следующем появлении пакета.", + "helpNodesIntroBubble": "Это ваша **mesh-сеть**! Каждое устройство, которое вы видите здесь, — узел, способный общаться с вами.", + "helpNodesStatusBubble": "**Зелёная точка** означает **Активен** (слышен совсем недавно). **Жёлтая** — **Виден недавно**. **Серая** — **Неактивен**. LoRa не имеет сигнала об отключении — статус определяется косвенно.", + "helpNodesInfoBubble": "На каждой карточке отображается **имя** узла, **уровень заряда** и **уровень сигнала**. Нажмите на любой узел, чтобы узнать подробнее!", + "helpNodesFiltersBubble": "Используйте **фильтры** вверху для поиска конкретных узлов. Можно отображать только **Активные** узлы, избранные или узлы с GPS.", + "helpNodesActionsBubble": "Нажмите на узел, чтобы **отправить сообщение**, увидеть **местоположение на карте** или проверить **данные телеметрии**!", + "helpRolesIntroBubble": "**Роли узлов** определяют, как ваше устройство помогает mesh-сети. Давайте разберём каждую!", + "helpRoleClientBubble": "**CLIENT**: Ваше устройство отправляет и получает сообщения, но не ретранслирует их для других. Отличный выбор для **экономии батареи**!", + "helpRoleRouterBubble": "**ROUTER**: Вы супергерой mesh-сети! Вы ретранслируете сообщения для всех. Расходует больше батареи, но делает сеть сильнее!", + "helpRoleRouterLateBubble": "**ROUTER LATE**: Повторно транслирует после других роутеров. Расширяет покрытие, не занимая приоритетные прыжки. Отлично для резервных ретрансляторов!", + "helpRoleClientBaseBubble": "**CLIENT BASE**: Базовая станция для ваших избранных узлов. Маршрутизирует их пакеты как роутер, а всё остальное обрабатывает как клиент!", + "helpRegionIntroBubble": "Это важно! Ваш **регион** определяет, какие радиочастоты вы можете использовать по закону.", + "helpRegionLegalBubble": "В каждой стране свои правила. Использование **неверной частоты** может быть незаконным! Всегда выбирайте регион по своему фактическому местоположению.", + "helpRegionBandsBubble": "Большинство регионов используют **915 МГц** (Америка) или **868 МГц** (Европа). Некоторые — **433 МГц**. Оборудование вашего устройства должно поддерживать эту частоту!", + "helpRegionWarningBubble": "Неверный регион = **невозможность общаться** с другими! Убедитесь, что все участники вашей mesh-сети используют одинаковую настройку региона.", + "helpConnectionIntroBubble": "Давайте подключим ваше устройство Meshtastic! Есть два способа: **Bluetooth** или **USB**.", + "helpConnectionBleBubble": "**BLUETOOTH** (BLE): Беспроводное подключение! Ваше устройство отображается как **Meshtastic_XXXX**. Просто нажмите для подключения. Работает, пока устройство в кармане!", + "helpConnectionUsbBubble": "**USB**: Подключение кабелем. Надёжнее, заряжает устройство, немного быстрее. Отлично подходит для настройки!", + "helpConnectionPairingBubble": "Первый раз? Устройство должно находиться в **режиме сопряжения**. Найдите значок Bluetooth на экране или нажмите кнопку!", + "helpConnectionTroubleshootBubble": "Не можете найти устройство? Проверьте:\\n- **Bluetooth включён**\\n- Устройство заряжено\\n- Устройство не подключено к другому источнику\\n- Вы находитесь достаточно близко (до 10 м)", + "helpGpsIntroBubble": "**GPS** позволяет другим видеть вас на карте! Давайте объясним, как это работает.", + "helpGpsBroadcastBubble": "Ваше устройство отправляет **обновления позиции** каждые несколько минут. Другие узлы видят вас на своей карте!", + "helpGpsPrivacyBubble": "Конфиденциальность важна! Вы можете **отключить GPS** или задать интервалы обновлений. Отключите его, когда хотите оставаться невидимым!", + "helpGpsBatteryBubble": "GPS расходует **батарею**! Большие интервалы обновлений = лучший заряд батареи. Балансируйте между конфиденциальностью и удобством!", + "helpMetricsIntroBubble": "Давайте разберём цифры сигнала! Они показывают, насколько хорошо работает ваше соединение.", + "helpMetricsRssiBubble": "**RSSI** (мощность принятого сигнала): насколько громкий сигнал. Чем выше, тем лучше! **−50 дБм** = отлично, **−120 дБм** = еле держится.", + "helpMetricsSnrBubble": "**SNR** (отношение сигнал/шум): насколько чистый сигнал. Положительное = хорошо, отрицательное = шумно! **+10 дБ** = отлично, **−10 дБ** = плохо.", + "helpMetricsPracticalBubble": "На практике: **Зелёный** = отлично, **жёлтый** = нормально, **красный** = плохо. Подойдите ближе или найдите возвышенность для улучшения!", + "helpMapIntroBubble": "Добро пожаловать на **карту mesh-сети**! Каждая точка — это узел с GPS. Все они часть вашей сети!", + "helpMapMarkersBubble": "**Нажмите на любой маркер**, чтобы узнать, кто это. Вы можете отправить сообщение, проверить батарею или посмотреть, когда узел был виден последний раз!", + "helpMapFeaturesBubble": "Попробуйте **тепловую карту**, чтобы увидеть, где концентрируются узлы, или **линии связи**, чтобы увидеть, кто с кем общается!", + "helpMapMeasureBubble": "Используйте **режим измерения** для проверки расстояний между точками. Отлично подходит для планирования размещения нового узла!", + "helpMapFiltersBubble": "Используйте **фильтры**, чтобы показывать только **Активные** узлы или узлы с GPS. Помогает, когда на карте много объектов!", + "helpChannelsIntroBubble": "Это ваши **каналы**! Представьте их как разные радиочастоты. Каждый — отдельный разговор.", + "helpChannelsPrimaryBubble": "**Основной** канал особенный. Он всегда занимает слот 0 и не может быть удалён. Большая часть трафика mesh-сети идёт через него!", + "helpChannelsSecondaryBubble": "**Дополнительные каналы** предназначены для приватных групп. Создайте один для семьи, туристического клуба или аварийной команды!", + "helpChannelsEncryptionBubble": "Видите **значок замка**? Это означает, что канал зашифрован. Только люди с ключом могут читать сообщения!", + "helpChannelsShareBubble": "Нажмите на канал, чтобы увидеть его **QR-код**. Друзья могут отсканировать его для мгновенного подключения с правильными настройками!", + "helpAutomationsIntroBubble": "**Автоматизации** делают вашу mesh-сеть умнее! Настройте правила, и нужные действия будут выполняться автоматически.", + "helpAutomationsTriggersBubble": "Каждая автоматизация начинается с **триггера**. Например, когда узел становится неактивным, батарея разряжается или вы входите в зону!", + "helpAutomationsActionsBubble": "Затем выберите **действие**! Отправить сообщение, воспроизвести звук, показать уведомление или даже активировать IFTTT!", + "helpAutomationsExamplesBubble": "Пример: **Уведомить меня, когда заряд батареи папы упадёт ниже 20%**. Или **Отправить «Я дома!», когда я войду в геозону**!", + "helpAutomationsToggleBubble": "Используйте **переключатель**, чтобы включать или отключать автоматизации. Протестируйте их перед использованием!", + "helpDashboardIntroBubble": "Добро пожаловать на **Панель управления**! Это ваш персональный командный центр. Всё необходимое — с первого взгляда!", + "helpDashboardWidgetsBubble": "Каждая карточка — это **виджет**. Они отображают актуальные данные вашей сети — уровень заряда, сообщения, погоду и многое другое!", + "helpDashboardReorderBubble": "**Удерживайте и перетаскивайте** виджеты, чтобы переупорядочить их. Поместите избранные наверх! Нажмите **Изменить**, чтобы добавить или удалить их.", + "helpDashboardTapBubble": "**Нажмите на любой виджет**, чтобы увидеть подробности или выполнить действие. Попробуйте нажать на виджет узла, чтобы увидеть всю его информацию!", + "helpBuilderIntroBubble": "Добро пожаловать в **Конструктор виджетов**! Здесь вы можете создавать собственные виджеты с нуля!", + "helpBuilderTemplatesBubble": "Начните с **шаблона** или создайте с нуля. Шаблоны предоставляют готовые датчики, графики и карточки статуса для настройки!", + "helpBuilderBindingsBubble": "Вся магия — в **привязках данных**! Подключите любой элемент к актуальным данным сети — заряду, GPS, температуре, уровню сигнала!", + "helpBuilderPreviewBubble": "Используйте **Предпросмотр**, чтобы увидеть, как ваш виджет выглядит с реальными данными, прежде чем сохранить. Настраивайте до совершенства!", + "helpMarketplaceIntroBubble": "Добро пожаловать на **Маркетплейс**! Просматривайте виджеты, созданные другими энтузиастами mesh-сетей по всему миру!", + "helpMarketplaceBrowseBubble": "Просматривайте по **категориям** — находите дисплеи статуса, графики, датчики или оригинальные дизайны. Нажмите на любой виджет для предпросмотра!", + "helpMarketplaceInstallBubble": "Нашли то, что нравится? **Нажмите «Установить»** — и виджет добавится в вашу коллекцию. Используйте его на панели управления прямо сейчас!", + "helpMarketplaceShareBubble": "Создали что-то классное? **Поделитесь своими виджетами** на маркетплейсе и помогите сообществу!", + "helpSignalsIntroBubble": "Добро пожаловать в **Сигналы**! Транслируйте моменты в вашу mesh-сеть. Сигналы **эфемерны** — они существуют только ограниченное время!", + "helpSignalsCreateBubble": "Нажмите на **значок датчика**, чтобы стать активным! Добавьте текст, фото или своё местоположение. Выберите, как долго сигнал будет жить!", + "helpSignalsProximityBubble": "Сигналы показывают **метки близости** — сколько прыжков до отправителя. **Рядом** означает прямую видимость!", + "helpSignalsFiltersBubble": "Используйте **фильтры**, чтобы сосредоточиться на важном: ближайшие сигналы, только mesh или по типу контента.", + "helpSignalsPrivacyBubble": "Сигналы ориентированы **на mesh** — они передаются через радиосеть. Когда они попадают в интернет, это опционально и контролируется вами.", + "helpCreateIntroBubble": "Пора **стать активным**! Сигнал — это эфемерная трансляция, которая живёт в mesh-сети заданное время. Расскажите всем, что происходит!", + "helpCreateTextBubble": "Введите сообщение в главное поле — до **280 символов**. Круговой счётчик показывает оставшееся место.", + "helpCreateImageBubble": "Нажмите на **значок изображения**, чтобы прикрепить фото. Изображения загружаются через облако, когда есть интернет — по mesh передаётся только ссылка.", + "helpCreateLocationBubble": "Нажмите на **метку местоположения**, чтобы прикрепить текущую GPS-позицию устройства. Ваше местоположение видно всем, кто получит сигнал.", + "helpCreateTtlBubble": "**Значок таймера** задаёт TTL — как долго сигнал остаётся активным. Выбирайте от нескольких минут до нескольких часов.", + "helpCreateIntentBubble": "Выберите **Намерение присутствия**, чтобы сообщить сети, чем вы занимаетесь — исследуете, наблюдаете, нуждаетесь в помощи и т.д.", + "helpCreateStatusBubble": "Поле **краткого статуса** — это одна строка, которая отображается как подпись к вашему сигналу в ленте.", + "helpCreateSubmitBubble": "Когда будете готовы, нажмите **Транслировать**! Ваш сигнал распространится по mesh-сети через радио. Он доступен всем в пределах досягаемости!", + "helpDetailIntroBubble": "Это экран **подробностей сигнала**. Здесь можно прочитать полный текст, увидеть, откуда он пришёл, и ответить!", + "helpDetailTtlBubble": "**Шкала TTL** показывает, сколько времени сигнал ещё будет жить. Когда она обнулится — сигнал исчезнет из сети.", + "helpDetailResponsesBubble": "Ответы **вложены в цепочки**. Вы можете ответить напрямую на сигнал или на ответ другого пользователя.", + "helpDetailVotingBubble": "Нажмите на **стрелку вверх или вниз** у любого ответа, чтобы проголосовать. Голоса выводят наверх самые полезные ответы.", + "helpDetailReplyBubble": "Используйте **панель ответа** внизу для ответа. Нажмите на значок ответа у любого сообщения, чтобы ответить именно на него.", + "helpDetailActionsBubble": "**Меню действий** (три точки) позволяет **удалить** свой сигнал или **пожаловаться** на чужой. Используйте с умом!", + "helpWorldIntroBubble": "Добро пожаловать в **Мировую сеть**! Смотрите всю глобальную сеть Meshtastic. Каждая точка — это узел где-то в мире!", + "helpWorldScopeBubble": "Отдалитесь, чтобы увидеть **мировую сеть**, или приблизьтесь, чтобы исследовать локальные кластеры. Это поистине глобальное сообщество!", + "helpWorldDataBubble": "Данные поступают через **MQTT** — от узлов, которые решили публично делиться своим местоположением. Вы тоже можете участвовать!", + "helpWorldFiltersBubble": "Используйте **фильтры** для отображения конкретных регионов или временных промежутков. Находите активные mesh-сети рядом с вами!", + "helpRoutesIntroBubble": "**Маршруты** позволяют записывать ваши путешествия! Идеально для походов, велопрогулок или любых вылазок на природу!", + "helpRoutesRecordBubble": "Нажмите **Запись**, чтобы начать отслеживание. GPS-точки сохраняются по мере движения. Работает даже в офлайн-режиме!", + "helpRoutesGpxBubble": "**Импортируйте GPX-файлы**, чтобы следовать по готовым маршрутам. Экспортируйте свои маршруты и делитесь ими с другими!", + "helpRoutesShareBubble": "Делитесь маршрутами с участниками вашей сети! Отлично подходит для координации точек встречи или обмена любимыми тропами.", + "helpPositionIntroBubble": "**История позиций** записывает каждую GPS-позицию, переданную узлами вашей сети.", + "helpPositionListMapBubble": "Переключайтесь между **списком** и **картой** через меню. Карта показывает, где побывали все узлы с течением времени!", + "helpPositionFiltersBubble": "Используйте **чипы фильтров** для сужения результатов: сегодня, на этой неделе, хорошее GPS-соединение или только конкретный узел.", + "helpPositionSearchBubble": "**Строка поиска** фильтрует по имени узла. Удобно, когда в вашей сети десятки узлов!", + "helpPositionMapNodesBubble": "В режиме карты нажмите кнопку **список узлов**, чтобы выбрать конкретный узел. Каждый узел получает свой цвет для удобства!", + "helpPositionExportBubble": "**Экспортируйте в CSV** через меню для анализа в таблицах или GIS-инструментах. Отличный способ документировать покрытие!", + "helpPositionGoodFixBubble": "Фильтр **Хорошее соединение** показывает только позиции с 6+ спутниками. Это помогает отсеять неточные данные!", + "helpSettingsIntroBubble": "Добро пожаловать в **Настройки**! Здесь вы можете настроить всё — от внешнего вида приложения до параметров радио!", + "helpSettingsDeviceBubble": "**Настройки устройства** позволяют настроить ваше Meshtastic-радио — имя, регион, мощность и многое другое.", + "helpSettingsAppBubble": "**Настройки приложения** управляют темами, уведомлениями, параметрами конфиденциальности и поведением приложения.", + "helpSettingsCloudBubble": "**Облачная синхронизация** — это премиум-подписка, которая синхронизирует ваш **NodeDex**, **автоматизации** и **профиль** между устройствами.", + "helpProfileIntroBubble": "Это **ваш профиль**! Настройте свою идентичность в mesh-сети: отображаемое имя, позывной и аватар.", + "helpProfileCustomizeBubble": "Ваш профиль **необязателен и по умолчанию приватен**. Настройте его, чтобы выделиться в mesh-сообществе!", + "helpProfileShareBubble": "Добавьте **позывной**, **аватар** и **ссылки**, чтобы сделать профиль по-настоящему своим.", + "helpProfileCloudBubble": "**Облачная синхронизация** — это премиум-функция, которая создаёт резервные копии вашего профиля, NodeDex, автоматизаций и настроек на всех устройствах.", + "helpMesh3dIntroBubble": "Добро пожаловать в **Mesh 3D**! Смотрите всю сеть в трёх измерениях. Вращайте, масштабируйте и исследуйте топологию!", + "helpMesh3dNodesBubble": "Каждая сфера — это **узел**. Линии показывают соединения на основе мощности сигнала. Более толстые линии — более надёжное соединение!", + "helpMesh3dColorsBubble": "Цвета отражают **состояние узла**. Зелёный — активный, жёлтый — затухающий, серый — неактивный. Смотрите, как ваша сеть меняется со временем!", + "helpMesh3dTapBubble": "**Нажмите на любой узел**, чтобы выбрать его и увидеть подробности. Отлично помогает понять структуру сети!", + "helpGlobeIntroBubble": "Вращайте **Глобус**, чтобы смотреть на вашу сеть из космоса! Каждая светящаяся точка — это узел с известным местоположением!", + "helpGlobeInteractBubble": "**Перетаскивайте для вращения**, сводите/разводите пальцы для масштабирования. Нажмите на узел, чтобы подлететь к его местоположению и увидеть подробности!", + "helpGlobeArcsBubble": "Наблюдайте за **дугами соединений** — они показывают пути сообщений, проходящих по вашей сети!", + "helpTimelineIntroBubble": "**Лента событий** показывает всё, что происходит в вашей сети. Сообщения, изменения узлов, сигналы — всё в хронологическом порядке!", + "helpTimelineFilterBubble": "Используйте **фильтры** для просмотра конкретных типов событий. Только сообщения? Только входы узлов? Настраивайте под себя!", + "helpTimelineTapBubble": "**Нажмите на любое событие**, чтобы увидеть полные подробности. Отлично подходит для отладки или понимания происходящего в сети!", + "helpShopIntroBubble": "Добро пожаловать в **Магазин устройств**! Просматривайте радиоустройства и аксессуары, совместимые с Meshtastic!", + "helpShopCompareBubble": "**Сравнивайте устройства** по дальности, заряду батареи и функциям. Каждое оценено, чтобы помочь вам выбрать подходящее!", + "helpShopLinksBubble": "Нажмите **Купить**, чтобы перейти к проверенным продавцам. Показанные цены и наличие взяты из реальных магазинов.", + "helpOfflineIntroBubble": "**Офлайн-карты** позволяют пользоваться картой без интернета! Необходимы для вылазок туда, где нет связи!", + "helpOfflineDownloadBubble": "**Выберите регион** и уровень масштаба, затем нажмите «Скачать». Все тайлы карты сохранятся на вашем устройстве!", + "helpOfflineManageBubble": "Управляйте загрузками здесь — смотрите использованное место и **удаляйте** старые регионы, которые вам больше не нужны.", + "helpRadioIntroBubble": "**Настройки радио** управляют передачей вашего устройства. Регион, мощность и пресет модема влияют на дальность и расход батареи!", + "helpRadioRegionBubble": "**Регион** определяет разрешённые частоты. Неверная настройка может создать помехи другим пользователям и нарушить закон!", + "helpRadioModemBubble": "**Пресет модема** балансирует между дальностью и скоростью. Дальний диапазон = медленнее, но дальше. Короткий диапазон = быстрее, но ближе!", + "helpRadioPowerBubble": "Большая **мощность передатчика** означает большую дальность, но быстрее расходует батарею. Найдите оптимальный баланс для вашей ситуации!", + "helpPresenceIntroBubble": "**Присутствие** показывает, какие узлы активны, недавно видны или неактивны в вашей сети!", + "helpPresenceActiveBubble": "**Активные** узлы (зелёные) отправили сообщение за последние 2 минуты. Они точно доступны!", + "helpPresenceRecentBubble": "**Недавно видимые** узлы (жёлтые) были активны 2–10 минут назад. Скорее всего, ещё в зоне досягаемости!", + "helpPresenceInactiveBubble": "**Неактивные** узлы (серые) не выходили на связь более 10 минут. Возможно, они выключены, вышли из зоны или разрядились!", + "helpPresenceChartBubble": "**График активности** показывает недавнюю активность узлов по времени. Наблюдайте, как ваша сеть оживает в течение дня!", + "helpReachabilityIntroBubble": "**Достижимость** оценивает вероятность связи с каждым узлом на основе истории наблюдений сигнала!", + "helpReachabilityBetaBubble": "Это **БЕТА-версия** — тестовые пакеты не отправляются! Всё вычисляется на основе истории наблюдений сигнала.", + "helpReachabilityHighBubble": "**Высокая** достижимость (яркая) означает, что мы наблюдали много коммуникации с этим узлом. Скорее всего, он доступен!", + "helpReachabilityMediumBubble": "**Средняя** достижимость (менее яркая) означает частичную связь. Возможно, он в зоне досягаемости, но нестабильно!", + "helpReachabilityLowBubble": "**Низкая** достижимость (очень тусклая) означает редкую связь. Узел может быть на краю зоны или временно недоступен!", + "helpHealthIntroBubble": "**Состояние сети** отслеживает проблемы: перегрузка, потеря пакетов и нестабильные узлы могут влиять на вашу сеть!", + "helpHealthStatusBubble": "**Индикатор состояния** показывает общее состояние сети. Зелёный — всё хорошо, жёлтый — есть проблемы, красный — критично!", + "helpHealthMetricsBubble": "**Метрики** показывают количество пакетов, повторные передачи и количество прыжков. Следите за высокими значениями повторных передач!", + "helpHealthUtilizationBubble": "**График использования** показывает загрузку вашей сети по времени. Пики могут указывать на перегрузку или помехи!", + "helpHealthIssuesBubble": "Раздел **Проблемы** выделяет конкретные неполадки и предлагает решения. Проверьте здесь, если что-то идёт не так!", + "helpHealthMonitoringBubble": "Используйте кнопку **паузы**, чтобы остановить мониторинг и сэкономить батарею. Нажмите **возобновить**, когда будете готовы проверить снова!", + "helpTracerouteIntroBubble": "**Трассировка маршрута** определяет фактический путь, по которому ваши пакеты доходят до другого узла!", + "helpTracerouteHowBubble": "При отправке трассировки каждый ретранслятор на пути добавляет себя в пакет. Когда он возвращается, вы видите полный путь!", + "helpTracerouteSendBubble": "Отправьте трассировку с **карточки сведений об узле** (нажмите значок маршрута) или из **истории трассировок** в любое время.", + "helpTracerouteCooldownBubble": "Между трассировками есть **30-секундная пауза** для соблюдения норм использования эфирного времени. Пожалуйста, используйте их разумно!", + "helpTracerouteResultsBubble": "Результаты показывают пути прыжков **туда** и **обратно** с **SNR** (отношение сигнал/шум) для каждого прыжка.", + "helpTracerouteHistoryBubble": "Все трассировки сохраняются в **Историю трассировок** (Настройки > Журналы телеметрии). Удобно для отслеживания изменений сети!", + "helpTracerouteExportBubble": "Экспортируйте историю трассировок в **CSV** для анализа тенденций или документирования. Используйте меню на экране истории!", + "helpTracerouteTipsBubble": "**Совет профессионала:** Запускайте трассировки после перемещения узлов, замены антенн или добавления новых ретрансляторов, чтобы проверить улучшения!", + "helpNodedexIntroBubble": "Добро пожаловать в **NodeDex** — ваш личный полевой журнал mesh-сети! Каждый узел, который вы обнаружите, добавляется в вашу коллекцию!", + "helpNodedexSigilsBubble": "Каждый узел получает уникальный **процедурный Символ** — геометрический глиф, сгенерированный из его идентификатора. Никаких двух одинаковых!", + "helpNodedexTraitsBubble": "Узлы получают **Черты** на основе реального поведения — **Странник** перемещается между регионами, **Маяк** всегда доступен, **Призрак** мелькает редко!", + "helpNodedexFiltersBubble": "Используйте **чипы фильтров**, чтобы показывать только узлы с определёнными чертами, недавно обнаруженные узлы или конкретные типы устройств.", + "helpNodedexFieldJournalBubble": "По мере наблюдения за узлами ваш **полевой журнал** пополняется — каждый узел получает рейтинг, автосводку и хронологию!", + "helpNodedexAlbumModeBubble": "Нажмите **переключатель вида** в панели приложения, чтобы перейти в **режим Альбома** — вид коллекционных карточек вашего NodeDex!", + "helpNodedexAtmosphereBubble": "Замечаете тонкие **частицы** за экраном? Это **Стихийная Атмосфера** — она отражает преобладающий элемент вашего текущего набора узлов!", + "helpNodedexCloudSyncBubble": "Ваш NodeDex хранится локально в SQLite и сохраняется после перезапуска приложения — но **не** при переустановке. Используйте **Облачную синхронизацию** для резервного копирования!", + "helpNodedexExportBubble": "Используйте **меню**, чтобы **экспортировать** NodeDex в JSON-файл для резервного копирования или **импортировать** его обратно на другом устройстве.", + "helpNodedexSigilBubble": "Это **Символ** узла — уникальный процедурный глиф, сгенерированный из его идентификатора. Он не меняется и однозначно идентифицирует узел.", + "helpNodedexTraitBubble": "**Черта** — это выведенная личность на основе поведения данного узла: движение, частота появления, уровень сигнала и режимы активности.", + "helpNodedexAutoSummaryBubble": "**Автосводка** вычисляет инсайты из истории встреч — распределение по времени суток, динамику появлений и качество сигнала.", + "helpNodedexObservationTimelineBubble": "**Временная шкала наблюдений** визуализирует плотность встреч с этим узлом с течением времени. Отражает, когда и как часто вы видели этот узел.", + "helpNodedexDiscoveryBubble": "**Статистика обнаружения** показывает, когда вы впервые и последний раз видели этот узел, количество встреч и общий охват активности.", + "helpNodedexSignalBubble": "**Записи сигнала** отслеживают лучшие и последние значения SNR и RSSI. Это помогает понять качество соединения с данным узлом.", + "helpNodedexSocialTagBubble": "**Социальный тег** — это метка, которую вы назначаете для категоризации узла: друг, ретранслятор, инфраструктура и т.д.", + "helpNodedexNoteBubble": "**Ваша заметка** — свободное текстовое поле для всего, что вы хотите запомнить об этом узле. Видно только вам.", + "helpNodedexRegionsBubble": "**История регионов** записывает каждый регулятивный регион, в котором наблюдался этот узел. Видно, путешествует ли он!", + "helpNodedexEncountersBubble": "**Последние встречи** — хронология появлений этого узла в вашей сети. Каждая запись включает время, SNR и контекст.", + "helpNodedexActivityTimelineBubble": "**Лента активности** — единая хронологическая лента всего наблюдаемого об этом узле: встречи, изменения, телеметрия и сигналы.", + "helpNodedexCoseenBubble": "**Совместно наблюдаемые** — узлы, часто замечаемые в одной сессии с данным узлом. Помогает понять топологию и кластеры сети.", + "helpNodedexDeviceBubble": "**Информация об устройстве** показывает актуальную телеметрию — уровень заряда, модель оборудования, версию прошивки и время работы.", + "helpAlbumIntroBubble": "Добро пожаловать в **Альбом коллекционера** — вид вашего NodeDex в формате карточек! Каждый узел становится уникальной коллекционной карточкой!", + "helpAlbumCoverBubble": "**Обложка альбома** — ваша панель: там показан ваш **Титул исследователя**, общее количество карточек и краткое описание коллекции.", + "helpAlbumGroupingBubble": "Используйте **чипы группировки**, чтобы упорядочить карточки по **Черте** (Маяк, Ретранслятор, Призрак...), **Редкости** или **Дате обнаружения**.", + "helpAlbumRarityBubble": "Карточки получают **уровни редкости** на основе количества встреч и черты. **Обычные** узлы встречаются часто, **Легендарные** — невероятно редки!", + "helpAlbumInteractionsBubble": "**Нажмите** на карточку, чтобы открыть полный профиль узла. **Удерживайте**, чтобы открыть **Галерею карточек** для этой черты.", + "helpAlbumGalleryBubble": "В **Галерее карточек** листайте влево и вправо. **Нажмите** на карточку, чтобы развернуть её, и изучите детали.", + "helpAlbumHolographicBubble": "Карточки более высокой редкости переливаются **голографическим эффектом** — чем редче карточка, тем интенсивнее эффект!", + "helpAlbumPersistenceBubble": "Ваши предпочтения вида альбома и выбор группировки **сохраняются автоматически**. С облачной синхронизацией они переносятся между устройствами!", + "helpConstellationIntroBubble": "Добро пожаловать в **Созвездие** — звёздную карту вашей mesh-сети! Узлы выглядят как звёзды, а связи — как линии созвездий!", + "helpConstellationLayoutBubble": "Расположение **управляется силами** — узлы, которые часто встречаются вместе, группируются. Изолированные узлы дрейфуют на периферию!", + "helpConstellationInteractionsBubble": "**Нажмите** на узел, чтобы выделить его связи. **Двойное нажатие** для приближения к кластеру. **Щипок для масштабирования** панорамирует вид!", + "helpConstellationEdgesBubble": "Используйте кнопку **плотности рёбер** в панели приложения, чтобы управлять количеством отображаемых связей. Меньше шума — чётче структура!", + "helpConstellationSearchBubble": "Значок **поиска** позволяет найти конкретный узел по имени или hex-идентификатору. Вид автоматически центрируется на нём!", + "helpConstellationAtmosphereBubble": "Созвездие имеет собственную **Стихийную Атмосферу** — тонкий звёздный свет и туманности, отражающие характер вашей коллекции!", + "helpConstellationDataBubble": "Данные о совместных наблюдениях формируются **автоматически** из ваших встреч. Чем больше сессий, тем богаче созвездие!", + "helpCloudSyncIntroBubble": "**Облачная синхронизация** — это премиум-подписка, которая синхронизирует данные вашей mesh-сети между всеми устройствами!", + "helpCloudSyncWhatSyncsBubble": "Облачная синхронизация создаёт резервные копии вашего **NodeDex** (символы, встречи, социальные теги, заметки, совместные наблюдения), **автоматизаций**, **профиля** и **настроек приложения**.", + "helpCloudSyncOfflineFirstBubble": "Приложение **работает офлайн в первую очередь**. Изменения сразу сохраняются в SQLite, а когда появляется интернет — синхронизируются в фоне.", + "helpCloudSyncConflictBubble": "Если вы редактируете один узел на двух устройствах, Облачная синхронизация использует принцип **«последняя запись побеждает»** — сохраняется самое последнее изменение.", + "helpCloudSyncSubscriptionBubble": "Облачная синхронизация доступна по **ежемесячной** или **ежегодной** подписке. Управляйте ею в Настройках > Облачная синхронизация.", + "helpCloudSyncWithoutBubble": "Без Облачной синхронизации все данные хранятся только на устройстве. Они сохраняются после перезапуска, но не переживают переустановку приложения.", + "helpAetherIntroBubble": "**Aether** позволяет отслеживать узлы Meshtastic на высоте! На высоте 10 000 м сигналы LoRa могут покрывать тысячи километров!", + "helpAetherScheduleBubble": "**Запланируйте рейс** перед полётом. Введите номер рейса, аэропорты, дату вылета и настройте отслеживание.", + "helpAetherActiveBubble": "**Активные рейсы** показывают актуальные данные о местоположении из API OpenSky Network. Вы увидите свою позицию на карте в реальном времени!", + "helpAetherReportsBubble": "**Отчёты о приёме** позволяют наземным станциям сообщать, когда они принимают ваш сигнал. Создавайте карты покрытия на большой высоте!", + "helpAetherLeaderboardBubble": "**Таблица лидеров глобальная и постоянная** — хранится в облаке, а не на вашем устройстве. Ваши рекорды сохраняются при смене телефона!", + "helpAetherTipsBubble": "**Советы**: Иллюминаторное место помогает. Ненадолго отключите авиарежим в крейсерском полёте. Используйте антенну с круговой поляризацией для лучших результатов!", + "helpTakIntroBubble": "**TAK Gateway** интегрирует вашу mesh-сеть в экосистему Team Awareness Kit (TAK). Импортируйте CoT-объекты с TAK-серверов!", + "helpTakConnectBubble": "Нажмите на **значок ссылки** в панели приложения для подключения или отключения. Карточка статуса показывает текущее состояние соединения.", + "helpTakAffiliationsBubble": "Каждый объект окрашен по **стандартной принадлежности** — синий для дружественных, красный для враждебных, жёлтый для неизвестных, зелёный для нейтральных.", + "helpTakFilterBubble": "Используйте **чипы фильтров** для сужения списка по принадлежности или введите позывной в строку поиска.", + "helpTakDetailBubble": "Нажмите на любой объект, чтобы открыть экран **подробностей** — полные поля CoT, координаты, скорость и временны́е метки.", + "helpTakTrackingBubble": "**Удерживайте** плитку объекта, чтобы включить/выключить отслеживание. Отслеживаемые объекты выделяются и остаются в верхней части списка.", + "helpTakSettingsBubble": "Откройте **Настройки TAK** из меню, чтобы изменить URL шлюза, переключить автоподключение или сбросить историю объектов.", + "helpRadioResponsibilityBubble": "**Вы** несёте ответственность за то, чтобы ваше радиооборудование соответствовало законам вашей страны. Meshtastic работает на нелицензируемых диапазонах — но правила всё равно действуют!", + "helpRadioLicenceBubble": "В некоторых регионах для передачи сигнала требуется **лицензия радиолюбителя**. Уточните требования вашей страны перед использованием.", + "helpRadioInterferenceBubble": "Никогда не создавайте помех **аварийным коммуникациям** или лицензированным службам. Нарушения могут повлечь серьёзные правовые последствия.", + "helpRadioTermsLinkBubble": "Для получения полной информации ознакомьтесь с разделом **«Радио и соответствие законодательству»** в наших Условиях использования.", + "helpUseIntroBubble": "Socialmesh — мощный инструмент. Автоматизации, сигналы и mesh-сообщения дают широкие возможности — используйте их ответственно!", + "helpUseLawfulBubble": "Используйте приложение только в **законных целях**. Не передавайте вредоносный, угрожающий или незаконный контент по сети.", + "helpUseAutomationsBubble": "Автоматизации отлично подходят для оповещений, но не используйте их для **спама или флуда** в сети. Будьте уважительным участником!", + "helpUseImpersonationBubble": "Не **выдавайте себя** за других людей или организации в mesh-сети. Будьте собой и уважайте остальных участников!", + "helpUseTermsLinkBubble": "Полный список запрещённых действий находится в разделе **«Использование сервиса»** в наших Условиях использования.", + "helpResponsibilityIntroBubble": "Socialmesh разработан с приоритетом **конфиденциальности**. Ваши сообщения и данные хранятся на вашем устройстве — мы не продаём ваши данные!", + "helpResponsibilitySignalsBubble": "Когда вы создаёте **Сигнал**, он транслируется по mesh-сети. Все, у кого есть совместимое устройство, могут его получить.", + "helpResponsibilityContentBubble": "Вы несёте ответственность за **всё, что передаёте**. Не распространяйте личные данные других без их согласия.", + "helpResponsibilityThirdPartyBubble": "Некоторые функции используют **сторонние сервисы**: RevenueCat для покупок и Firebase для облачного резервного копирования.", + "helpResponsibilityTermsLinkBubble": "Для получения полной информации ознакомьтесь с нашими **Условиями использования** и **Политикой конфиденциальности** в Настройках.", + "helpFtIntroBubble": "**Передача файлов** позволяет отправлять небольшие файлы — текст, конфигурации, координаты — напрямую через mesh!", + "helpFtHowBubble": "Файлы разбиваются на **фрагменты ~200 байт** и отправляются по одному через mesh. Получатель собирает фрагменты обратно в файл!", + "helpFtNackBubble": "Пропустили фрагмент? Не проблема. Получатель отправляет **NACK** (отрицательное подтверждение), и отправитель повторяет только пропущенные фрагменты!", + "helpFtLimitBubble": "Максимальный размер файлов — **8 КБ**. LoRa — медленная, общая, маломощная радиосвязь. Один файл 8 КБ может занять несколько минут!", + "helpFtBetaBubble": "Эта функция находится в стадии **БЕТА**. Оба узла должны работать на Socialmesh в одной и той же mesh-сети.", + "helpFtContactsBubble": "Используйте вкладку **Контакты**, чтобы выбрать узел, затем нажмите **Отправить файл**. Вкладка «Контакты» показывает, кто сейчас в сети.", + "helpFtlSharedBubble": "Каналы LoRa **общие и медленные**. Каждый байт, который вы отправляете, — это эфирное время, которое используется совместно с другими. Отправляйте только необходимое!", + "helpFtlToaBubble": "**Время в эфире** на фрагмент зависит от коэффициента расширения (SF). SF7 (быстро, малая дальность): ~30 мс/фрагмент. SF12 (медленно, большая дальность): ~1,5 с/фрагмент!", + "helpFtlMathBubble": "8 КБ ÷ 200 байт/фрагмент = **41 фрагмент**. При SF7: ~1,2 с всего. При SF12: **~61 с** — и это только эфирное время, без учёта повторных передач!", + "helpFtlDutyBubble": "Диапазоны EU868 и аналогичные имеют **1% дюти-цикл** — радио может передавать только 1% времени. Файл на 8 КБ при SF12 может занять **несколько часов**!", + "helpFtlCapBubble": "8 КБ — это **самый безопасный максимум**, при котором передача остаётся выполнимой даже при наихудшем коэффициенте расширения.", + "helpFtlUsbBubble": "Передачи через BLE и USB не имеют ограничений радиодюти-цикла. В будущих версиях этот лимит может быть снят для таких подключений.", + "helpNodeDexSectionSigil": "Уникальный процедурный глиф, сгенерированный из идентификатора данного узла.", + "helpNodeDexSectionTrait": "Выведенный архетип личности на основе поведенческих сигналов:", + "helpNodeDexSectionAutoSummary": "Вычисленные инсайты из истории встреч данного узла. Распределение по времени суток", + "helpNodeDexSectionObservationTimeline": "Визуальная временная шкала истории наблюдений данного узла. Столбик показывает", + "helpNodeDexSectionDiscovery": "Отслеживает время первого и последнего обнаружения данного узла в вашей сети, общее", + "helpNodeDexSectionSignal": "Лучшие и последние значения SNR (отношение сигнал/шум) и RSSI", + "helpNodeDexSectionSocialTag": "Личная метка для категоризации данного узла. Социальные теги являются", + "helpNodeDexSectionNote": "Свободная заметка о любой информации, которую вы хотите запомнить об этом узле.", + "helpNodeDexSectionRegions": "Все регулятивные регионы, в которых наблюдался данный узел. Регион", + "helpNodeDexSectionEncounters": "Хронологическая лента появлений данного узла в вашей сети.", + "helpNodeDexSectionActivityTimeline": "Единая хронологическая лента всего наблюдаемого об этом узле:", + "helpNodeDexSectionCoseen": "Узлы, которые часто наблюдаются в одной сессии с данным узлом.", + "helpNodeDexSectionDevice": "Актуальная телеметрия с узла: процент заряда батареи, модель оборудования,", + "helpNodeDexSectionAlbumRarity": "Уровни редкости вычисляются на основе количества встреч и выведенной черты.", + "helpNodeDexSectionAlbumGrouping": "Карточки можно группировать по Черте (поведенческий архетип), Редкости", + "helpNodeDexSectionAlbumExplorerTitle": "Ваш Титул исследователя отражает общий прогресс коллекции.", + "helpNodeDexSectionAlbumHolographic": "Голографическое мерцание на карточках — визуальный индикатор редкости.", + "helpNodeDexSectionAlbumPatina": "Патина — сводная оценка, отражающая глубину ваших наблюдений за", + "helpNodeDexSectionAlbumCloudSync": "С подпиской Облачная синхронизация весь ваш альбом NodeDex резервируется", + "helpTakSectionStatus": "Карточка статуса показывает, подключено ли WebSocket-соединение с TAK", + "helpTakSectionAffiliation": "Принадлежность описывает отношение объекта к", + "helpTakSectionCotType": "Строка типа CoT кодирует принадлежность, измерение и", + "helpTakSectionIdentity": "UID однозначно идентифицирует данный объект во всех CoT-сообщениях.", + "helpTakSectionPosition": "Широта и долгота в десятичных градусах WGS-84, как указано в", + "helpTakSectionMotion": "Скорость, курс и высота, извлечённые из трека и", + "helpTakSectionTimestamps": "Время события — момент генерации CoT-события. Время устаревания — когда", + "helpTakSectionTracking": "Отслеживаемые объекты закреплены и выделены на карте с", + "helpTakSectionRawPayload": "Необработанные JSON-данные, полученные от WebSocket TAK Gateway.", + "helpTakSectionFilters": "Чипы фильтров позволяют сужать список объектов по принадлежности.", + "helpTakSectionSettings": "Настройки TAK позволяют настроить URL шлюза, переключить автоподключение", + "accessRestrictedTitle": "Доступ ограничен", + "goBack": "Назад", + "deviceNotConnected": "Устройство не подключено", + "connectDevice": "Подключить устройство", + "connectDeviceToUseFeature": "Подключите устройство для использования этой функции", + "positionRequestedFrom": "Местоположение запрошено у {name}", + "failedGeneric": "Ошибка: {error}", + "failedToUpdateSignalLocationRadius": "Не удалось обновить радиус местоположения сигнала: {error}", + "failedToSaveConfiguration": "Не удалось сохранить конфигурацию: {error}", + "automationActionError": "Действие {index}: {error}", + "failedToPlay": "Не удалось воспроизвести: {error}", + "whatsNewVersion190Subtitle": "Версия 1.9.0", + "whatsNewReachabilityTitle": "Достижимость", + "whatsNewReachabilityDescription": "Оцените вероятность достижения каждого узла в вашей сети — без отправки единого тестового пакета.\\n\\nДостижимость пассивно наблюдает за трафиком в сети и присваивает каждому узлу уровень уверенности: высокий, средний или низкий. Найдите в меню под разделом «Сеть».", + "whatsNewVersion1100Subtitle": "Версия 1.10.0", + "whatsNewWorldMapTitle": "Карта мира", + "whatsNewWorldMapDescription": "Смотрите всю глобальную сеть Meshtastic на одной карте. Каждая точка — узел, передающий своё местоположение. Приближайте, перемещайте карту, нажимайте на точки для просмотра сведений об узлах, информации об оборудовании и времени последней активности.\\n\\nПодключение не требуется. Карта мира берёт данные в реальном времени из бэкенда Socialmesh, чтобы вы могли изучать сеть где угодно.", + "whatsNewVersion1101Subtitle": "Версия 1.10.1", + "whatsNewPresenceTitle": "Присутствие", + "whatsNewPresenceDescription": "Смотрите, кто активен в вашей сети, с первого взгляда. Присутствие показывает активность узлов в реальном времени с индикаторами намерений — мониторинг, мобильный или стационарная базовая станция.\\n\\nФильтруйте по уровню активности, ищите по имени и нажимайте на любой узел для просмотра полного профиля. Найдите в меню под разделом «Социальное».", + "whatsNewVersion1110Subtitle": "Версия 1.11.0", + "whatsNewSignalsTitle": "Сигналы", + "whatsNewSignalsDescription": "Транслируйте мимолётные моменты в вашу сеть. Сигналы — это кратковременные публикации: поделитесь текстом, фото или вашим местоположением с TTL от 15 минут до 24 часов.\\n\\nБлижайшие сигналы отображаются первыми с бейджами близости, показывающими число переходов. Когда они исчезнут, они пропадут навсегда. Настоящий автономный эфемерный контент.", + "whatsNewVersion1130Subtitle": "Версия 1.13.0", "whatsNewNodeDexTitle": "NodeDex", - "whatsNewNodeDexDescription": "A living field journal of the mesh world. Every node you discover is automatically recorded with a unique procedural Sigil and a personality Trait derived from real behavior.\\n\\nFind it in the drawer menu under Social. Filter by trait, search by name or hex ID, and tap any entry to explore its full profile — signal history, discovery timeline, and more.", - "whatsNewVersion1150Subtitle": "Version 1.15.0", + "whatsNewNodeDexDescription": "Живой полевой журнал мира радиосетей. Каждый обнаруженный узел автоматически записывается с уникальным процедурным Sigil и чертой характера, полученной из реального поведения.\\n\\nНайдите в меню под разделом «Социальное». Фильтруйте по чертам, ищите по имени или шестнадцатеричному ID, нажимайте на запись для изучения полного профиля — история сигнала, хронология обнаружения и многое другое.", + "whatsNewVersion1150Subtitle": "Версия 1.15.0", "whatsNewAetherTitle": "Aether", - "whatsNewAetherDescription": "Track Meshtastic nodes at altitude! Schedule your flight with your mesh node and let ground stations around the world listen for your signal.\\n\\nAt 35,000 ft, LoRa can reach 400+ km. Report receptions, compete on the distance leaderboard, and set new range records. Find it in the drawer menu under Social.", - "whatsNewVersion1160Subtitle": "Version 1.16.0", - "whatsNewTakGatewayTitle": "TAK Gateway", - "whatsNewTakGatewayDescription": "Bridge your mesh into the Team Awareness Kit (TAK) ecosystem. Socialmesh now connects to a TAK Gateway via WebSocket and streams live Cursor-on-Target entities onto your map.\\n\\nEvery entity is colored by standard affiliation and given a dimension-specific icon. Filter by affiliation, search callsigns, track entities with a long-press, and tap any marker for full CoT details. Find it in the drawer menu under Mesh.", - "notificationNewNodeTitle": "New Node Discovered", - "notificationNewNodeBody": "{nodeName} ({shortCode}) joined the mesh", - "notificationAetherFlightTitle": "Aether Flight Detected", + "whatsNewAetherDescription": "Отслеживайте узлы Meshtastic на высоте! Запланируйте полёт с вашим узлом и позвольте наземным станциям по всему миру прослушивать ваш сигнал.\\n\\nНа высоте 35 000 футов LoRa может достигать 400+ км. Сообщайте о приёмах, соревнуйтесь в таблице лидеров по дальности и устанавливайте новые рекорды. Найдите в меню под разделом «Социальное».", + "whatsNewVersion1160Subtitle": "Версия 1.16.0", + "whatsNewTakGatewayTitle": "TAK Шлюз", + "whatsNewTakGatewayDescription": "Подключите вашу сеть к экосистеме Team Awareness Kit (TAK). Socialmesh теперь подключается к TAK Gateway через WebSocket и передаёт живые объекты Cursor-on-Target на вашу карту.\\n\\nКаждый объект раскрашен по стандартной принадлежности и снабжён иконкой соответствующего типа. Фильтруйте по принадлежности, ищите позывные, отслеживайте объекты долгим нажатием и нажимайте на маркер для просмотра полных данных CoT. Найдите в меню под разделом «Сеть».", + "notificationNewNodeTitle": "Обнаружен новый узел", + "notificationNewNodeBody": "{nodeName} ({shortCode}) присоединился к сети", + "notificationAetherFlightTitle": "Обнаружен полёт Aether", "notificationDetectionSensorTitle": "{sensorName}: {state}", - "notificationDetectionSensorBody": "From {displayName}", - "notificationEntityStaleTitle": "Entity Stale: {callsign}", - "notificationProximityAlertTitle": "Proximity Alert: {callsign}", - "notificationDirectMessageTitle": "Message from {senderName} ({shortCode})", - "notificationChannelMessageTitle": "{senderName} ({shortCode}) in {channelName}", - "notificationChannelNodeDiscovery": "Notifications for newly discovered mesh nodes", - "notificationChannelAetherFlights": "Notifications for Aether flight detection events", - "notificationChannelDeviceAlerts": "Important notifications from your Meshtastic device", - "notificationChannelDetectionSensor": "Notifications for detection sensor events", - "notificationChannelTakStale": "Notifications when tracked TAK entities go stale", - "notificationChannelTakProximity": "Notifications for TAK entity proximity alerts", - "notificationChannelDirectMessages": "Notifications for direct mesh messages", - "notificationChannelMessages": "Notifications for channel mesh messages", - "flowNodeEvent": "Event", - "flowNodeMessageContains": "Message Contains", - "flowNodeNodeSilent": "Node Silent", - "flowNodeScheduled": "Scheduled", - "flowNodeSignalWeak": "Signal Weak", - "flowNodeChannelActivity": "Channel Activity", - "flowNodeDetectionSensor": "Detection Sensor", - "flowNodeManual": "Manual", - "flowNodeAllNodes": "All Nodes", - "flowNodeNodes": "Nodes", - "flowNodeTraitFilter": "Trait Filter", - "flowNodeDistanceFilter": "Distance Filter", - "flowNodeEncounterFilter": "Encounter Filter", - "flowNodeOnlineFilter": "Online Filter", - "flowNodeBatteryFilter": "Battery Filter", - "flowNodeNameFilter": "Name Filter", - "flowNodeSort": "Sort", - "flowNodeLimit": "Limit", - "flowNodeInput": "Input", - "flowNodeFiltered": "Filtered", - "flowNodeSorted": "Sorted", - "flowNodeLimited": "Limited", - "flowNodeExecute": "Execute", - "flowNodeAnd": "AND", - "flowNodeOr": "OR", - "flowNodeNot": "NOT", - "flowNodeDelay": "Delay", - "flowNodeAllMet": "All Met", - "flowNodeAnyMet": "Any Met", - "flowNodeInverted": "Inverted", - "flowNodeDelayed": "Delayed", - "automationTemplateLowBatteryTitle": "Low Battery Alert", - "automationTemplateNodeOfflineTitle": "Node Offline Alert", - "automationTemplateWeatherReportTitle": "Weather Report", - "automationTemplateWeatherReportDescription": "Send periodic weather data from environment sensors", - "automationTemplateChannelMonitorTitle": "Channel Monitor", - "automationTemplateChannelMonitorDescription": "Log activity for a specific channel", - "automationTemplateEmergencyBeaconTitle": "Emergency Beacon", - "automationTemplateEmergencyBeaconDescription": "Broadcast emergency position every 5 minutes when triggered", - "automationTemplateGeofenceExitTitle": "Geofence Exit Alert", - "automationTemplateSosTitle": "SOS Response", - "automationTemplateDeadManTitle": "Dead Man's Switch", - "whatsNewCtaOpenWorldMap": "Open World Map", - "whatsNewCtaOpenPresence": "Open Presence", - "whatsNewCtaOpenNodedex": "Open NodeDex", - "whatsNewCtaOpenAether": "Open Aether", - "whatsNewCtaOpenReachability": "Open Reachability", - "whatsNewCtaOpenSignals": "Open Signals", - "whatsNewCtaOpenTakGateway": "Open TAK Gateway", - "whatsNewHeadline": "What's New in Socialmesh", - "connectingStatusInitializing": "Initializing", - "connectingStatusScanning": "Scanning for device", - "connectingStatusConnecting": "Connecting", - "connectingStatusAutoReconnecting": "Auto-reconnecting", - "connectingStatusConfiguring": "Configuring device", - "connectingStatusConnected": "Connected", - "connectingStatusFailed": "Connection failed", - "profileAvatarUpdated": "Avatar updated", - "profileAvatarRemoved": "Avatar removed", - "profileBannerUpdated": "Banner updated", - "profileBannerRemoved": "Banner removed", - "commonOpenSettings": "Open Settings", - "socialGuidelineNoViolentImagery": "No violent or graphic imagery", - "globalLayerConnectionTestLabel": "CONNECTION TEST", - "commonSignIn": "Sign In", - "onboardingSignalContentMike": "Base camp is set. Ready when you are.", - "onboardingSignalContentAlex": "On my way, ETA 15 min", - "automationErrorSendMsgNotConfigured": "Send message callback not configured", - "automationErrorNoTargetNode": "No target node specified", - "automationErrorSendChannelNotConfigured": "Send to channel callback not configured", - "automationErrorNoTargetChannel": "No target channel specified", - "automationErrorNoSoundConfigured": "No sound configured", - "automationErrorPlaySoundFailed": "Failed to play sound: {error}", - "automationErrorNotificationsNotInit": "Notifications not initialized", - "automationErrorNoWebhookEvent": "No webhook event name specified", - "automationErrorIftttNotConfigured": "IFTTT not configured — enable IFTTT and set webhook key in settings", - "automationErrorWebhookFailed": "Webhook request failed — check network connection", - "automationErrorSendMsgFailed": "Failed to send message", - "automationErrorSendChannelFailed": "Failed to send to channel", - "automationErrorShortcutsIosOnly": "Shortcuts only available on iOS", - "automationErrorNoShortcutName": "No shortcut name specified", - "automationErrorShortcutLaunchFailed": "Could not launch shortcut \"{name}\"", - "automationErrorShortcutRunFailed": "Failed to run shortcut: {error}", - "automationErrorGlyphNotAvailable": "Glyph interface not available", - "automationErrorGlyphPatternFailed": "Failed to show glyph pattern: {error}", - "automationTemplateLowBatteryDesc": "Notify when a node battery drops below 20%", - "automationTemplateNodeOfflineDesc": "Notify when a node goes offline", - "automationTemplateGeofenceExitDesc": "Alert when a node leaves a designated area", - "automationTemplateSosDesc": "Auto-reply when receiving SOS message", - "automationTemplateDeadManDesc": "Alert if no activity from node for 30 minutes", - "automationScheduledTitle": "Scheduled Automation", - "automationScheduledBody": "Tap to run scheduled automation", - "authErrorGoogleSignInCancelled": "Google sign in was cancelled", - "authErrorGoogleNoIdToken": "Google sign in did not return an ID token", - "authErrorNoCurrentUser": "No user is currently signed in", - "authErrorGoogleReauthCancelled": "Google re-authentication was cancelled", - "authErrorNoSupportedProvider": "No supported provider found for re-authentication", - "authErrorNoUserSignedIn": "No user signed in", - "authErrorSessionLost": "User session lost during re-authentication", - "authErrorVerificationCodeFailed": "Failed to send verification code", - "connectionErrorBluetoothDisabled": "Bluetooth is disabled", - "connectionErrorDeviceNotFound": "Device not found", - "connectionErrorDeviceReset": "Device was reset or replaced. Set it up again.", - "countdownTracerouteTo": "Traceroute to {displayName}", - "countdownRequestingPositions": "Requesting mesh positions", - "countdownBroadcastingPosition": "Broadcasting position to mesh", - "lifecycleAppNotActive": "App is not active", - "lifecycleCommandExpired": "Command expired", - "nodedexMilestoneFirstDiscovered": "First discovered", - "nodedexMilestoneEncounterN": "Encounter #{count}", - "meshHealthRssiDegraded": "Average RSSI degraded to {rssi} dBm", - "offlineQueueMaxRetries": "Max retries reached: {error}", - "connectionAlreadyInProgress": "Connection already in progress", - "connectionCancelled": "Connection was cancelled", - "adminConformanceBundleTitle": "Socialmesh Conformance Bundle", - "adminDiagnosticBundleText": "Admin diagnostic bundle from Socialmesh", - "adminDiagnosticBundleSubject": "Socialmesh Diagnostic {runId}", + "notificationDetectionSensorBody": "От {displayName}", + "notificationEntityStaleTitle": "Устаревший объект: {callsign}", + "notificationProximityAlertTitle": "Оповещение о близости: {callsign}", + "notificationDirectMessageTitle": "Сообщение от {senderName} ({shortCode})", + "notificationChannelMessageTitle": "{senderName} ({shortCode}) в {channelName}", + "notificationChannelNodeDiscovery": "Уведомления о новых обнаруженных узлах сети", + "notificationChannelAetherFlights": "Уведомления о событиях обнаружения полётов Aether", + "notificationChannelDeviceAlerts": "Важные уведомления от вашего устройства Meshtastic", + "notificationChannelDetectionSensor": "Уведомления о событиях датчиков обнаружения", + "notificationChannelTakStale": "Уведомления при устаревании отслеживаемых объектов TAK", + "notificationChannelTakProximity": "Уведомления о близости объектов TAK", + "notificationChannelDirectMessages": "Уведомления о личных сообщениях сети", + "notificationChannelMessages": "Уведомления о сообщениях в каналах сети", + "flowNodeEvent": "Событие", + "flowNodeMessageContains": "Сообщение содержит", + "flowNodeNodeSilent": "Узел молчит", + "flowNodeScheduled": "По расписанию", + "flowNodeSignalWeak": "Слабый сигнал", + "flowNodeChannelActivity": "Активность канала", + "flowNodeDetectionSensor": "Датчик обнаружения", + "flowNodeManual": "Вручную", + "flowNodeAllNodes": "Все узлы", + "flowNodeNodes": "Узлы", + "flowNodeTraitFilter": "Фильтр по чертам", + "flowNodeDistanceFilter": "Фильтр по расстоянию", + "flowNodeEncounterFilter": "Фильтр по встречам", + "flowNodeOnlineFilter": "Фильтр по наличию в сети", + "flowNodeBatteryFilter": "Фильтр по заряду", + "flowNodeNameFilter": "Фильтр по имени", + "flowNodeSort": "Сортировка", + "flowNodeLimit": "Ограничение", + "flowNodeInput": "Входные данные", + "flowNodeFiltered": "Отфильтровано", + "flowNodeSorted": "Отсортировано", + "flowNodeLimited": "Ограничено", + "flowNodeExecute": "Выполнить", + "flowNodeAnd": "И", + "flowNodeOr": "ИЛИ", + "flowNodeNot": "НЕ", + "flowNodeDelay": "Задержка", + "flowNodeAllMet": "Все выполнены", + "flowNodeAnyMet": "Любое выполнено", + "flowNodeInverted": "Инвертировано", + "flowNodeDelayed": "Отложено", + "automationTemplateLowBatteryTitle": "Оповещение о низком заряде", + "automationTemplateNodeOfflineTitle": "Оповещение об отключении узла", + "automationTemplateWeatherReportTitle": "Отчёт о погоде", + "automationTemplateWeatherReportDescription": "Периодически отправлять данные о погоде с датчиков окружающей среды", + "automationTemplateChannelMonitorTitle": "Мониторинг канала", + "automationTemplateChannelMonitorDescription": "Записывать активность в определённом канале", + "automationTemplateEmergencyBeaconTitle": "Аварийный маяк", + "automationTemplateEmergencyBeaconDescription": "Транслировать аварийное местоположение каждые 5 минут при срабатывании", + "automationTemplateGeofenceExitTitle": "Оповещение о выходе из геозоны", + "automationTemplateSosTitle": "Ответ на SOS", + "automationTemplateDeadManTitle": "Мёртвая рука", + "whatsNewCtaOpenWorldMap": "Открыть карту мира", + "whatsNewCtaOpenPresence": "Открыть присутствие", + "whatsNewCtaOpenNodedex": "Открыть NodeDex", + "whatsNewCtaOpenAether": "Открыть Aether", + "whatsNewCtaOpenReachability": "Открыть достижимость", + "whatsNewCtaOpenSignals": "Открыть сигналы", + "whatsNewCtaOpenTakGateway": "Открыть TAK шлюз", + "whatsNewHeadline": "Что нового в Socialmesh", + "connectingStatusInitializing": "Инициализация", + "connectingStatusScanning": "Поиск устройства", + "connectingStatusConnecting": "Подключение", + "connectingStatusAutoReconnecting": "Автоматическое переподключение", + "connectingStatusConfiguring": "Настройка устройства", + "connectingStatusConnected": "Подключено", + "connectingStatusFailed": "Ошибка подключения", + "profileAvatarUpdated": "Аватар обновлён", + "profileAvatarRemoved": "Аватар удалён", + "profileBannerUpdated": "Баннер обновлён", + "profileBannerRemoved": "Баннер удалён", + "commonOpenSettings": "Открыть настройки", + "socialGuidelineNoViolentImagery": "Запрещены жестокие или шокирующие изображения", + "globalLayerConnectionTestLabel": "ТЕСТ ПОДКЛЮЧЕНИЯ", + "commonSignIn": "Вход", + "onboardingSignalContentMike": "Базовый лагерь разбит. Готов по вашей команде.", + "onboardingSignalContentAlex": "Уже еду, буду через 15 мин", + "automationErrorSendMsgNotConfigured": "Обратный вызов отправки сообщений не настроен", + "automationErrorNoTargetNode": "Целевой узел не указан", + "automationErrorSendChannelNotConfigured": "Обратный вызов отправки в канал не настроен", + "automationErrorNoTargetChannel": "Целевой канал не указан", + "automationErrorNoSoundConfigured": "Звук не настроен", + "automationErrorPlaySoundFailed": "Не удалось воспроизвести звук: {error}", + "automationErrorNotificationsNotInit": "Уведомления не инициализированы", + "automationErrorNoWebhookEvent": "Имя события Webhook не указано", + "automationErrorIftttNotConfigured": "IFTTT не настроен — включите IFTTT и укажите ключ Webhook в настройках", + "automationErrorWebhookFailed": "Запрос Webhook не удался — проверьте подключение к сети", + "automationErrorSendMsgFailed": "Не удалось отправить сообщение", + "automationErrorSendChannelFailed": "Не удалось отправить в канал", + "automationErrorShortcutsIosOnly": "Шортcаты доступны только на iOS", + "automationErrorNoShortcutName": "Имя шортcата не указано", + "automationErrorShortcutLaunchFailed": "Не удалось запустить шортcат \"{name}\"", + "automationErrorShortcutRunFailed": "Не удалось выполнить шортcат: {error}", + "automationErrorGlyphNotAvailable": "Интерфейс подсветки недоступен", + "automationErrorGlyphPatternFailed": "Не удалось отобразить паттерн подсветки: {error}", + "automationTemplateLowBatteryDesc": "Уведомить, когда уровень аккумулятора узла падает ниже 20%", + "automationTemplateNodeOfflineDesc": "Уведомить, когда узел уходит в офлайн", + "automationTemplateGeofenceExitDesc": "Оповестить, когда узел покидает обозначенную зону", + "automationTemplateSosDesc": "Автоматически ответить при получении SOS-сообщения", + "automationTemplateDeadManDesc": "Оповестить, если нет активности от узла в течение 30 минут", + "automationScheduledTitle": "Автоматизация по расписанию", + "automationScheduledBody": "Нажмите, чтобы запустить автоматизацию по расписанию", + "authErrorGoogleSignInCancelled": "Вход через Google отменён", + "authErrorGoogleNoIdToken": "Вход через Google не вернул токен идентификации", + "authErrorNoCurrentUser": "Ни один пользователь не вошёл в систему", + "authErrorGoogleReauthCancelled": "Повторная аутентификация через Google отменена", + "authErrorNoSupportedProvider": "Не найден поддерживаемый провайдер для повторной аутентификации", + "authErrorNoUserSignedIn": "Пользователь не вошёл в систему", + "authErrorSessionLost": "Сессия пользователя утеряна во время повторной аутентификации", + "authErrorVerificationCodeFailed": "Не удалось отправить код подтверждения", + "connectionErrorBluetoothDisabled": "Bluetooth отключён", + "connectionErrorDeviceNotFound": "Устройство не найдено", + "connectionErrorDeviceReset": "Устройство было сброшено или заменено. Настройте его заново.", + "countdownTracerouteTo": "Трассировка до {displayName}", + "countdownRequestingPositions": "Запрос местоположений в сети", + "countdownBroadcastingPosition": "Трансляция местоположения в сеть", + "lifecycleAppNotActive": "Приложение неактивно", + "lifecycleCommandExpired": "Команда истекла", + "nodedexMilestoneFirstDiscovered": "Первое обнаружение", + "nodedexMilestoneEncounterN": "Встреча #{count}", + "meshHealthRssiDegraded": "Средний RSSI ухудшился до {rssi} dBm", + "offlineQueueMaxRetries": "Достигнуто максимальное число попыток: {error}", + "connectionAlreadyInProgress": "Подключение уже выполняется", + "connectionCancelled": "Подключение отменено", + "adminConformanceBundleTitle": "Пакет тестирования соответствия Socialmesh", + "adminDiagnosticBundleText": "Диагностический пакет администратора от Socialmesh", + "adminDiagnosticBundleSubject": "Диагностика Socialmesh {runId}", "onboardingSignalAuthorSarah": "Sarah", - "onboardingSignalContentSarah": "Just reached the summit! Signal is crystal clear up here.", + "onboardingSignalContentSarah": "Только что достигла вершины! Сигнал кристально чистый.", "onboardingSignalAuthorMike": "Mike", "onboardingSignalAuthorAlex": "Alex", - "globalLayerCopyExplainTitle": "What is the Global Layer?", - "globalLayerCopyExplainBody": "Your mesh radio connects nearby devices over radio waves — no internet needed. The Global Layer extends that reach by bridging your local mesh to a server (called a broker) over the internet.\n\nThink of it as a portal: messages from your mesh can travel through the portal to reach other meshes connected to the same broker, anywhere in the world.", - "globalLayerCopyExplainWhatItDoes": "Bridges your local mesh to remote meshes via an internet server.", - "globalLayerCopyExplainWhatItDoesNot": "Does NOT replace your radio. Local mesh works independently even if the Global Layer is offline.", - "globalLayerCopyBrokerTitle": "Choose a Broker", - "globalLayerCopyBrokerBody": "Pick a broker to connect through. Most users should start with the official Meshtastic server — it works out of the box with no setup required.", - "globalLayerCopyTopicsTitle": "Choose What to Share", - "globalLayerCopyTopicsBody": "Topics control which types of data flow through the Global Layer. You can enable or disable each type independently.", - "globalLayerCopyPrivacyTitle": "Privacy & Safety", - "globalLayerCopyPrivacyBody": "The Global Layer is opt-in. Nothing is shared until you explicitly enable it below. You can change these settings at any time.", - "globalLayerCopyPrivacyBrokerTrustWarning": "Your broker can see all data you send through it. Only connect to brokers you trust.", - "globalLayerCopyTestTitle": "Test Connection", - "globalLayerCopyTestBody": "Verifying that your broker is reachable and configured correctly.", - "globalLayerCopySummaryTitle": "Ready to Connect", - "globalLayerCopySummaryBody": "Review your Global Layer settings below. You can change any of these later from the Global Layer status screen.", - "mqttTopicChatLabel": "Chat", - "mqttTopicChatDescription": "Text messages exchanged between mesh nodes on a specific channel.", - "mqttTopicTelemetryLabel": "Telemetry", - "mqttTopicTelemetryDescription": "Device health data such as battery level, voltage, and uptime.", - "mqttTopicPositionLabel": "Position", - "mqttTopicPositionDescription": "GPS coordinates reported by mesh nodes (privacy-sensitive).", - "mqttTopicNodeInfoLabel": "Node Info", - "mqttTopicNodeInfoDescription": "Node identity broadcasts including long name, short name, and hardware model.", - "mqttTopicMapReportsLabel": "Map Reports", - "mqttTopicMapReportsDescription": "Periodic position reports for public mesh mapping services.", - "mqttBrokerMeshtasticName": "Meshtastic (Official)", - "mqttBrokerMeshtasticDescription": "The default Meshtastic MQTT server. Connects you to the worldwide Meshtastic mesh network. No account needed.", - "mqttBrokerMeshtasticNote": "Public credentials are shared by all Meshtastic users.", + "globalLayerCopyExplainTitle": "Что такое Глобальный слой?", + "globalLayerCopyExplainBody": "Ваше сетевое радио соединяет близлежащие устройства по радиоволнам — без интернета. Глобальный слой расширяет этот охват, соединяя вашу локальную сеть с сервером через интернет.", + "globalLayerCopyExplainWhatItDoes": "Соединяет вашу локальную сеть с удалёнными сетями через интернет-сервер.", + "globalLayerCopyExplainWhatItDoesNot": "НЕ заменяет ваше радио. Локальная сеть работает независимо.", + "globalLayerCopyBrokerTitle": "Выберите брокер", + "globalLayerCopyBrokerBody": "Выберите брокер для подключения. Большинству пользователей следует начать с официального сервера Meshtastic.", + "globalLayerCopyTopicsTitle": "Выберите, чем делиться", + "globalLayerCopyTopicsBody": "Темы определяют, какие типы данных проходят через Глобальный слой.", + "globalLayerCopyPrivacyTitle": "Конфиденциальность и безопасность", + "globalLayerCopyPrivacyBody": "Глобальный слой работает только по вашему желанию. Ничего не передаётся до тех пор, пока вы явно не включите это.", + "globalLayerCopyPrivacyBrokerTrustWarning": "Ваш брокер видит все данные, которые вы через него отправляете. Подключайтесь только к брокерам, которым доверяете.", + "globalLayerCopyTestTitle": "Тест подключения", + "globalLayerCopyTestBody": "Проверяется доступность брокера и корректность настроек.", + "globalLayerCopySummaryTitle": "Готово к подключению", + "globalLayerCopySummaryBody": "Просмотрите настройки Глобального слоя ниже. Вы можете изменить любую из них позже.", + "mqttTopicChatLabel": "Чат", + "mqttTopicChatDescription": "Текстовые сообщения, которыми обмениваются узлы сети по определённому каналу.", + "mqttTopicTelemetryLabel": "Телеметрия", + "mqttTopicTelemetryDescription": "Данные о состоянии устройства: уровень заряда, напряжение, время работы.", + "mqttTopicPositionLabel": "Местоположение", + "mqttTopicPositionDescription": "GPS-координаты, передаваемые узлами сети (конфиденциальные данные).", + "mqttTopicNodeInfoLabel": "Информация об узле", + "mqttTopicNodeInfoDescription": "Широковещательные сведения об узле: длинное имя, короткое имя, модель оборудования.", + "mqttTopicMapReportsLabel": "Отчёты карты", + "mqttTopicMapReportsDescription": "Периодические отчёты о местоположении для общедоступных сервисов карты сети.", + "mqttBrokerMeshtasticName": "Meshtastic (официальный)", + "mqttBrokerMeshtasticDescription": "Стандартный MQTT-сервер Meshtastic. Подключает вас к всемирной сети Meshtastic. Учётная запись не требуется.", + "mqttBrokerMeshtasticNote": "Публичные учётные данные используются всеми пользователями Meshtastic.", "mqttBrokerMosquittoName": "Mosquitto Test", - "mqttBrokerMosquittoDescription": "A free public test broker run by the Eclipse Mosquitto project. Good for testing your setup before connecting to a production broker.", - "mqttBrokerMosquittoNote": "Test broker — not for production use. May have downtime.", - "mqttBrokerCustomName": "Custom Broker", - "mqttBrokerCustomDescription": "Enter your own broker details manually.", - "globalLayerDiagConfigTitle": "Configuration", - "globalLayerDiagConfigDescription": "Verifying that the broker address, port, and topic root are correctly formatted.", - "globalLayerDiagDnsTitle": "DNS Resolution", - "globalLayerDiagDnsDescription": "Looking up the broker hostname to find its network address.", - "globalLayerDiagTcpTitle": "TCP Connection", - "globalLayerDiagTcpDescription": "Establishing a network connection to the broker.", - "globalLayerDiagTlsTitle": "TLS Handshake", - "globalLayerDiagTlsDescription": "Negotiating a secure (encrypted) connection with the broker.", - "globalLayerDiagAuthTitle": "Authentication", - "globalLayerDiagAuthDescription": "Verifying your username and password with the broker.", - "globalLayerDiagSubscribeTitle": "Subscribe Test", - "globalLayerDiagSubscribeDescription": "Subscribing to a test topic to verify read access.", - "globalLayerDiagPublishTitle": "Publish Test", - "globalLayerDiagPublishDescription": "Publishing a test message to verify write access.", - "globalLayerDiagSuggestionCorrectFields": "Correct the highlighted fields and try again.", - "globalLayerDiagSuggestionUnexpectedBehavior": "These issues may not prevent connection but could cause unexpected behavior.", - "globalLayerDiagConfigValid": "All configuration fields are valid.", - "globalLayerDiagSuggestionValidHostname": "Enter a valid broker hostname.", - "globalLayerDiagSuggestionBothCredentials": "Some brokers require both username and password.", - "globalLayerWizardDnsValid": "Hostname looks valid: {host}", - "globalLayerWizardTcpReachable": "TCP connection to {host}:{port} looks reachable.", - "globalLayerWizardTlsAccepted": "TLS handshake parameters accepted.", - "globalLayerWizardCredentialsAccepted": "Credentials provided and accepted.", - "globalLayerWizardAnonymousAccess": "No credentials — using anonymous access.", - "globalLayerWizardSubscribeVerified": "Subscribe permissions verified.", - "globalLayerWizardPublishVerified": "Publish permissions verified.", - "globalLayerShareMessagesSubtitle": "Your local mesh chat messages will be forwarded to the broker for other connected meshes to receive.", - "globalLayerShareTelemetrySubtitle": "Battery level, voltage, and device uptime will be published to the broker.", - "globalLayerAllowInboundSubtitle": "Messages from other meshes connected to the same broker will be delivered to your local channels.", - "globalLayerBrokerTrust": "Broker Trust", - "globalLayerRunConnectionTest": "Run Connection Test", - "globalLayerSkipTestHint": "You can skip this step and test later.", - "globalLayerWizardAllChecksPassed": "All checks passed", - "globalLayerPassedWithWarnings": "Passed with warnings", - "globalLayerSomeChecksFailed": "Some checks failed", - "globalLayerTestInProgress": "Test in progress", - "globalLayerSummaryBrokerSection": "BROKER", - "globalLayerSummaryTopicsSection": "TOPICS", - "globalLayerSummaryPrivacySection": "PRIVACY", - "globalLayerSummaryAddress": "Address", - "globalLayerSummaryPort": "Port", + "mqttBrokerMosquittoDescription": "Бесплатный публичный тестовый брокер от проекта Eclipse Mosquitto. Хорош для проверки настроек перед подключением к рабочему брокеру.", + "mqttBrokerMosquittoNote": "Тестовый брокер — не для производственного использования. Возможны перебои.", + "mqttBrokerCustomName": "Пользовательский брокер", + "mqttBrokerCustomDescription": "Введите данные своего брокера вручную.", + "globalLayerDiagConfigTitle": "Конфигурация", + "globalLayerDiagConfigDescription": "Проверка правильности формата адреса брокера, порта и корня темы.", + "globalLayerDiagDnsTitle": "DNS-разрешение", + "globalLayerDiagDnsDescription": "Поиск имени хоста брокера для определения его сетевого адреса.", + "globalLayerDiagTcpTitle": "TCP-подключение", + "globalLayerDiagTcpDescription": "Установка сетевого соединения с брокером.", + "globalLayerDiagTlsTitle": "TLS-рукопожатие", + "globalLayerDiagTlsDescription": "Согласование защищённого соединения с брокером.", + "globalLayerDiagAuthTitle": "Аутентификация", + "globalLayerDiagAuthDescription": "Проверка имени пользователя и пароля с брокером.", + "globalLayerDiagSubscribeTitle": "Тест подписки", + "globalLayerDiagSubscribeDescription": "Подписка на тестовую тему для проверки доступа на чтение.", + "globalLayerDiagPublishTitle": "Тест публикации", + "globalLayerDiagPublishDescription": "Публикация тестового сообщения для проверки доступа на запись.", + "globalLayerDiagSuggestionCorrectFields": "Исправьте выделенные поля и повторите попытку.", + "globalLayerDiagSuggestionUnexpectedBehavior": "Эти проблемы могут не препятствовать подключению, но способны вызвать непредвиденное поведение.", + "globalLayerDiagConfigValid": "Все поля конфигурации корректны.", + "globalLayerDiagSuggestionValidHostname": "Введите корректное имя хоста брокера.", + "globalLayerDiagSuggestionBothCredentials": "Некоторые брокеры требуют указания как имени пользователя, так и пароля.", + "globalLayerWizardDnsValid": "Имя хоста выглядит корректным: {host}", + "globalLayerWizardTcpReachable": "TCP-подключение к {host}:{port} доступно.", + "globalLayerWizardTlsAccepted": "Параметры TLS-рукопожатия приняты.", + "globalLayerWizardCredentialsAccepted": "Учётные данные предоставлены и приняты.", + "globalLayerWizardAnonymousAccess": "Учётные данные не указаны — используется анонимный доступ.", + "globalLayerWizardSubscribeVerified": "Права на подписку подтверждены.", + "globalLayerWizardPublishVerified": "Права на публикацию подтверждены.", + "globalLayerShareMessagesSubtitle": "Ваши сообщения локального чата сети будут пересылаться на брокер.", + "globalLayerShareTelemetrySubtitle": "Уровень заряда батареи, напряжение и время работы устройства будут публиковаться на брокер.", + "globalLayerAllowInboundSubtitle": "Сообщения от других сетей будут доставляться в ваши локальные каналы.", + "globalLayerBrokerTrust": "Доверие к брокеру", + "globalLayerRunConnectionTest": "Запустить тест подключения", + "globalLayerSkipTestHint": "Вы можете пропустить этот шаг и протестировать позже.", + "globalLayerWizardAllChecksPassed": "Все проверки пройдены", + "globalLayerPassedWithWarnings": "Пройдено с предупреждениями", + "globalLayerSomeChecksFailed": "Некоторые проверки не пройдены", + "globalLayerTestInProgress": "Тест выполняется", + "globalLayerSummaryBrokerSection": "БРОКЕР", + "globalLayerSummaryTopicsSection": "ТЕМЫ", + "globalLayerSummaryPrivacySection": "КОНФИДЕНЦИАЛЬНОСТЬ", + "globalLayerSummaryAddress": "Адрес", + "globalLayerSummaryPort": "Порт", "globalLayerSummaryTls": "TLS", - "globalLayerSummaryTlsEnabled": "Enabled", - "globalLayerSummaryTlsDisabled": "Disabled", - "globalLayerSummaryAuth": "Auth", - "globalLayerSummaryAuthCredentials": "Credentials configured", - "globalLayerSummaryAuthAnonymous": "Anonymous", - "globalLayerSummaryRoot": "Root", - "globalLayerSummaryTopicsEnabled": "Enabled", - "globalLayerSummaryTopicsNone": "None", - "globalLayerSummaryShareMessages": "Share messages", - "globalLayerSummaryShareTelemetry": "Share telemetry", - "globalLayerSummaryInboundGlobal": "Inbound global", - "globalLayerSummaryOn": "ON", - "globalLayerSummaryOff": "OFF", - "globalLayerAllSharingOff": "All sharing is OFF. Your mesh data stays local until you enable sharing.", - "globalLayerNoTlsLabel": "No TLS", - "tapbackPoop": "Poop", - "tapbackQuestion": "Question", - "tapbackExclamation": "Exclamation", - "tapbackHaha": "HaHa", - "tapbackThumbsDown": "Thumbs Down", - "tapbackThumbsUp": "Thumbs Up", - "tapbackHeart": "Heart", - "tapbackWave": "Wave", - "cannedResponseThanks": "Thanks!", - "cannedResponseWaitForMe": "Wait for me", - "cannedResponseImSafe": "I'm safe", - "cannedResponseNeedHelp": "Need help", - "cannedResponseOnMyWay": "On my way", - "cannedResponseNo": "No", - "cannedResponseYes": "Yes", - "cannedResponseOk": "OK", - "deepLinkUnableToOpenLink": "Unable to open link", - "deepLinkInvalidLegalDocumentLink": "Invalid legal document link", - "deepLinkInvalidAetherFlightLink": "Invalid Aether flight link", - "deepLinkInvalidAutomationLink": "Invalid automation link", - "deepLinkInvalidLocationCoordinates": "Invalid location coordinates", - "deepLinkInvalidPostLink": "Invalid post link", - "deepLinkInvalidWidgetLink": "Invalid widget link", - "deepLinkInvalidProfileLink": "Invalid profile link", - "deepLinkSignInToJoinChannel": "Sign in to join this channel", - "deepLinkInvalidInviteLink": "Invalid or incomplete invite link", - "deepLinkInvalidChannelData": "Invalid channel data", - "deepLinkConnectToImportChannel": "Connect a device to import this channel", - "deepLinkUnableToLoadNode": "Unable to load node data", - "deepLinkNodeAddedSuccess": "Node added successfully", - "lifecycleActionCancelled": "Action cancelled", - "lifecycleActionExpiredBackground": "Action expired while app was in background", - "lifecycleActionCancelledBackground": "Action cancelled — app is in background", - "commandErrorCheckInternet": "Check your internet connection", - "commandErrorWaitingConfig": "Waiting for device configuration", - "commandErrorConnectDevice": "Connect your device to use this feature" + "globalLayerSummaryTlsEnabled": "Включён", + "globalLayerSummaryTlsDisabled": "Отключён", + "globalLayerSummaryAuth": "Аутентификация", + "globalLayerSummaryAuthCredentials": "Учётные данные настроены", + "globalLayerSummaryAuthAnonymous": "Анонимно", + "globalLayerSummaryRoot": "Корень", + "globalLayerSummaryTopicsEnabled": "Включены", + "globalLayerSummaryTopicsNone": "Нет", + "globalLayerSummaryShareMessages": "Делиться сообщениями", + "globalLayerSummaryShareTelemetry": "Делиться телеметрией", + "globalLayerSummaryInboundGlobal": "Входящий глобальный", + "globalLayerSummaryOn": "ВКЛ", + "globalLayerSummaryOff": "ВЫКЛ", + "globalLayerAllSharingOff": "Передача данных полностью ВЫКЛЮЧЕНА. Данные вашей сети остаются локальными.", + "globalLayerNoTlsLabel": "Без TLS", + "tapbackPoop": "Какашка", + "tapbackQuestion": "Вопрос", + "tapbackExclamation": "Восклицание", + "tapbackHaha": "ХаХа", + "tapbackThumbsDown": "Не нравится", + "tapbackThumbsUp": "Нравится", + "tapbackHeart": "Сердце", + "tapbackWave": "Привет", + "cannedResponseThanks": "Спасибо!", + "cannedResponseWaitForMe": "Подождите меня", + "cannedResponseImSafe": "Я в безопасности", + "cannedResponseNeedHelp": "Нужна помощь", + "cannedResponseOnMyWay": "Уже иду", + "cannedResponseNo": "Нет", + "cannedResponseYes": "Да", + "cannedResponseOk": "Хорошо", + "deepLinkUnableToOpenLink": "Не удалось открыть ссылку", + "deepLinkInvalidLegalDocumentLink": "Недействительная ссылка на правовой документ", + "deepLinkInvalidAetherFlightLink": "Недействительная ссылка на полёт Aether", + "deepLinkInvalidAutomationLink": "Недействительная ссылка на автоматизацию", + "deepLinkInvalidLocationCoordinates": "Недействительные координаты местоположения", + "deepLinkInvalidPostLink": "Недействительная ссылка на публикацию", + "deepLinkInvalidWidgetLink": "Недействительная ссылка на виджет", + "deepLinkInvalidProfileLink": "Недействительная ссылка на профиль", + "deepLinkSignInToJoinChannel": "Войдите, чтобы присоединиться к этому каналу", + "deepLinkInvalidInviteLink": "Недействительная или неполная ссылка-приглашение", + "deepLinkInvalidChannelData": "Недействительные данные канала", + "deepLinkConnectToImportChannel": "Подключите устройство для импорта этого канала", + "deepLinkUnableToLoadNode": "Не удалось загрузить данные узла", + "deepLinkNodeAddedSuccess": "Узел успешно добавлен", + "lifecycleActionCancelled": "Действие отменено", + "lifecycleActionExpiredBackground": "Действие истекло, пока приложение было в фоне", + "lifecycleActionCancelledBackground": "Действие отменено — приложение в фоновом режиме", + "commandErrorCheckInternet": "Проверьте подключение к интернету", + "commandErrorWaitingConfig": "Ожидание конфигурации устройства", + "commandErrorConnectDevice": "Подключите устройство для использования этой функции" } From 60f6ff8e36c7ca29392e6441349634686e926f8c Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 5 Mar 2026 01:26:49 +0300 Subject: [PATCH 02/11] l10n: add translation for "Shortcut" term in Russian glossary --- docs/GLOSSARY_RU.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/GLOSSARY_RU.md b/docs/GLOSSARY_RU.md index 33cb6bff..1b4529c4 100644 --- a/docs/GLOSSARY_RU.md +++ b/docs/GLOSSARY_RU.md @@ -190,6 +190,7 @@ | Action | Действие | | | Condition | Условие | | | IFTTT | IFTTT | Не переводить — бренд | +| Shortcut | Shortcut | Не переводить - термин без адекватной аналогии на русском | --- From f214c1192bb0d38a2525339e00a4ca4cd9098195 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 5 Mar 2026 01:43:53 +0300 Subject: [PATCH 03/11] =?UTF-8?q?l10n:=20update=20quotation=20marks=20to?= =?UTF-8?q?=20=C2=AB=C2=BB=20for=20consistency=20in=20Russian=20translatio?= =?UTF-8?q?ns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/l10n/app_ru.arb | 92 ++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index f4a1ac21..bfc3c92f 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -24,7 +24,7 @@ "adminProductsDeleteConfirmMessage": "Вы уверены, что хотите безвозвратно удалить этот товар?", "adminProductsDeleteConfirmTitle": "Удалить товар", "adminProductsDeleteMenu": "Удалить", - "adminProductsDeleteMessage": "Вы уверены, что хотите безвозвратно удалить \"{name}\"?\n\nЭто действие нельзя отменить.", + "adminProductsDeleteMessage": "Вы уверены, что хотите безвозвратно удалить «{name}»?\n\nЭто действие нельзя отменить.", "adminProductsDeleteTitle": "Удалить товар", "adminProductsDeleteTooltip": "Удалить", "adminProductsDeleted": "Товар удалён", @@ -107,7 +107,7 @@ "adminSellersDeactivate": "Деактивировать", "adminSellersDeleteConfirm": "Удалить", "adminSellersDeleteDescription": "Безвозвратно удалить этого продавца и деактивировать все его товары. Это действие нельзя отменить.", - "adminSellersDeleteDialogMessage": "Вы уверены, что хотите безвозвратно удалить \"{name}\"?", + "adminSellersDeleteDialogMessage": "Вы уверены, что хотите безвозвратно удалить «{name}»?", "adminSellersDeleteDialogTitle": "Удалить продавца", "adminSellersDeletePermanently": "Удалить продавца навсегда", "adminSellersDeleteProductWarning": "У этого продавца {productCount} товаров. Удаление продавца также удалит все его товары.", @@ -187,7 +187,7 @@ "aetherErrorWithDetails": "Ошибка: {error}", "aetherEmptyMyFlightsSubtitle": "Вы ещё не запланировали рейсов.\nНажмите кнопку выше, чтобы добавить!", "aetherEmptyMyFlightsTitle": "Нет запланированных рейсов", - "aetherEmptySearchSubtitle": "Нет результатов для \"{query}\".\nПопробуйте другой запрос.", + "aetherEmptySearchSubtitle": "Нет результатов для «{query}».\nПопробуйте другой запрос.", "aetherEmptyTagline1": "Рейсов пока нет.\nБудьте первым, кто поделится воздушным путешествием!", "aetherEmptyTagline2": "Отслеживайте узлы Meshtastic на высоте.\nПосмотрите, как далеко достигает ваш сигнал с неба.", "aetherEmptyTagline3": "Соревнуйтесь в таблице лидеров.\nКонтакты на наибольшей дальности занимают верхние строчки.", @@ -537,7 +537,7 @@ "automationActionPlaySound": "Воспроизвести звук оповещения", "automationActionPlayFailed": "Ошибка воспроизведения: {error}", "automationActionPlaySoundFailed": "Не удалось воспроизвести звук: {error}", - "automationActionPlayingSound": "Воспроизведение \"{name}\"...", + "automationActionPlayingSound": "Воспроизведение «{name}»...", "automationActionPlaysAfter": "Воспроизводится после уведомления", "automationActionPreview": "Предпросмотр", "automationActionPrimary": "Основной", @@ -551,9 +551,9 @@ "automationActionSelectSound": "Выбрать звук", "automationActionSendMessage": "Отправить сообщение узлу", "automationActionSendToChannel": "Отправить в канал", - "automationActionShortcutDataInfo": "Данные события (имя узла, аккумулятор, местоположение и т.д.) будут переданы в виде JSON на вход в вашем шортcаte.", - "automationActionShortcutHelpTitle": "Использование шортcатов", - "automationActionShortcutIosNote": "Примечание: приложение «Шортcаты» кратко откроется при срабатывании. Это ограничение iOS.", + "automationActionShortcutDataInfo": "Данные события (имя узла, аккумулятор, местоположение и т. д.) будут переданы во входные данные вашего шортката в формате JSON.", + "automationActionShortcutHelpTitle": "Использование шорткатов", + "automationActionShortcutIosNote": "Примечание: приложение «Шорткаты» кратко откроется при срабатывании. Это ограничение iOS.", "automationActionShortcutKeyBattery": "Уровень аккумулятора % (если доступно)", "automationActionShortcutKeyLatitude": "Широта GPS (если доступно)", "automationActionShortcutKeyLongitude": "Долгота GPS (если доступно)", @@ -563,10 +563,10 @@ "automationActionShortcutKeyTimestamp": "Временная метка события", "automationActionShortcutKeyTrigger": "Тип триггера (nodeOffline и т.д.)", "automationActionShortcutKeysTitle": "Доступные ключи в словаре:", - "automationActionShortcutNameHint": "Введите точное имя шортcата", - "automationActionShortcutNameLabel": "Имя шортcата", - "automationActionShortcutSetup": "Настройка шортcата:", - "automationActionShortcutStep1": "Добавьте действие «Получить словарь из»\nВыберите «Входные данные шортcата»", + "automationActionShortcutNameHint": "Введите точное имя шортката", + "automationActionShortcutNameLabel": "Имя шортката", + "automationActionShortcutSetup": "Настройка шортката:", + "automationActionShortcutStep1": "Добавьте действие «Получить словарь из»\nВыберите «Входные данные шортката»", "automationActionShortcutStep2": "Добавьте действие «Получить значение для»\nУкажите ключ (например, node_name) и выберите «Словарь»", "automationActionShortcutStep3": "Используйте извлечённое значение в ваших действиях\n(например, «Отправить сообщение», «Показать уведомление»)", "automationActionSoundSection": "ЗВУК", @@ -576,7 +576,7 @@ "automationActionTapToChoose": "Нажмите, чтобы выбрать", "automationActionTitleLabel": "Заголовок", "automationActionTo": "КОМУ", - "automationActionTriggerShortcut": "Запустить шортcат iOS", + "automationActionTriggerShortcut": "Запустить шорткат iOS", "automationActionTriggerWebhook": "Вызвать Webhook (IFTTT)", "automationActionUpdateWidget": "Обновить виджет на главном экране", "automationActionVariableHint": "Нажмите на переменные ниже для вставки", @@ -680,10 +680,10 @@ "automationScreenCreatedFromTemplate": "Автоматизация создана из шаблона", "automationScreenDaysAgo": "{count}д назад", "automationScreenDelete": "Удалить", - "automationScreenDeleteMessage": "Вы уверены, что хотите удалить \"{name}\"?", + "automationScreenDeleteMessage": "Вы уверены, что хотите удалить «{name}»?", "automationScreenDeleteTitle": "Удалить автоматизацию", - "automationScreenDeleted": "\"{name}\" удалено", - "automationScreenDeleting": "Удаление \"{name}\"...", + "automationScreenDeleted": "«{name}» удалено", + "automationScreenDeleting": "Удаление «{name}»...", "automationScreenEmptyDescription": "Создавайте автоматизации для автоматического выполнения действий при возникновении событий в вашей mesh-сети.", "automationScreenEmptyTitle": "Автоматизируйте вашу сеть", "automationScreenExecutionLog": "Журнал выполнения", @@ -698,8 +698,8 @@ "automationScreenQuickStartTemplates": "Шаблоны быстрого старта", "automationScreenRetry": "Повторить", "automationScreenRunFailed": "Ошибка запуска: {error}", - "automationScreenRunSuccess": "\"{name}\" выполнено успешно", - "automationScreenRunning": "Выполнение \"{name}\"...", + "automationScreenRunSuccess": "«{name}» выполнено успешно", + "automationScreenRunning": "Выполнение «{name}»...", "automationScreenScanQrCode": "Сканировать QR-код", "automationScreenStartWithTrigger": "Начать с триггера", "automationScreenStartWithTriggerSubtitle": "Выберите событие, которое запускает вашу автоматизацию", @@ -737,7 +737,7 @@ "automationTriggerDescDetectionSensor": "Срабатывает при активации датчика обнаружения", "automationTriggerDescGeofenceEnter": "Срабатывает, когда узел входит в геозону", "automationTriggerDescGeofenceExit": "Срабатывает, когда узел выходит из геозоны", - "automationTriggerDescManual": "Запускается вручную через шортcаты или интерфейс", + "automationTriggerDescManual": "Запускается вручную через шорткаты или интерфейс", "automationTriggerDescMessageContains": "Срабатывает, когда сообщение содержит ключевое слово", "automationTriggerDescMessageReceived": "Срабатывает при получении любого сообщения", "automationTriggerDescNodeOffline": "Срабатывает, когда узел долгое время не отвечает", @@ -792,7 +792,7 @@ "automationValidateKeyword": "Введите ключевое слово для поиска", "automationValidateMessage": "Введите сообщение для отправки", "automationValidateSchedule": "Задайте время расписания", - "automationValidateShortcutName": "Введите имя шортcата", + "automationValidateShortcutName": "Введите имя шортката", "automationValidateTargetNode": "Выберите целевой узел", "automationValidateWebhookEvent": "Введите имя события Webhook", "automationVariableAllVariables": "Все переменные", @@ -1417,7 +1417,7 @@ "fileTransferAttachmentMeta": "{size} · {chunkCount} фрагментов по сети", "fileTransferBinaryFileHint": "Бинарный файл — сохраните, чтобы открыть во внешнем приложении", "fileTransferCancelConfirm": "Отменить передачу", - "fileTransferCancelMessage": "Отменить передачу файла \"{filename}\"? ", + "fileTransferCancelMessage": "Отменить передачу файла «{filename}»?", "fileTransferCancelTitle": "Отменить передачу?", "fileTransferCancelled": "Передача отменена", "fileTransferClearCompleted": "Очистить завершённые", @@ -1439,7 +1439,7 @@ "fileTransferContactsJustNow": "только что", "fileTransferContactsMinutesAgo": "{count}мин назад", "fileTransferContactsNoMatchFilter": "Нет контактов «{filter}»", - "fileTransferContactsNoMatchSearch": "Нет контактов, соответствующих \"{query}\"", + "fileTransferContactsNoMatchSearch": "Нет контактов, соответствующих «{query}»", "fileTransferContactsNoNodes": "Узлов в сети ещё нет", "fileTransferContactsSearchHint": "Поиск контактов", "fileTransferContactsSectionActive": "Активные", @@ -1465,7 +1465,7 @@ "fileTransferCouldNotSaveForSharing": "Не удалось сохранить файл для отправки", "fileTransferCouldNotStart": "Не удалось начать передачу. Убедитесь, что узел подключён, и повторите попытку.", "fileTransferDeleteConfirm": "Удалить", - "fileTransferDeleteMessage": "Удалить \"{filename}\"? Отменить невозможно.", + "fileTransferDeleteMessage": "Удалить «{filename}»? Отменить невозможно.", "fileTransferDeleteTitle": "Удалить передачу?", "fileTransferDeleted": "Удалено: {filename}", "fileTransferDetailsSection": "Детали передачи", @@ -1506,7 +1506,7 @@ "fileTransferPinchToZoom": "Сведите пальцы для масштабирования", "fileTransferPurgeExpired": "Удалить просроченные", "fileTransferRejectConfirm": "Отклонить", - "fileTransferRejectMessage": "Отклонить входящий файл \"{filename}\"? Отправитель будет уведомлён.", + "fileTransferRejectMessage": "Отклонить входящий файл «{filename}»? Отправитель будет уведомлён.", "fileTransferRejectTitle": "Отклонить передачу?", "fileTransferRejected": "Передача отклонена", "fileTransferSearchHint": "Поиск передач", @@ -2000,7 +2000,7 @@ "meshcoreCenter": "Центр", "meshcoreChannelAlreadyExists": "{channelName} уже есть в ваших каналах", "meshcoreChannelCodeCopied": "Код канала скопирован", - "meshcoreChannelCreated": "Канал \"{channelName}\" создан", + "meshcoreChannelCreated": "Канал «{channelName}» создан", "meshcoreChannelNameHint": "Название канала", "meshcoreChannelNameHintGeneral": "general", "meshcoreChannelNameHintHashtag": "например, general", @@ -3811,10 +3811,10 @@ "searchProductsBrowseByCategory": "Обзор по категориям", "searchProductsClear": "Очистить", "searchProductsHint": "Поиск устройств, модулей, антенн...", - "searchProductsNoResults": "Нет результатов по запросу \"{query}\"", + "searchProductsNoResults": "Нет результатов по запросу «{query}»", "searchProductsOutOfStock": "Нет в наличии", "searchProductsRecentSearches": "Недавние поиски", - "searchProductsResultCount": "{count} результатов по запросу \"{query}\"", + "searchProductsResultCount": "{count} результатов по запросу «{query}»", "searchProductsRetry": "Повторить", "searchProductsSearchFailed": "Поиск не удался", "searchProductsTrending": "Популярное", @@ -3829,7 +3829,7 @@ "sellerProfileFoundedStat": "Основан", "sellerProfileGoBack": "Назад", "sellerProfileNoProducts": "Товары ещё не добавлены", - "sellerProfileNoSearchResults": "Нет товаров, соответствующих запросу \"{query}\"", + "sellerProfileNoSearchResults": "Нет товаров, соответствующих запросу «{query}»", "sellerProfileNotFound": "Продавец не найден", "sellerProfileOfficialPartner": "Официальный партнёр", "sellerProfilePartnerDiscount": "Партнёрская скидка", @@ -5899,7 +5899,7 @@ "deepLinkProfileTitle": "@{displayName}", "deepLinkCloudServicesNotAvailable": "Облачные сервисы пока недоступны", "deepLinkErrorLookingUpUser": "Ошибка поиска пользователя: {error}", - "deepLinkUserNotFound": "Пользователь \"@{displayName}\" не найден", + "deepLinkUserNotFound": "Пользователь «@{displayName}» не найден", "blockedRouteDeviceRequired": "Требуется устройство", "blockedRouteConnectDevice": "Подключите устройство для доступа к этому экрану", "blockedRouteDeviceReset": "Устройство сброшено", @@ -5950,7 +5950,7 @@ "remoteAdminNodesAvailable": "{count} доступно", "remoteAdminRequiresPki": "Для удалённого администрирования целевой узел должен иметь ваш публичный ключ в списке Admin Keys.", "remoteAdminNoNodes": "Нет узлов с включённым PKI", - "remoteAdminNoMatchingNodes": "Нет узлов, соответствующих запросу \"{query}\"", + "remoteAdminNoMatchingNodes": "Нет узлов, соответствующих запросу «{query}»", "remoteAdminNodesNeedPki": "Узлам требуется включённое PKI-шифрование\nдля принятия команд удалённого администрирования", "remoteAdminPkiEnabled": "• PKI включено", "contentModerationNotAllowedTitle": "Контент не разрешён", @@ -6185,9 +6185,9 @@ "batteryOptGenericStep1": "Откройте Настройки > Приложения > Socialmesh > Батарея.", "batteryOptGenericStep2": "Выберите «Без ограничений» или «Не оптимизировать».", "batteryOptGenericStep3": "Это позволит Socialmesh поддерживать соединение с сетью Mesh в фоновом режиме.", - "helpCenterNoResultsPrefix": "Ничего ", - "helpCenterNoResultsKeyword": "не найдено", - "helpCenterNoResultsSuffix": " found", + "helpCenterNoResultsPrefix": "", + "helpCenterNoResultsKeyword": "Результатов", + "helpCenterNoResultsSuffix": " не найдено", "helpCenterReadingTime": "{minutes} мин", "helpCenterMoreTours": "+ ещё {count} туров", "helpCenterStepsCount": "{count} шагов", @@ -6323,7 +6323,7 @@ "cannedResponsesReorderTooltip": "Изменить порядок", "cannedResponsesResetToDefaults": "Сбросить к умолчаниям", "cannedResponsesDeleteTitle": "Удалить ответ", - "cannedResponsesDeleteMessage": "Удалить \"{text}\"?", + "cannedResponsesDeleteMessage": "Удалить «{text}»?", "cannedResponsesDeleteConfirm": "Удалить", "cannedResponsesResetTitle": "Сбросить к умолчаниям", "cannedResponsesResetMessage": "Это удалит все пользовательские ответы и восстановит набор по умолчанию.", @@ -6366,7 +6366,7 @@ "rangeTestHowItWorksDescription": "1. Выберите целевой узел для теста дальности\n2. Начните тест для отправки пакетов", "rangeTestSelectTargetNode": "Выбрать целевой узел", "rangeTestSearchNodes": "Поиск узлов…", - "rangeTestNoNodesMatch": "Нет узлов, соответствующих запросу \"{query}\"", + "rangeTestNoNodesMatch": "Нет узлов, соответствующих запросу «{query}»", "themeSettingsTitle": "Настройки темы", "themeSettingsCurrentAccent": "Текущий акцентный цвет", "themeSettingsAccentColor": "АКЦЕНТНЫЙ ЦВЕТ", @@ -6913,9 +6913,9 @@ "ringtoneValidationMissingColons": "Неверный формат: отсутствуют двоеточия. Ожидается name:defaults:notes", "ringtoneValidationInvalidFormat": "Неверный формат: ожидается name:defaults:notes", "ringtoneValidationInvalidDefaults": "Неверные значения по умолчанию: ожидается d=duration, o=octave, b=bpm", - "ringtoneValidationNoNotes": "В RTTTL строке не найдено нот", - "ringtoneValidationInvalidNote": "Неверная нота: \"{note}\"", - "ringtoneValidationNoValidNotes": "Не найдено допустимых нот", + "ringtoneValidationNoNotes": "В RTTTL строке не найдено нот", #TODO: fixit + "ringtoneValidationInvalidNote": "Неверная нота: «{note}»", #TODO: fixit + "ringtoneValidationNoValidNotes": "Не найдено допустимых нот", #TODO: fixit "accountSubTitle": "Аккаунт", "accountSubSectionAccount": "АККАУНТ", "accountSubSectionPremium": "ПРЕМИУМ", @@ -7791,10 +7791,10 @@ "globalLayerFixCheckFirst": "Сначала исправьте {checkName}, затем повторно запустите диагностику.", "globalLayerNoHostnameConfigured": "Имя хоста не настроено.", "globalLayerEnterBrokerHostname": "Введите имя хоста брокера в мастере настройки.", - "globalLayerHostnameResolved": "Имя хоста \"{host}\" успешно разрешено.", + "globalLayerHostnameResolved": "Имя хоста «{host}» успешно разрешено.", "globalLayerTcpConnectionEstablished": "TCP-соединение с {host}:{port} установлено.", "globalLayerTlsHandshakeCompleted": "TLS-рукопожатие успешно завершено.", - "globalLayerAuthenticatedAs": "Выполнена аутентификация как \"{username}\".", + "globalLayerAuthenticatedAs": "Выполнен вход как «{username}».", "globalLayerAnonymousConnection": "Анонимное подключение принято брокером.", "globalLayerSubscribedToTopics": "Выполнена подписка на {count} тем успешно.", "globalLayerSubscribeCapabilityVerified": "Возможность подписки подтверждена (темы не включены).", @@ -7861,9 +7861,9 @@ "globalLayerSubscriptionsHeader": "Подписки", "globalLayerAddButton": "Добавить", "globalLayerRemoveTopicTitle": "Удалить тему", - "globalLayerRemoveTopicMessage": "Удалить \"{label}\" ({topic}) из ваших подписок? Вы сможете добавить её позже.", + "globalLayerRemoveTopicMessage": "Удалить «{label}» ({topic}) из ваших подписок? Вы сможете добавить её позже.", "globalLayerRemoveConfirm": "Удалить", - "globalLayerRemovedSnackbar": "Удалено \"{label}\"", + "globalLayerRemovedSnackbar": "Удалено «{label}»", "globalLayerUndo": "Отменить", "globalLayerFailedToLoadTopics": "Не удалось загрузить темы: {error}", "globalLayerNoTopicSubscriptions": "Нет подписок на темы", @@ -8191,7 +8191,7 @@ "helpCreateImageBubble": "Нажмите на **значок изображения**, чтобы прикрепить фото. Изображения загружаются через облако, когда есть интернет — по mesh передаётся только ссылка.", "helpCreateLocationBubble": "Нажмите на **метку местоположения**, чтобы прикрепить текущую GPS-позицию устройства. Ваше местоположение видно всем, кто получит сигнал.", "helpCreateTtlBubble": "**Значок таймера** задаёт TTL — как долго сигнал остаётся активным. Выбирайте от нескольких минут до нескольких часов.", - "helpCreateIntentBubble": "Выберите **Намерение присутствия**, чтобы сообщить сети, чем вы занимаетесь — исследуете, наблюдаете, нуждаетесь в помощи и т.д.", + "helpCreateIntentBubble": "Выберите **Намерение присутствия**, чтобы сообщить сети, чем вы занимаетесь — исследуете, наблюдаете, нуждаетесь в помощи и т.д.", # TODO: fixit "helpCreateStatusBubble": "Поле **краткого статуса** — это одна строка, которая отображается как подпись к вашему сигналу в ленте.", "helpCreateSubmitBubble": "Когда будете готовы, нажмите **Транслировать**! Ваш сигнал распространится по mesh-сети через радио. Он доступен всем в пределах досягаемости!", "helpDetailIntroBubble": "Это экран **подробностей сигнала**. Здесь можно прочитать полный текст, увидеть, откуда он пришёл, и ответить!", @@ -8507,10 +8507,10 @@ "automationErrorWebhookFailed": "Запрос Webhook не удался — проверьте подключение к сети", "automationErrorSendMsgFailed": "Не удалось отправить сообщение", "automationErrorSendChannelFailed": "Не удалось отправить в канал", - "automationErrorShortcutsIosOnly": "Шортcаты доступны только на iOS", - "automationErrorNoShortcutName": "Имя шортcата не указано", - "automationErrorShortcutLaunchFailed": "Не удалось запустить шортcат \"{name}\"", - "automationErrorShortcutRunFailed": "Не удалось выполнить шортcат: {error}", + "automationErrorShortcutsIosOnly": "Шорткаты доступны только на iOS", + "automationErrorNoShortcutName": "Имя шортката не указано", + "automationErrorShortcutLaunchFailed": "Не удалось запустить шорткат «{name}»", + "automationErrorShortcutRunFailed": "Не удалось выполнить шорткат: {error}", "automationErrorGlyphNotAvailable": "Интерфейс подсветки недоступен", "automationErrorGlyphPatternFailed": "Не удалось отобразить паттерн подсветки: {error}", "automationTemplateLowBatteryDesc": "Уведомить, когда уровень аккумулятора узла падает ниже 20%", From 53d88428d4186e6be28c966ea1014cedcd811718 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 5 Mar 2026 01:59:38 +0300 Subject: [PATCH 04/11] l10n: update translations for "Shortcut" terminology and improve consistency in Russian language usage --- docs/GLOSSARY_RU.md | 4 ++++ lib/l10n/app_ru.arb | 30 +++++++++++++++--------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/docs/GLOSSARY_RU.md b/docs/GLOSSARY_RU.md index 1b4529c4..ccd81d22 100644 --- a/docs/GLOSSARY_RU.md +++ b/docs/GLOSSARY_RU.md @@ -250,6 +250,10 @@ - Форма обращения: **«вы»** (с маленькой буквы, формально) - Примеры: «Ваш профиль», «Вы уверены?», «Вам отправлено сообщение» +## Орфография и сокращения + +- `и т.д.`: пишем именно так (без пробела). + ## Множественные формы (ICU) ``` diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index bfc3c92f..789d49be 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -551,9 +551,9 @@ "automationActionSelectSound": "Выбрать звук", "automationActionSendMessage": "Отправить сообщение узлу", "automationActionSendToChannel": "Отправить в канал", - "automationActionShortcutDataInfo": "Данные события (имя узла, аккумулятор, местоположение и т. д.) будут переданы во входные данные вашего шортката в формате JSON.", - "automationActionShortcutHelpTitle": "Использование шорткатов", - "automationActionShortcutIosNote": "Примечание: приложение «Шорткаты» кратко откроется при срабатывании. Это ограничение iOS.", + "automationActionShortcutDataInfo": "Данные события (имя узла, аккумулятор, местоположение и т.д.) будут переданы как JSON во входные данные Shortcut.", + "automationActionShortcutHelpTitle": "Использование Shortcuts", + "automationActionShortcutIosNote": "Примечание: приложение «Shortcuts» кратко откроется при срабатывании. Это ограничение iOS.", "automationActionShortcutKeyBattery": "Уровень аккумулятора % (если доступно)", "automationActionShortcutKeyLatitude": "Широта GPS (если доступно)", "automationActionShortcutKeyLongitude": "Долгота GPS (если доступно)", @@ -563,10 +563,10 @@ "automationActionShortcutKeyTimestamp": "Временная метка события", "automationActionShortcutKeyTrigger": "Тип триггера (nodeOffline и т.д.)", "automationActionShortcutKeysTitle": "Доступные ключи в словаре:", - "automationActionShortcutNameHint": "Введите точное имя шортката", - "automationActionShortcutNameLabel": "Имя шортката", - "automationActionShortcutSetup": "Настройка шортката:", - "automationActionShortcutStep1": "Добавьте действие «Получить словарь из»\nВыберите «Входные данные шортката»", + "automationActionShortcutNameHint": "Введите точное имя Shortcut", + "automationActionShortcutNameLabel": "Имя Shortcut", + "automationActionShortcutSetup": "Настройка Shortcut:", + "automationActionShortcutStep1": "Добавьте действие «Получить словарь из»\nВыберите «Входные данные Shortcut»", "automationActionShortcutStep2": "Добавьте действие «Получить значение для»\nУкажите ключ (например, node_name) и выберите «Словарь»", "automationActionShortcutStep3": "Используйте извлечённое значение в ваших действиях\n(например, «Отправить сообщение», «Показать уведомление»)", "automationActionSoundSection": "ЗВУК", @@ -576,7 +576,7 @@ "automationActionTapToChoose": "Нажмите, чтобы выбрать", "automationActionTitleLabel": "Заголовок", "automationActionTo": "КОМУ", - "automationActionTriggerShortcut": "Запустить шорткат iOS", + "automationActionTriggerShortcut": "Запустить iOS Shortcut", "automationActionTriggerWebhook": "Вызвать Webhook (IFTTT)", "automationActionUpdateWidget": "Обновить виджет на главном экране", "automationActionVariableHint": "Нажмите на переменные ниже для вставки", @@ -737,7 +737,7 @@ "automationTriggerDescDetectionSensor": "Срабатывает при активации датчика обнаружения", "automationTriggerDescGeofenceEnter": "Срабатывает, когда узел входит в геозону", "automationTriggerDescGeofenceExit": "Срабатывает, когда узел выходит из геозоны", - "automationTriggerDescManual": "Запускается вручную через шорткаты или интерфейс", + "automationTriggerDescManual": "Запускается вручную через Shortcuts или интерфейс", "automationTriggerDescMessageContains": "Срабатывает, когда сообщение содержит ключевое слово", "automationTriggerDescMessageReceived": "Срабатывает при получении любого сообщения", "automationTriggerDescNodeOffline": "Срабатывает, когда узел долгое время не отвечает", @@ -792,7 +792,7 @@ "automationValidateKeyword": "Введите ключевое слово для поиска", "automationValidateMessage": "Введите сообщение для отправки", "automationValidateSchedule": "Задайте время расписания", - "automationValidateShortcutName": "Введите имя шортката", + "automationValidateShortcutName": "Введите имя Shortcut", "automationValidateTargetNode": "Выберите целевой узел", "automationValidateWebhookEvent": "Введите имя события Webhook", "automationVariableAllVariables": "Все переменные", @@ -2369,7 +2369,7 @@ "messagingSettings": "Настройки", "messagingSourceAutomation": "Автоматизация", "messagingSourceNotification": "Уведомление", - "messagingSourceShortcut": "Ярлык", + "messagingSourceShortcut": "Shortcut", "messagingSourceTapback": "Реакция", "messagingStartConversation": "Начните разговор", "messagingUnknownNode": "Неизвестный узел", @@ -8507,10 +8507,10 @@ "automationErrorWebhookFailed": "Запрос Webhook не удался — проверьте подключение к сети", "automationErrorSendMsgFailed": "Не удалось отправить сообщение", "automationErrorSendChannelFailed": "Не удалось отправить в канал", - "automationErrorShortcutsIosOnly": "Шорткаты доступны только на iOS", - "automationErrorNoShortcutName": "Имя шортката не указано", - "automationErrorShortcutLaunchFailed": "Не удалось запустить шорткат «{name}»", - "automationErrorShortcutRunFailed": "Не удалось выполнить шорткат: {error}", + "automationErrorShortcutsIosOnly": "Shortcuts доступны только на iOS", + "automationErrorNoShortcutName": "Имя Shortcut не указано", + "automationErrorShortcutLaunchFailed": "Не удалось запустить Shortcut «{name}»", + "automationErrorShortcutRunFailed": "Не удалось выполнить Shortcut: {error}", "automationErrorGlyphNotAvailable": "Интерфейс подсветки недоступен", "automationErrorGlyphPatternFailed": "Не удалось отобразить паттерн подсветки: {error}", "automationTemplateLowBatteryDesc": "Уведомить, когда уровень аккумулятора узла падает ниже 20%", From 0a66d6d74cb6d5ea4a5dd44200e65a770cf2c2b9 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 5 Mar 2026 02:07:44 +0300 Subject: [PATCH 05/11] =?UTF-8?q?l10n:=20update=20translation=20of=20"Priv?= =?UTF-8?q?ate=20Key"=20to=20"=D0=9F=D1=80=D0=B8=D0=B2=D0=B0=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BA=D0=BB=D1=8E=D1=87"=20for=20consistency=20?= =?UTF-8?q?in=20Russian=20language=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/GLOSSARY_RU.md | 2 +- lib/l10n/app_ru.arb | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/GLOSSARY_RU.md b/docs/GLOSSARY_RU.md index ccd81d22..281dc805 100644 --- a/docs/GLOSSARY_RU.md +++ b/docs/GLOSSARY_RU.md @@ -135,7 +135,7 @@ |---------|---------|------------| | Encryption | Шифрование | | | Public Key | Публичный ключ | | -| Private Key | Закрытый ключ | | +| Private Key | Приватный ключ | | | Admin Keys | Ключи администратора | | | Channel Key | Ключ канала | | | PSK | PSK | Не переводить — Pre-Shared Key | diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 789d49be..33c992ac 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -7376,7 +7376,7 @@ "securityConfigPublicKey": "Открытый ключ", "securityConfigNoKeySet": "Ключ не задан", "securityConfigPublicKeyDesc": "Ваш открытый ключ отправляется другим узлам для защищённого обмена сообщениями", - "securityConfigPrivateKey": "Закрытый ключ", + "securityConfigPrivateKey": "Приватный ключ", "securityConfigPrivateKeyHint": "32-байтовый ключ в кодировке Base64", "securityConfigPrivateKeyDesc": "Используется для вычисления общего секрета с удалёнными устройствами", "securityConfigRegenKeyPair": "Обновить пару ключей", @@ -7384,7 +7384,7 @@ "securityConfigGenerate": "Сгенерировать", "securityConfigRegenDesc": "Создать новую пару ключей (открытый ключ будет получен автоматически)", "securityConfigKeyBackup": "Резервная копия ключа", - "securityConfigBackupDesc": "Создайте резервную копию закрытого ключа в защищённом хранилище для восстановления. Ключи хранятся в связке ключей устройства с включённой синхронизацией iCloud.", + "securityConfigBackupDesc": "Создайте резервную копию приватного ключа в защищённом хранилище для восстановления. Ключи хранятся в связке ключей устройства с включённой синхронизацией iCloud.", "securityConfigBackupBtn": "Создать копию", "securityConfigRestoreBtn": "Восстановить", "securityConfigDeleteBackupTooltip": "Удалить резервную копию", @@ -7403,19 +7403,19 @@ "securityConfigAdminChannelSubtitle": "Разрешить удалённое администрирование через канал администратора", "securityConfigWarning": "Отключение последовательной консоли или включение управляемого режима может затруднить восстановление устройства. Убедитесь, что понимаете последствия, прежде чем вносить изменения.", "securityConfigDeleteBackupTitle": "Удалить резервную копию?", - "securityConfigDeleteBackupMsg": "Это необратимо удалит резервную копию закрытого ключа из защищённого хранилища.", + "securityConfigDeleteBackupMsg": "Это необратимо удалит резервную копию приватного ключа из защищённого хранилища.", "securityConfigDeleteBtn": "Удалить", "securityConfigNewKeyPairGenerated": "Создана новая пара ключей", "securityConfigKeyGenFailed": "Не удалось сгенерировать ключ: {error}", "securityConfigSaved": "Конфигурация безопасности сохранена", "securityConfigSaveFailed": "Не удалось сохранить: {error}", - "securityConfigInvalidPrivateKey": "Неверный формат закрытого ключа", + "securityConfigInvalidPrivateKey": "Неверный формат приватного ключа", "securityConfigInvalidAdminKey": "Неверный формат ключа администратора", "securityConfigNoDevice": "Нет подключённого устройства", - "securityConfigBackedUp": "Закрытый ключ сохранён в защищённом хранилище", + "securityConfigBackedUp": "Приватный ключ сохранён в защищённом хранилище", "securityConfigBackupFailed": "Не удалось создать резервную копию ключа: {error}", "securityConfigNoBackupFound": "Резервная копия для этого устройства не найдена", - "securityConfigRestored": "Закрытый ключ восстановлен из резервной копии", + "securityConfigRestored": "Приватный ключ восстановлен из резервной копии", "securityConfigRestoreFailed": "Не удалось восстановить ключ: {error}", "securityConfigBackupDeleted": "Резервная копия удалена", "securityConfigDeleteBackupFailed": "Не удалось удалить резервную копию: {error}", From 40f089764ee8c15e9736fc20a239dac81bc17b2c Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 5 Mar 2026 02:14:14 +0300 Subject: [PATCH 06/11] l10n: add TODO list for Russian localization improvements --- .gitignore | 1 + docs/TODO_RU.md | 11 +++++++++++ lib/l10n/app_ru.arb | 8 ++++---- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 docs/TODO_RU.md diff --git a/.gitignore b/.gitignore index 3948a161..123080ac 100644 --- a/.gitignore +++ b/.gitignore @@ -132,6 +132,7 @@ assets/widget_templates/*.json !/docs/BACKEND.md !/docs/RELEASING.md !/docs/GLOSSARY*.md +!/docs/TODO_*.md # Scripts dependencies /scripts/node_modules/ diff --git a/docs/TODO_RU.md b/docs/TODO_RU.md new file mode 100644 index 00000000..99f23373 --- /dev/null +++ b/docs/TODO_RU.md @@ -0,0 +1,11 @@ +# TODO (RU локализация) + +Сюда перенесены TODO из `lib/l10n/app_ru.arb` (удалены из ARB, чтобы файл оставался валидным JSON/ARB). + +## Проверить/улучшить переводы + +- `ringtoneValidationNoNotes` — сверить формулировку с английской строкой “No notes found in RTTTL string”. +- `ringtoneValidationInvalidNote` — сверить формат кавычек/пунктуацию с английской строкой “Invalid note: \"{note}\"”. +- `ringtoneValidationNoValidNotes` — сверить формулировку с английской строкой “No valid notes found”. +- `helpCreateIntentBubble` — в EN есть доп. фраза “It adds context without extra words.”; решить, нужно ли добавить аналог в RU. + diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 33c992ac..d1c507dc 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -6913,9 +6913,9 @@ "ringtoneValidationMissingColons": "Неверный формат: отсутствуют двоеточия. Ожидается name:defaults:notes", "ringtoneValidationInvalidFormat": "Неверный формат: ожидается name:defaults:notes", "ringtoneValidationInvalidDefaults": "Неверные значения по умолчанию: ожидается d=duration, o=octave, b=bpm", - "ringtoneValidationNoNotes": "В RTTTL строке не найдено нот", #TODO: fixit - "ringtoneValidationInvalidNote": "Неверная нота: «{note}»", #TODO: fixit - "ringtoneValidationNoValidNotes": "Не найдено допустимых нот", #TODO: fixit + "ringtoneValidationNoNotes": "В RTTTL строке не найдено нот", + "ringtoneValidationInvalidNote": "Неверная нота: «{note}»", + "ringtoneValidationNoValidNotes": "Не найдено допустимых нот", "accountSubTitle": "Аккаунт", "accountSubSectionAccount": "АККАУНТ", "accountSubSectionPremium": "ПРЕМИУМ", @@ -8191,7 +8191,7 @@ "helpCreateImageBubble": "Нажмите на **значок изображения**, чтобы прикрепить фото. Изображения загружаются через облако, когда есть интернет — по mesh передаётся только ссылка.", "helpCreateLocationBubble": "Нажмите на **метку местоположения**, чтобы прикрепить текущую GPS-позицию устройства. Ваше местоположение видно всем, кто получит сигнал.", "helpCreateTtlBubble": "**Значок таймера** задаёт TTL — как долго сигнал остаётся активным. Выбирайте от нескольких минут до нескольких часов.", - "helpCreateIntentBubble": "Выберите **Намерение присутствия**, чтобы сообщить сети, чем вы занимаетесь — исследуете, наблюдаете, нуждаетесь в помощи и т.д.", # TODO: fixit + "helpCreateIntentBubble": "Выберите **Намерение присутствия**, чтобы сообщить сети, чем вы занимаетесь — исследуете, наблюдаете, нуждаетесь в помощи и т.д.", "helpCreateStatusBubble": "Поле **краткого статуса** — это одна строка, которая отображается как подпись к вашему сигналу в ленте.", "helpCreateSubmitBubble": "Когда будете готовы, нажмите **Транслировать**! Ваш сигнал распространится по mesh-сети через радио. Он доступен всем в пределах досягаемости!", "helpDetailIntroBubble": "Это экран **подробностей сигнала**. Здесь можно прочитать полный текст, увидеть, откуда он пришёл, и ответить!", From 870f49fb11b5a8a6a440277ca6480585a771e3d9 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Fri, 6 Mar 2026 05:12:59 +0300 Subject: [PATCH 07/11] =?UTF-8?q?l10n:=20update=20translation=20of=20"Node?= =?UTF-8?q?"=20and=20"Nodes"=20to=20"=D0=9D=D0=BE=D0=B4=D0=B0"=20and=20"?= =?UTF-8?q?=D0=9D=D0=BE=D0=B4=D1=8B"=20for=20consistency=20in=20Russian=20?= =?UTF-8?q?language=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/GLOSSARY_RU.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/GLOSSARY_RU.md b/docs/GLOSSARY_RU.md index 281dc805..67458d4c 100644 --- a/docs/GLOSSARY_RU.md +++ b/docs/GLOSSARY_RU.md @@ -11,8 +11,8 @@ |---------|---------|------------| | Mesh (brand) | Mesh | Не переводить — название продукта | | Mesh (network) | сеть / сеть Mesh | В общем смысле — «сеть» | -| Node | Узел | Устройство в сети | -| Nodes | Узлы | | +| Node | Нода | Устройство в сети | +| Nodes | Ноды | | | Signal | Сигнал | Эфемерная трансляция в сети | | Signals | Сигналы | | | Channel | Канал | Логический канал связи | From 8571aeec93417d8dfc4aaadaa991926be0bd669c Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Fri, 6 Mar 2026 05:24:08 +0300 Subject: [PATCH 08/11] =?UTF-8?q?i18n(lib/l10n):=20update=20Russian=20tran?= =?UTF-8?q?slations=20for=20consistency=20=20-=20replace=20"=D1=83=D0=B7?= =?UTF-8?q?=D0=B5=D0=BB"=20with=20"=D0=BD=D0=BE=D0=B4=D0=B0"=20to=20mainta?= =?UTF-8?q?in=20terminology=20consistency=20-=20correct=20various=20occurr?= =?UTF-8?q?ences=20of=20"=D1=83=D0=B7=D0=B5=D0=BB"=20to=20"=D0=BD=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0"=20across=20multiple=20sections=20to=20reflect=20t?= =?UTF-8?q?he=20terminology=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/l10n/app_ru.arb | 1092 +++++++++++++++++++++---------------------- 1 file changed, 546 insertions(+), 546 deletions(-) diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index d1c507dc..42cc8618 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -163,7 +163,7 @@ "aetherDetailGroundSpeed": "Путевая скорость", "aetherDetailHeading": "Курс", "aetherDetailLivePosition": "Позиция в реальном времени", - "aetherDetailNode": "Узел", + "aetherDetailNode": "Нода", "aetherDetailNotes": "Заметки", "aetherDetailOperator": "Оператор", "aetherDetailPositionUnavailable": "Данные о позиции недоступны", @@ -176,11 +176,11 @@ "aetherDetailShareCopied": "Ссылка на рейс скопирована в буфер обмена", "aetherDetailShareError": "Не удалось поделиться рейсом: {error}", "aetherDetailShareTooltip": "Поделиться рейсом", - "aetherDetailUnknownNode": "Неизвестный узел", + "aetherDetailUnknownNode": "Неизвестная нода", "aetherDetailUpdated": "Обновлено {time}", "aetherDuplicateReport": "Вы уже сообщали об этом рейсе", "aetherEmptyActionSchedule": "Запланировать рейс", - "aetherEmptyActiveSubtitle": "Нет узлов Meshtastic в воздухе.\nБудьте первым, кто запланирует полёт!", + "aetherEmptyActiveSubtitle": "Нет нод Meshtastic в воздухе.\nБудьте первым, кто запланирует полёт!", "aetherEmptyActiveTitle": "Нет активных рейсов", "aetherEmptyAllSubtitle": "Рейсов пока нет.\nБудьте первым, кто поделится своим путешествием!", "aetherEmptyAllTitle": "Рейсы не найдены", @@ -189,7 +189,7 @@ "aetherEmptyMyFlightsTitle": "Нет запланированных рейсов", "aetherEmptySearchSubtitle": "Нет результатов для «{query}».\nПопробуйте другой запрос.", "aetherEmptyTagline1": "Рейсов пока нет.\nБудьте первым, кто поделится воздушным путешествием!", - "aetherEmptyTagline2": "Отслеживайте узлы Meshtastic на высоте.\nПосмотрите, как далеко достигает ваш сигнал с неба.", + "aetherEmptyTagline2": "Отслеживайте ноды Meshtastic на высоте.\nПосмотрите, как далеко достигает ваш сигнал с неба.", "aetherEmptyTagline3": "Соревнуйтесь в таблице лидеров.\nКонтакты на наибольшей дальности занимают верхние строчки.", "aetherEmptyTagline4": "Запланируйте следующий рейс.\nУкажите аэропорты вылета и прилёта.", "aetherEmptyTitleKeyword": "рейсов", @@ -209,11 +209,11 @@ "aetherInfoGroundStations": "Наземные станции следят за вашим сигналом", "aetherInfoLoraRange": "На высоте 35 000 футов LoRa может достигать 400+ км!", "aetherInfoReceptions": "Сообщайте о приёмах и устанавливайте рекорды дальности!", - "aetherInfoSchedule": "Запланируйте рейс со своим узлом", - "aetherInfoTagline": "Отслеживайте узлы Meshtastic на высоте!", + "aetherInfoSchedule": "Запланируйте рейс со своей нодой", + "aetherInfoTagline": "Отслеживайте ноды Meshtastic на высоте!", "aetherInfoTitle": "Aether", "aetherLeaderboardEmpty": "Таблица лидеров пуста", - "aetherLeaderboardEmptySubtitle": "Будьте первым, кто сообщит о приёме сигнала с воздушного узла, и займите первое место!", + "aetherLeaderboardEmptySubtitle": "Будьте первым, кто сообщит о приёме сигнала с воздушной ноды, и займите первое место!", "aetherLeaderboardError": "Ошибка загрузки таблицы лидеров", "aetherLeaderboardErrorSubtitle": "Потяните вниз для обновления и повторите попытку.", "aetherLeaderboardSubtitle": "Глобальный рейтинг по дальности приёма", @@ -239,15 +239,15 @@ "aetherReportFlightEnded": "Этот рейс завершён", "aetherReportLocationDetected": "Местоположение определено автоматически", "aetherReportLocationUnavailable": "Местоположение недоступно", - "aetherReportNodeNotDetected": "Узел рейса не обнаружен в вашей mesh-сети", - "aetherReportNotOnMesh": "Узел этого рейса не находится в вашей mesh-сети. Сообщить о приёме можно только тогда, когда узел виден вашему устройству.", + "aetherReportNodeNotDetected": "Нода рейса не обнаружена в вашей mesh-сети", + "aetherReportNotOnMesh": "Нода этого рейса не находится в вашей mesh-сети. Сообщить о приёме можно только тогда, когда нода видна вашему устройству.", "aetherReportNotesHint": "Оборудование, антенна, описание места...", "aetherReportNotesLabel": "Заметки", "aetherReportRemoveNotes": "Удалить", "aetherReportRssiLabel": "RSSI ", "aetherReportSnrLabel": "SNR ", "aetherReportSubmit": "Отправить отчёт", - "aetherReportSubtitle": "Я принял рейс {flightNumber} на своём узле!", + "aetherReportSubtitle": "Я принял рейс {flightNumber} на своей ноде!", "aetherReportSuccess": "Приём сигнала зафиксирован!", "aetherReportTitle": "Сообщить о приёме", "aetherScheduleAlreadyValidatedTooltip": "Уже подтверждён", @@ -301,7 +301,7 @@ "aetherScheduleSwapTooltip": "Поменять аэропорты местами", "aetherScheduleTimeLabel": "Время", "aetherScheduleTip1": "По возможности занимайте место у окна", - "aetherScheduleTip2": "Держите узел рядом с окном во время полёта", + "aetherScheduleTip2": "Держите ноду рядом с окном во время полёта", "aetherScheduleTip3": "Чем выше мощность TX, тем больше дальность", "aetherScheduleTip4": "Сообщите другим свою частоту/регион", "aetherScheduleTipsTitle": "Советы для лучшего приёма", @@ -316,7 +316,7 @@ "aetherSearchEmptyTitle": "Активных рейсов не найдено", "aetherSearchError": "Ошибка поиска. Повторите попытку.", "aetherSearchFlightNumberHint": "Номер рейса (например, UA123)", - "aetherSearchHint": "Поиск рейсов, аэропортов, узлов...", + "aetherSearchHint": "Поиск рейсов, аэропортов, нод...", "aetherSearchIdleSubtitle": "Введите callsign и нажмите «Найти»,\nчтобы найти рейсы в воздухе", "aetherSearchIdleTitle": "Поиск активных рейсов", "aetherSearchOnGround": "На земле", @@ -390,8 +390,8 @@ "arNodeDetailRssi": "RSSI", "arNodeDetailSnr": "SNR", "arNodeDetailSpeed": "Скорость", - "arNodeDetailUnknownNode": "Неизвестный узел", - "arNodeNoGpsPosition": "Узел не имеет GPS-координат", + "arNodeDetailUnknownNode": "Неизвестная нода", + "arNodeNoGpsPosition": "Нода не имеет GPS-координат", "arRetry": "ПОВТОРИТЬ", "arSettingsAlerts": "Оповещения", "arSettingsAltimeter": "Альтиметр", @@ -406,7 +406,7 @@ "arSettingsMinDistanceLabel": "100 м", "arSettingsMinimal": "Минимальный", "arSettingsNodeFilters": "ФИЛЬТРЫ УЗЛОВ", - "arSettingsShowOfflineNodes": "Показывать офлайн-узлы", + "arSettingsShowOfflineNodes": "Показывать офлайн-ноды", "arSettingsTactical": "Расширенный", "arSettingsViewMode": "РЕЖИМ ПРОСМОТРА", "arTouchLocked": "Касание заблокировано", @@ -547,19 +547,19 @@ "automationActionSearchSounds": "Поиск звуков...", "automationActionSelectChannel": "Выбрать канал", "automationActionSelectChannelTitle": "Выбор канала", - "automationActionSelectNodePlaceholder": "Выберите узел", + "automationActionSelectNodePlaceholder": "Выберите ноду", "automationActionSelectSound": "Выбрать звук", - "automationActionSendMessage": "Отправить сообщение узлу", + "automationActionSendMessage": "Отправить сообщение ноде", "automationActionSendToChannel": "Отправить в канал", - "automationActionShortcutDataInfo": "Данные события (имя узла, аккумулятор, местоположение и т.д.) будут переданы как JSON во входные данные Shortcut.", + "automationActionShortcutDataInfo": "Данные события (имя ноды, аккумулятор, местоположение и т.д.) будут переданы как JSON во входные данные Shortcut.", "automationActionShortcutHelpTitle": "Использование Shortcuts", "automationActionShortcutIosNote": "Примечание: приложение «Shortcuts» кратко откроется при срабатывании. Это ограничение iOS.", "automationActionShortcutKeyBattery": "Уровень аккумулятора % (если доступно)", "automationActionShortcutKeyLatitude": "Широта GPS (если доступно)", "automationActionShortcutKeyLongitude": "Долгота GPS (если доступно)", "automationActionShortcutKeyMessage": "Текст сообщения (если применимо)", - "automationActionShortcutKeyNodeName": "Имя узла", - "automationActionShortcutKeyNodeNum": "Номер узла", + "automationActionShortcutKeyNodeName": "Имя ноды", + "automationActionShortcutKeyNodeNum": "Номер ноды", "automationActionShortcutKeyTimestamp": "Временная метка события", "automationActionShortcutKeyTrigger": "Тип триггера (nodeOffline и т.д.)", "automationActionShortcutKeysTitle": "Доступные ключи в словаре:", @@ -592,15 +592,15 @@ "automationCategoryLocation": "Местоположение", "automationCategoryManual": "Вручную", "automationCategoryMessages": "Сообщения", - "automationCategoryNodeStatus": "Статус узла", + "automationCategoryNodeStatus": "Статус ноды", "automationCategorySensors": "Датчики", "automationCategorySignal": "Сигнал", "automationCategoryTime": "Время", "automationConditionBatteryAbove": "Аккумулятор выше порогового значения", "automationConditionBatteryBelow": "Аккумулятор ниже порогового значения", "automationConditionDayOfWeek": "В определённые дни", - "automationConditionNodeOffline": "Узел неактивен", - "automationConditionNodeOnline": "Узел активен", + "automationConditionNodeOffline": "Нода неактивна", + "automationConditionNodeOnline": "Нода активна", "automationConditionOutsideGeofence": "За пределами геозоны", "automationConditionTimeRange": "В течение временного диапазона", "automationConditionWithinGeofence": "В пределах геозоны", @@ -610,7 +610,7 @@ "automationEditorDeleteError": "Не удалось удалить автоматизацию", "automationEditorDeleteTooltip": "Удалить", "automationEditorDescBatteryLow": "Срабатывает, когда уровень аккумулятора падает ниже {threshold}%", - "automationEditorDescSilent": "Оповещение, если нет активности от узла в течение {minutes} минут", + "automationEditorDescSilent": "Оповещение, если нет активности от ноды в течение {minutes} минут", "automationEditorDescriptionHint": "Что делает эта автоматизация?", "automationEditorDescriptionLabel": "Описание (необязательно)", "automationEditorInvalidVars": "Недопустимые переменные: {vars}", @@ -631,7 +631,7 @@ "automationEditorValidateActions": "Добавьте хотя бы одно действие", "automationEditorValidateName": "Введите название для этой автоматизации", "automationEditorWhen": "КОГДА", - "automationFlowAddNode": "Добавить узел", + "automationFlowAddNode": "Добавить ноду", "automationFlowCompilationIssues": "Проблемы компиляции", "automationFlowCreate": "Создать", "automationFlowCreated": "Автоматизация создана", @@ -644,7 +644,7 @@ "automationFlowNameHint": "Название потока...", "automationFlowNewTitle": "Новый поток", "automationFlowNoCompilation": "Из этого графа не удалось скомпилировать ни одной автоматизации", - "automationFlowNodesCount": "{count} узлов", + "automationFlowNodesCount": "{count} нод", "automationFlowSave": "Сохранить", "automationFlowSaveError": "Не удалось сохранить автоматизацию", "automationFlowToolbarAdd": "Добавить", @@ -714,7 +714,7 @@ "automationShareSubject": "Автоматизация Socialmesh: {name}", "automationShareTitle": "Поделиться автоматизацией", "automationTriggerAnyChannel": "Любой канал", - "automationTriggerAnyNode": "Любой узел", + "automationTriggerAnyNode": "Любая нода", "automationTriggerBatteryFull": "Аккумулятор полностью заряжен", "automationTriggerBatteryLow": "Уровень аккумулятора падает ниже порога", "automationTriggerBatteryThreshold": "Пороговый уровень аккумулятора", @@ -735,15 +735,15 @@ "automationTriggerDescBatteryLow": "Срабатывает, когда уровень аккумулятора падает ниже порога", "automationTriggerDescChannelActivity": "Срабатывает при активности на канале", "automationTriggerDescDetectionSensor": "Срабатывает при активации датчика обнаружения", - "automationTriggerDescGeofenceEnter": "Срабатывает, когда узел входит в геозону", - "automationTriggerDescGeofenceExit": "Срабатывает, когда узел выходит из геозоны", + "automationTriggerDescGeofenceEnter": "Срабатывает, когда нода входит в геозону", + "automationTriggerDescGeofenceExit": "Срабатывает, когда нода выходит из геозоны", "automationTriggerDescManual": "Запускается вручную через Shortcuts или интерфейс", "automationTriggerDescMessageContains": "Срабатывает, когда сообщение содержит ключевое слово", "automationTriggerDescMessageReceived": "Срабатывает при получении любого сообщения", - "automationTriggerDescNodeOffline": "Срабатывает, когда узел долгое время не отвечает", - "automationTriggerDescNodeOnline": "Срабатывает, когда узел недавно выходил на связь", - "automationTriggerDescNodeSilent": "Срабатывает, когда узел молчит в течение заданного времени", - "automationTriggerDescPositionChanged": "Срабатывает, когда изменяется положение узла", + "automationTriggerDescNodeOffline": "Срабатывает, когда нода долгое время не отвечает", + "automationTriggerDescNodeOnline": "Срабатывает, когда нода недавно выходила на связь", + "automationTriggerDescNodeSilent": "Срабатывает, когда нода молчит в течение заданного времени", + "automationTriggerDescPositionChanged": "Срабатывает, когда изменяется положение ноды", "automationTriggerDescScheduled": "Срабатывает по расписанию", "automationTriggerDescSignalWeak": "Срабатывает, когда уровень сигнала падает", "automationTriggerDetectionSensor": "Сработал датчик обнаружения", @@ -763,18 +763,18 @@ "automationTriggerManualTitle": "Запуск вручную", "automationTriggerMessageContains": "Сообщение содержит ключевое слово", "automationTriggerMessageReceived": "Сообщение получено", - "automationTriggerNodeFilterHelp": "Оставьте пустым, чтобы срабатывать для любого узла", - "automationTriggerNodeFilterLabel": "Фильтр по узлу (необязательно)", - "automationTriggerNodeOffline": "Узел стал неактивным", - "automationTriggerNodeOnline": "Узел стал активным", - "automationTriggerNodeSilent": "Узел молчит в течение заданного времени", + "automationTriggerNodeFilterHelp": "Оставьте пустым, чтобы срабатывать для любой ноды", + "automationTriggerNodeFilterLabel": "Фильтр по ноде (необязательно)", + "automationTriggerNodeOffline": "Нода стала неактивной", + "automationTriggerNodeOnline": "Нода стала активной", + "automationTriggerNodeSilent": "Нода молчит в течение заданного времени", "automationTriggerPickOnMap": "Выбрать на карте", "automationTriggerPositionChanged": "Местоположение обновлено", "automationTriggerRadius": "Радиус", "automationTriggerRepeatEvery": "Повторять каждые", "automationTriggerScheduleType": "Тип расписания", "automationTriggerScheduled": "Запланированное время", - "automationTriggerSelectNode": "Выбрать узел", + "automationTriggerSelectNode": "Выбрать ноду", "automationTriggerSelectTrigger": "Выбрать триггер", "automationTriggerSensorAny": "Любой", "automationTriggerSensorClear": "Нет срабатывания", @@ -793,7 +793,7 @@ "automationValidateMessage": "Введите сообщение для отправки", "automationValidateSchedule": "Задайте время расписания", "automationValidateShortcutName": "Введите имя Shortcut", - "automationValidateTargetNode": "Выберите целевой узел", + "automationValidateTargetNode": "Выберите целевую ноду", "automationValidateWebhookEvent": "Введите имя события Webhook", "automationVariableAllVariables": "Все переменные", "automationVariableDeleteHint": "Нажмите на переменную, чтобы выбрать её, затем нажмите Backspace для удаления", @@ -802,8 +802,8 @@ "automationVariableDescKeyword": "Найденное ключевое слово", "automationVariableDescLocation": "GPS-координаты (широта, долгота)", "automationVariableDescMessage": "Содержимое сообщения", - "automationVariableDescNodeName": "Имя узла, вызвавшего срабатывание", - "automationVariableDescNodeNum": "Номер узла в шестнадцатеричном формате (например, a1b2)", + "automationVariableDescNodeName": "Имя ноды, вызвавшего срабатывание", + "automationVariableDescNodeNum": "Номер ноды в шестнадцатеричном формате (например, a1b2)", "automationVariableDescSensorName": "Имя датчика обнаружения", "automationVariableDescSensorState": "Состояние датчика (обнаружено / нет срабатывания)", "automationVariableDescSignalThreshold": "Пороговое значение сигнала в дБ (SNR)", @@ -1041,7 +1041,7 @@ "debugScreenClearMenuItem": "Очистить", "debugScreenCopy": "Копировать", "debugScreenCopyToClipboard": "Копировать в буфер обмена", - "debugScreenDebugExportMessage": "Этот экспорт содержит сведения об устройстве, состояние подключения, список узлов, метаданные маршрутов и последние журналы приложения.\n\nТекст сообщений скрыт, координаты GPS огрублены. Проверьте файл перед отправкой.", + "debugScreenDebugExportMessage": "Этот экспорт содержит сведения об устройстве, состояние подключения, список нод, метаданные маршрутов и последние журналы приложения.\n\nТекст сообщений скрыт, координаты GPS огрублены. Проверьте файл перед отправкой.", "debugScreenDebugExportTitle": "Экспорт отладки", "debugScreenDeviceApply": "Применить", "debugScreenDeviceAutoScrollOff": "Автопрокрутка ВЫКЛ", @@ -1079,7 +1079,7 @@ "deviceConfigBroadcastFortyEightHours": "Сорок восемь часов", "deviceConfigBroadcastFourHours": "Четыре часа", "deviceConfigBroadcastInterval": "Интервал трансляции", - "deviceConfigBroadcastIntervalSubtitle": "Как часто транслировать информацию об узле в сеть", + "deviceConfigBroadcastIntervalSubtitle": "Как часто транслировать информацию о ноде в сеть", "deviceConfigBroadcastNever": "Никогда", "deviceConfigBroadcastSeventyTwoHours": "Семьдесят два часа", "deviceConfigBroadcastSixHours": "Шесть часов", @@ -1115,16 +1115,16 @@ "deviceConfigFrequencyOverride": "Переопределение частоты (MHz)", "deviceConfigFrequencyOverrideHint": "0.0 (использовать по умолчанию)", "deviceConfigGpioWarning": "Изменяйте эти параметры только если вы знаете, что ваше устройство требует нестандартных GPIO-пинов.", - "deviceConfigHamModeInfo": "Режим HAM использует ваше полное имя в качестве позывного (макс. 8 символов), транслирует информацию об узле каждые 10 минут, переопределяет частоту, рабочий цикл и мощность передачи, а также отключает шифрование.", - "deviceConfigHamModeWarning": "Узлы HAM не могут ретранслировать зашифрованный трафик. Другие узлы сети без режима HAM не смогут маршрутизировать зашифрованные сообщения через этот узел, создавая разрыв в ретрансляции.", + "deviceConfigHamModeInfo": "Режим HAM использует ваше полное имя в качестве позывного (макс. 8 символов), транслирует информацию о ноде каждые 10 минут, переопределяет частоту, рабочий цикл и мощность передачи, а также отключает шифрование.", + "deviceConfigHamModeWarning": "Ноды HAM не могут ретранслировать зашифрованный трафик. Другие ноды сети без режима HAM не смогут маршрутизировать зашифрованные сообщения через эту ноду, создавая разрыв в ретрансляции.", "deviceConfigHardware": "Аппаратная часть", "deviceConfigLicensedOperator": "Лицензированный оператор (HAM)", "deviceConfigLicensedOperatorSubtitle": "Задаёт позывной, переопределяет частоту и мощность, отключает шифрование", "deviceConfigLongName": "Полное имя", "deviceConfigLongNameHint": "Введите отображаемое имя", "deviceConfigLongNameSubtitle": "Отображаемое имя, видимое в сети", - "deviceConfigNameHelpText": "Имя вашего устройства транслируется в сеть и видно другим узлам.", - "deviceConfigNodeNumber": "Номер узла", + "deviceConfigNameHelpText": "Имя вашего устройства транслируется в сеть и видно другим нодам.", + "deviceConfigNodeNumber": "Номер ноды", "deviceConfigPosixTimezone": "POSIX-часовой пояс", "deviceConfigPosixTimezoneExample": "например, EST5EDT,M3.2.0,M11.1.0", "deviceConfigPosixTimezoneHint": "Оставьте пустым для UTC", @@ -1136,32 +1136,32 @@ "deviceConfigRebroadcastCorePortnumsOnly": "Только основные номера портов", "deviceConfigRebroadcastCorePortnumsOnlyDesc": "Ретранслировать только основные пакеты Meshtastic (позиция, телеметрия и т.д.).", "deviceConfigRebroadcastKnownOnly": "Только известные", - "deviceConfigRebroadcastKnownOnlyDesc": "Ретранслировать только сообщения от узлов из базы данных узлов.", + "deviceConfigRebroadcastKnownOnlyDesc": "Ретранслировать только сообщения от нод из базы данных нод.", "deviceConfigRebroadcastLocalOnly": "Только локальные", "deviceConfigRebroadcastLocalOnlyDesc": "Ретранслировать только сообщения от локальных отправителей. Подходит для изолированных сетей.", "deviceConfigRebroadcastNone": "Нет", - "deviceConfigRebroadcastNoneDesc": "Не ретранслировать никакие сообщения. Узел только принимает.", + "deviceConfigRebroadcastNoneDesc": "Не ретранслировать никакие сообщения. Нода только принимает.", "deviceConfigRemoteAdminConfiguring": "Настройка: {nodeName}", "deviceConfigRemoteAdminTitle": "Удалённое администрирование", - "deviceConfigResetNodeDb": "Сбросить базу данных узлов", + "deviceConfigResetNodeDb": "Сбросить базу данных нод", "deviceConfigResetNodeDbDialogConfirm": "Сбросить", - "deviceConfigResetNodeDbDialogMessage": "Это удалит всю сохранённую информацию об узлах с устройства. Сети потребуется заново обнаружить все узлы.\n\nВы уверены, что хотите продолжить?", - "deviceConfigResetNodeDbDialogTitle": "Сбросить базу данных узлов", + "deviceConfigResetNodeDbDialogMessage": "Это удалит всю сохранённую информацию о нодах с устройства. Сети потребуется заново обнаружить все ноды.\n\nВы уверены, что хотите продолжить?", + "deviceConfigResetNodeDbDialogTitle": "Сбросить базу данных нод", "deviceConfigResetNodeDbError": "Не удалось выполнить сброс: {error}", - "deviceConfigResetNodeDbSubtitle": "Удалить всю сохранённую информацию об узлах", - "deviceConfigResetNodeDbSuccess": "Сброс базы данных узлов начат", + "deviceConfigResetNodeDbSubtitle": "Удалить всю сохранённую информацию о нодах", + "deviceConfigResetNodeDbSuccess": "Сброс базы данных нод начат", "deviceConfigRoleClient": "Клиент", "deviceConfigRoleClientBase": "Базовый клиент", - "deviceConfigRoleClientBaseDesc": "Базовая станция для избранных узлов. Маршрутизирует их пакеты как маршрутизатор, остальные — как клиент.", - "deviceConfigRoleClientDesc": "Роль по умолчанию. Пакеты сети маршрутизируются через этот узел. Может отправлять и получать сообщения.", + "deviceConfigRoleClientBaseDesc": "Базовая станция для избранных нод. Маршрутизирует их пакеты как маршрутизатор, остальные — как клиент.", + "deviceConfigRoleClientDesc": "Роль по умолчанию. Пакеты сети маршрутизируются через эту ноду. Может отправлять и получать сообщения.", "deviceConfigRoleClientHidden": "Скрытый клиент", - "deviceConfigRoleClientHiddenDesc": "Работает как клиент, но скрыт из списка узлов. По-прежнему маршрутизирует трафик.", + "deviceConfigRoleClientHiddenDesc": "Работает как клиент, но скрыт из списка нод. По-прежнему маршрутизирует трафик.", "deviceConfigRoleClientMute": "Немой клиент", "deviceConfigRoleClientMuteDesc": "Аналогично клиенту, но не передаёт собственные сообщения. Полезно для мониторинга.", "deviceConfigRoleLostAndFound": "Бюро находок", "deviceConfigRoleLostAndFoundDesc": "Оптимизировано для поиска потерянных устройств. Периодически отправляет маяки.", "deviceConfigRoleRouter": "Маршрутизатор", - "deviceConfigRoleRouterDesc": "Маршрутизирует пакеты сети между узлами. Экран и Bluetooth отключены для экономии питания.", + "deviceConfigRoleRouterDesc": "Маршрутизирует пакеты сети между нодами. Экран и Bluetooth отключены для экономии питания.", "deviceConfigRoleRouterLate": "Запоздалый маршрутизатор", "deviceConfigRoleRouterLateDesc": "Ретранслирует все пакеты после других маршрутизаторов. Расширяет зону покрытия без расхода приоритетных переходов.", "deviceConfigRoleSensor": "Сенсор", @@ -1178,7 +1178,7 @@ "deviceConfigSaveChangesTitle": "Сохранить изменения?", "deviceConfigSaveError": "Ошибка сохранения конфигурации: {error}", "deviceConfigSavedLocal": "Конфигурация сохранена — устройство перезагружается", - "deviceConfigSavedRemote": "Конфигурация отправлена на удалённый узел", + "deviceConfigSavedRemote": "Конфигурация отправлена на удалённая нода", "deviceConfigSectionButtonInput": "Кнопки и ввод", "deviceConfigSectionBuzzer": "Зуммер", "deviceConfigSectionDangerZone": "Опасная зона", @@ -1186,7 +1186,7 @@ "deviceConfigSectionDeviceRole": "Роль устройства", "deviceConfigSectionGpio": "GPIO (дополнительно)", "deviceConfigSectionLed": "LED", - "deviceConfigSectionNodeInfoBroadcast": "Трансляция информации об узле", + "deviceConfigSectionNodeInfoBroadcast": "Трансляция информации о ноде", "deviceConfigSectionRebroadcastMode": "Режим ретрансляции", "deviceConfigSectionSerial": "Последовательный порт", "deviceConfigSectionTimezone": "Часовой пояс", @@ -1202,7 +1202,7 @@ "deviceConfigTxPowerValue": "{power} dBm", "deviceConfigUnknown": "Неизвестно", "deviceConfigUnmessagable": "Недоступен для сообщений", - "deviceConfigUnmessagableSubtitle": "Пометить как инфраструктурный узел, не отвечающий на сообщения", + "deviceConfigUnmessagableSubtitle": "Пометить как инфраструктурную ноду, не отвечающий на сообщения", "deviceConfigUserId": "ID пользователя", "deviceSheetActionAppSettings": "Настройки приложения", "deviceSheetActionAppSettingsSubtitle": "Уведомления, тема оформления, настройки", @@ -1210,10 +1210,10 @@ "deviceSheetActionDeviceConfigSubtitle": "Настроить роль и параметры устройства", "deviceSheetActionDeviceManagement": "Управление устройством", "deviceSheetActionDeviceManagementSubtitle": "Настройки радио, дисплея, питания и позиции", - "deviceSheetActionResetNodeDb": "Сбросить базу данных узлов", - "deviceSheetActionResetNodeDbSubtitle": "Удалить все известные узлы с устройства", + "deviceSheetActionResetNodeDb": "Сбросить базу данных нод", + "deviceSheetActionResetNodeDbSubtitle": "Удалить все известные ноды с устройства", "deviceSheetActionScanQr": "Сканировать QR-код", - "deviceSheetActionScanQrSubtitle": "Импортировать узлы, каналы или автоматизации", + "deviceSheetActionScanQrSubtitle": "Импортировать ноды, каналы или автоматизации", "deviceSheetAddress": "Адрес", "deviceSheetBattery": "Аккумулятор", "deviceSheetBatteryPercent": "{percent}%", @@ -1241,17 +1241,17 @@ "deviceSheetInfoCardDisconnected": "Отключено", "deviceSheetInfoCardDisconnecting": "Отключение...", "deviceSheetNoDevice": "Нет устройства", - "deviceSheetNodeId": "ID узла", - "deviceSheetNodeName": "Имя узла", + "deviceSheetNodeId": "ID ноды", + "deviceSheetNodeName": "Имя ноды", "deviceSheetProtocol": "Протокол", "deviceSheetReconnecting": "Переподключение...", "deviceSheetRefreshBattery": "Обновить данные аккумулятора", "deviceSheetRefreshingBattery": "Обновление данных аккумулятора...", "deviceSheetResetNodeDbDialogConfirm": "Сбросить", - "deviceSheetResetNodeDbDialogMessage": "Это удалит все известные узлы с устройства и из приложения. Устройству потребуется заново обнаружить узлы в сети.\n\nВы уверены, что хотите продолжить?", - "deviceSheetResetNodeDbDialogTitle": "Сбросить базу данных узлов", - "deviceSheetResetNodeDbError": "Не удалось сбросить базу данных узлов: {error}", - "deviceSheetResetNodeDbSuccess": "База данных узлов успешно сброшена", + "deviceSheetResetNodeDbDialogMessage": "Это удалит все известные ноды с устройства и из приложения. Устройству потребуется заново обнаружить ноды в сети.\n\nВы уверены, что хотите продолжить?", + "deviceSheetResetNodeDbDialogTitle": "Сбросить базу данных нод", + "deviceSheetResetNodeDbError": "Не удалось сбросить базу данных нод: {error}", + "deviceSheetResetNodeDbSuccess": "База данных нод успешно сброшена", "deviceSheetScanForDevices": "Сканировать устройства", "deviceSheetSectionConnectionDetails": "Сведения о подключении", "deviceSheetSectionDeveloperTools": "Инструменты разработчика", @@ -1300,13 +1300,13 @@ "deviceShopRefreshTooltip": "Обновить", "deviceShopReviewSubmitFailed": "Не удалось отправить отзыв: {error}", "discoveryDiscoveredBadge": "ОБНАРУЖЕН", - "discoveryNodesFound": "Найдено узлов: {count}", + "discoveryNodesFound": "Найдено нод: {count}", "discoveryScanningNetwork": "Сканирование сети", - "discoverySearchingForNodes": "Поиск узлов...", + "discoverySearchingForNodes": "Поиск нод...", "discoverySignalExcellent": "Отличный", "discoverySignalGood": "Хороший", "discoverySignalWeak": "Слабый", - "discoveryUnknownNode": "Неизвестный узел", + "discoveryUnknownNode": "Неизвестная нода", "drawerAdminDashboard": "Панель администратора", "drawerAdminSectionHeader": "АДМИНИСТРАТОР", "drawerBadgeNew": "НОВОЕ", @@ -1341,23 +1341,23 @@ "explorerTitleSignalHunter": "Охотник за сигналами", "explorerTitleSignalHunterDescription": "Ищет сигналы по всему диапазону", "favoritesCancelCompare": "Отменить сравнение", - "favoritesCannotCompare": "Невозможно сравнить узлы вне сети", + "favoritesCannotCompare": "Невозможно сравнить ноды вне сети", "favoritesCharging": "Зарядка", - "favoritesCompareNodes": "Сравнить узлы", + "favoritesCompareNodes": "Сравнить ноды", "favoritesDelete": "Удалить", - "favoritesEmptyDescription": "Нажмите значок звезды на любом узле, чтобы добавить его в избранное для быстрого доступа.", + "favoritesEmptyDescription": "Нажмите значок звезды на любом ноде, чтобы добавить его в избранное для быстрого доступа.", "favoritesEmptyTitle": "Избранного пока нет", "favoritesErrorLoading": "Ошибка загрузки избранного", - "favoritesNodeNotInMesh": "Узел в данный момент не в сети. Проверьте позже.", + "favoritesNodeNotInMesh": "Нода в данный момент не в сети. Проверьте позже.", "favoritesNotInMesh": "Не в сети", "favoritesRemoveConfirm": "Удалить", "favoritesRemoveMessage": "Удалить {name} из избранного?", "favoritesRemoveTitle": "Удалить из избранного?", "favoritesRemoveTooltip": "Удалить из избранного", "favoritesRetry": "Повторить", - "favoritesSelectFirst": "Выберите первый узел", - "favoritesSelectSecond": "Выберите второй узел", - "favoritesTitle": "Избранные узлы", + "favoritesSelectFirst": "Выберите первую ноду", + "favoritesSelectSecond": "Выберите вторую ноду", + "favoritesTitle": "Избранные ноды", "featuredProductsDiscard": "Отменить", "featuredProductsEmpty": "Нет рекомендуемых товаров", "featuredProductsEmptySubtitle": "Отметьте товары как рекомендуемые, чтобы управлять их порядком здесь", @@ -1430,7 +1430,7 @@ "fileTransferContactsDetailReceived": "Получено", "fileTransferContactsDetailSent": "Отправлено", "fileTransferContactsDetailTotal": "Итого", - "fileTransferContactsDiscoveredHint": "Обнаруженные узлы появятся здесь", + "fileTransferContactsDiscoveredHint": "Обнаруженные ноды появятся здесь", "fileTransferContactsFilterActive": "Активные", "fileTransferContactsFilterAll": "Все", "fileTransferContactsFilterFavorites": "Избранное", @@ -1440,7 +1440,7 @@ "fileTransferContactsMinutesAgo": "{count}мин назад", "fileTransferContactsNoMatchFilter": "Нет контактов «{filter}»", "fileTransferContactsNoMatchSearch": "Нет контактов, соответствующих «{query}»", - "fileTransferContactsNoNodes": "Узлов в сети ещё нет", + "fileTransferContactsNoNodes": "Нод в сети ещё нет", "fileTransferContactsSearchHint": "Поиск контактов", "fileTransferContactsSectionActive": "Активные", "fileTransferContactsSectionFavorites": "Избранное", @@ -1455,7 +1455,7 @@ "fileTransferContainerPurgeExpired": "Удалить просроченные", "fileTransferContainerPurged": "Просроченные передачи удалены", "fileTransferContainerSendFile": "Отправить файл", - "fileTransferContainerSendToNode": "Отправить на узел", + "fileTransferContainerSendToNode": "Отправить на ноду", "fileTransferContainerStarted": "Передача начата: {filename}", "fileTransferContainerTitle": "Передача файлов", "fileTransferCopiedToClipboard": "Скопировано в буфер обмена", @@ -1463,7 +1463,7 @@ "fileTransferCouldNotReadFile": "Не удалось прочитать файл: {error}", "fileTransferCouldNotRead": "Не удалось прочитать файл.", "fileTransferCouldNotSaveForSharing": "Не удалось сохранить файл для отправки", - "fileTransferCouldNotStart": "Не удалось начать передачу. Убедитесь, что узел подключён, и повторите попытку.", + "fileTransferCouldNotStart": "Не удалось начать передачу. Убедитесь, что нода подключена, и повторите попытку.", "fileTransferDeleteConfirm": "Удалить", "fileTransferDeleteMessage": "Удалить «{filename}»? Отменить невозможно.", "fileTransferDeleteTitle": "Удалить передачу?", @@ -1471,8 +1471,8 @@ "fileTransferDetailsSection": "Детали передачи", "fileTransferDirectionReceived": "Получено", "fileTransferDirectionSent": "Отправлено", - "fileTransferEmptyDescriptionContacts": "Перейдите в «Контакты», нажмите на узел\nи выберите «Отправить файл»", - "fileTransferEmptyDescriptionOverflow": "Отправляйте файлы другим узлам через\nменю или NodeDex", + "fileTransferEmptyDescriptionContacts": "Перейдите в «Контакты», нажмите на ноду\nи выберите «Отправить файл»", + "fileTransferEmptyDescriptionOverflow": "Отправляйте файлы другим нодам через\nменю или NodeDex", "fileTransferEmptyFilterTitle": "Нет передач «{filter}»", "fileTransferEmptyTitle": "Нет передач файлов", "fileTransferExpiredPurged": "Просроченные передачи удалены", @@ -1497,9 +1497,9 @@ "fileTransferInfoMimeType": "MIME-тип", "fileTransferInfoNackRounds": "Циклы NACK", "fileTransferInfoSize": "Размер", - "fileTransferInfoSourceNode": "Узел-источник", + "fileTransferInfoSourceNode": "Нода-источник", "fileTransferInfoStatus": "Статус", - "fileTransferInfoTargetNode": "Узел-получатель", + "fileTransferInfoTargetNode": "Нода-получатель", "fileTransferInfoTransferId": "ID передачи", "fileTransferMoreBytes": "... ещё {count} байт", "fileTransferNoMatchFilter": "Нет передач, соответствующих фильтру", @@ -1512,7 +1512,7 @@ "fileTransferSearchHint": "Поиск передач", "fileTransferSendAFile": "Отправить файл", "fileTransferSendFile": "Отправить файл", - "fileTransferSendToNode": "Отправить на узел", + "fileTransferSendToNode": "Отправить на ноду", "fileTransferStarted": "Передача начата: {filename}", "fileTransferTabContacts": "Контакты", "fileTransferTabFiles": "Файлы", @@ -1529,7 +1529,7 @@ "firmwareUpdateInstalledFirmware": "Установленная прошивка", "firmwareUpdateLatestVersion": "Последняя: {version}", "firmwareUpdateNewBadge": "НОВОЕ", - "firmwareUpdateNodeId": "ID узла", + "firmwareUpdateNodeId": "ID ноды", "firmwareUpdateOpenWebFlasher": "Открыть веб-прошивальщик", "firmwareUpdateReleaseNotes": "Примечания к выпуску", "firmwareUpdateSectionAvailableUpdate": "Доступное обновление", @@ -1547,14 +1547,14 @@ "firmwareUpdateUptime": "Время работы", "firmwareUpdateVisitWebsite": "Посетите сайт Meshtastic для получения последней прошивки.", "firmwareUpdateWifi": "WiFi", - "globeEmptyDescription": "Здесь появятся узлы с данными о местоположении", - "globeEmptyTitle": "Нет узлов с GPS", + "globeEmptyDescription": "Здесь появятся ноды с данными о местоположении", + "globeEmptyTitle": "Нет нод с GPS", "globeHelp": "Справка", "globeHideConnections": "Скрыть подключения", - "globeNodeCount": "{count} узлов", + "globeNodeCount": "{count} нод", "globeResetView": "Сбросить вид", "globeScreenTitle": "Глобус сети", - "globeSelectNode": "Выбрать узел", + "globeSelectNode": "Выбрать ноду", "globeShowConnections": "Показать подключения", "gpsStatusAccuracy": "Точность", "gpsStatusAccuracyValue": "±{meters} м", @@ -1638,7 +1638,7 @@ "helpCenterScreenMeshHealth": "Здоровье сети", "helpCenterScreenMessages": "Сообщения", "helpCenterScreenNodeDex": "NodeDex", - "helpCenterScreenNodes": "Узлы", + "helpCenterScreenNodes": "Ноды", "helpCenterScreenPresence": "Присутствие", "helpCenterScreenProfile": "Профиль", "helpCenterScreenRadioConfig": "Настройка радио", @@ -1828,9 +1828,9 @@ "mapDistanceMeters": "{meters} м", "mapDistanceMetersFormal": "{meters} м", "mapDropWaypoint": "Поставить путевую точку", - "mapEmptyBodyNoNodes": "Узлы появятся на карте, как только\nони передадут свои координаты GPS.", - "mapEmptyBodyWithNodes": "Обнаружено узлов: {totalNodes}, но ни один\nещё не передал координаты GPS.", - "mapEmptyTitle": "Нет узлов с GPS", + "mapEmptyBodyNoNodes": "Ноды появятся на карте, как только\nони передадут свои координаты GPS.", + "mapEmptyBodyWithNodes": "Обнаружено нод: {totalNodes}, но ни один\nещё не передал координаты GPS.", + "mapEmptyTitle": "Нет нод с GPS", "mapEntitiesTitle": "Объекты", "mapEstimatedPathLoss": "Расчётные потери на трассе: {pathLoss} дБ (в свободном пространстве)", "mapExitMeasureMode": "Выйти из режима измерения", @@ -1839,8 +1839,8 @@ "mapFilterAll": "Все", "mapFilterInRange": "В зоне доступа", "mapFilterInactive": "Неактивные", - "mapFilterNodesTitle": "Фильтр узлов", - "mapFilterNodesTooltip": "Фильтровать узлы", + "mapFilterNodesTitle": "Фильтр нод", + "mapFilterNodesTooltip": "Фильтровать ноды", "mapFilterWithGps": "С GPS", "mapGlobeView": "Вид глобуса 3D", "mapHelp": "Справка", @@ -1861,16 +1861,16 @@ "mapMeasureDistance": "Измерить расстояние", "mapMeasureMarkerA": "A", "mapMeasureMarkerB": "B", - "mapMeasureTapPointA": "Нажмите на узел или карту для точки A", - "mapMeasureTapPointB": "Нажмите на узел или карту для точки B", + "mapMeasureTapPointA": "Нажмите на ноду или карту для точки A", + "mapMeasureTapPointB": "Нажмите на ноду или карту для точки B", "mapMeasurementActions": "Действия с измерением", "mapMeasurementCopied": "Результат измерения скопирован в буфер обмена", "mapNavigateToTooltip": "Проложить маршрут", "mapNewMeasurement": "Новое измерение", "mapNoEntities": "Нет объектов", "mapNoMatchingEntities": "Подходящих объектов не найдено", - "mapNodeCount": "Узлов: {count}", - "mapNodesTitle": "Узлы", + "mapNodeCount": "Нод: {count}", + "mapNodesTitle": "Ноды", "mapOpenInExternalApp": "Открыть во внешнем картографическом приложении", "mapOpenMidpointInMaps": "Открыть среднюю точку в Картах", "mapPositionBroadcastHint": "Трансляция местоположения может занимать до 15 минут.\nНажмите, чтобы запросить немедленно.", @@ -1885,7 +1885,7 @@ "mapScreenTitle": "Карта сети Mesh", "mapSearchEntitiesHint": "Поиск объектов...", "mapSearchHint": "Попробуйте другой поисковый запрос", - "mapSearchNodesHint": "Поиск узлов...", + "mapSearchNodesHint": "Поиск нод...", "mapSettings": "Настройки", "mapShare": "Поделиться", "mapShareDistanceLabel": "Расстояние: {distance}", @@ -1910,14 +1910,14 @@ "mapYouBadge": "ВЫ", "mesh3dAutoRotate": "Автовращение", "mesh3dChangeViewTooltip": "Изменить вид", - "mesh3dFilteredNodeCount": "{filtered}/{total} узлов", + "mesh3dFilteredNodeCount": "{filtered}/{total} нод", "mesh3dHelp": "Справка", "mesh3dHideConnections": "Скрыть соединения", "mesh3dLegendActive": "Активный", "mesh3dLegendActiveNow": "Активен сейчас", - "mesh3dLegendActivePeer": "Активный узел", + "mesh3dLegendActivePeer": "Активная нода", "mesh3dLegendFading": "Затухающий", - "mesh3dLegendFadingPeer": "Затухающий узел", + "mesh3dLegendFadingPeer": "Затухающая нода", "mesh3dLegendFairSignal": "Удовлетворительный сигнал", "mesh3dLegendGoodSignal": "Хороший сигнал", "mesh3dLegendHighAltitude": "Большая высота", @@ -1926,10 +1926,10 @@ "mesh3dLegendPoorSignal": "Слабый сигнал", "mesh3dLegendSnrBar": "Шкала SNR", "mesh3dLegendStaleIdle": "Устаревший / неактивный", - "mesh3dLegendYourNode": "Ваш узел", + "mesh3dLegendYourNode": "Ваша нода", "mesh3dMyNodeBadge": "Я", - "mesh3dNodeCount": "{count} узлов", - "mesh3dNodesDrawerTitle": "Узлы", + "mesh3dNodeCount": "{count} нод", + "mesh3dNodesDrawerTitle": "Ноды", "mesh3dShowConnections": "Показать соединения", "mesh3dStatActive": "Активных", "mesh3dStatChUtil": "Загр. кан.", @@ -1938,7 +1938,7 @@ "mesh3dStatTotal": "Всего", "mesh3dStopRotation": "Остановить вращение", "mesh3dViewModeTitle": "Режим отображения", - "meshHealthActiveNodesPackets": "{activeNodeCount} активных узлов • {totalPackets} пакетов", + "meshHealthActiveNodesPackets": "{activeNodeCount} активных нод • {totalPackets} пакетов", "meshHealthBatteryUsageSubtitle": "Мониторинг работоспособности сети потребляет дополнительный заряд. Приостановите при отсутствии необходимости.", "meshHealthBatteryUsageTitle": "Расход аккумулятора", "meshHealthChannelUtilization": "Загрузка канала", @@ -1956,8 +1956,8 @@ "meshHealthMonitoringPaused": "Мониторинг приостановлен", "meshHealthNoDataYet": "Данных пока нет", "meshHealthNoIssuesDetected": "Проблем не обнаружено", - "meshHealthNoNodesDetected": "Узлы не обнаружены", - "meshHealthNodePrefix": "Узел: {nodeId}", + "meshHealthNoNodesDetected": "Ноды не обнаружены", + "meshHealthNodePrefix": "Нода: {nodeId}", "meshHealthNormal": "Норма", "meshHealthOfAirtime": "эфирного времени", "meshHealthPacketsAirtime": "{packetCount} пакетов • {airtimeMs} мс эфирного времени", @@ -2011,7 +2011,7 @@ "meshcoreChannelsLabel": "Каналы", "meshcoreChannelsRefreshChannels": "Обновить каналы", "meshcoreChannelsTitle": "Каналы", - "meshcoreChatNode": "Узел чата", + "meshcoreChatNode": "Нода чата", "meshcoreClear": "Очистить", "meshcoreClose": "Закрыть", "meshcoreCodingRateLabel": "Скорость кодирования", @@ -2065,12 +2065,12 @@ "meshcoreDisconnectedToolsTitle": "MeshCore отключён", "meshcoreDiscovery": "Обнаружение", "meshcoreDone": "Готово", - "meshcoreEditNodeName": "Изменить имя узла", + "meshcoreEditNodeName": "Изменить имя ноды", "meshcoreEnterChannelCode": "Введите код канала", "meshcoreEnterChannelCodeSubtitle": "Вставьте код приглашения в канал", "meshcoreEnterCodeManually": "Ввести код вручную", "meshcoreEnterContactCode": "Введите код контакта", - "meshcoreEnterNodeNameHint": "Введите имя узла...", + "meshcoreEnterNodeNameHint": "Введите имя ноды...", "meshcoreErrorEnterChannelCode": "Пожалуйста, введите код канала", "meshcoreErrorEnterChannelName": "Пожалуйста, введите название канала", "meshcoreExitMeasureMode": "Выйти из режима измерения", @@ -2080,9 +2080,9 @@ "meshcoreFailedToSendMessage": "Не удалось отправить сообщение", "meshcoreFailedToSetName": "Не удалось задать имя", "meshcoreFailedToSyncTime": "Не удалось синхронизировать время", - "meshcoreFilterChatNodes": "Узлы чата", + "meshcoreFilterChatNodes": "Ноды чата", "meshcoreFilterMap": "Фильтр карты", - "meshcoreFilterOtherNodes": "Другие узлы", + "meshcoreFilterOtherNodes": "Другие ноды", "meshcoreFilterRepeaters": "Ретрансляторы", "meshcoreFilterTooltip": "Фильтр", "meshcoreFramesLabel": "Кадры", @@ -2109,7 +2109,7 @@ "meshcoreLoadingChannels": "Загрузка каналов...", "meshcoreLoadingContacts": "Загрузка контактов...", "meshcoreLoadingMessages": "Загрузка сообщений...", - "meshcoreLocationComingSoon": "Настройки местоположения появятся в ближайшее время.\n\nЭто позволит вам вручную задать положение узла или использовать GPS.", + "meshcoreLocationComingSoon": "Настройки местоположения появятся в ближайшее время.\n\nЭто позволит вам вручную задать положение ноды или использовать GPS.", "meshcoreLocationInfoLabel": "Местоположение", "meshcoreLocationSetting": "Местоположение", "meshcoreLongPressForActions": "Удерживайте для действий", @@ -2131,10 +2131,10 @@ "meshcoreNoContactsWithLocation": "Нет контактов с местоположением", "meshcoreNoContactsWithLocationDescription": "Контакты с координатами GPS будут отображены на карте.\nУбедитесь, что у ваших контактов включена передача местоположения.", "meshcoreNoMessagesYet": "Сообщений пока нет", - "meshcoreNodeNameLabel": "Имя узла", - "meshcoreNodeNameSetting": "Имя узла", - "meshcoreNodeNameUpdated": "Имя узла обновлено", - "meshcoreNodeSettings": "Настройки узла", + "meshcoreNodeNameLabel": "Имя ноды", + "meshcoreNodeNameSetting": "Имя ноды", + "meshcoreNodeNameUpdated": "Имя ноды обновлено", + "meshcoreNodeSettings": "Настройки ноды", "meshcoreNotConnected": "Нет подключения", "meshcoreNotConnectedToDevice": "Нет подключения к устройству MeshCore", "meshcoreNotConnectedTools": "Нет подключения", @@ -2149,7 +2149,7 @@ "meshcorePasteContactCodeHint": "Вставьте код контакта здесь...", "meshcorePointCameraAtChannelQr": "Наведите камеру на QR-код канала MeshCore", "meshcorePointCameraAtContactQr": "Наведите камеру на QR-код контакта MeshCore", - "meshcorePrivacyComingSoon": "Настройки конфиденциальности появятся в ближайшее время.\n\nЭто позволит управлять тем, транслирует ли ваш узел объявления.", + "meshcorePrivacyComingSoon": "Настройки конфиденциальности появятся в ближайшее время.\n\nЭто позволит управлять тем, транслирует ли ваша нода объявления.", "meshcorePrivacyMode": "Режим конфиденциальности", "meshcorePrivacyModeDialogTitle": "Режим конфиденциальности", "meshcorePrivate": "Приватный", @@ -2187,10 +2187,10 @@ "meshcoreRemoveContact": "Удалить контакт", "meshcoreRemoveContactMessage": "Вы уверены, что хотите удалить {contactName}?", "meshcoreRemoveContactTitle": "Удалить контакт?", - "meshcoreRepeaterNode": "Узел-ретранслятор", + "meshcoreRepeaterNode": "Нода-ретранслятор", "meshcoreRestartMeshCoreDevice": "Перезапустить устройство MeshCore", "meshcoreReverseMeasurementDirection": "Поменять направление измерения", - "meshcoreRoomNode": "Узел-комната", + "meshcoreRoomNode": "Нода-комната", "meshcoreSave": "Сохранить", "meshcoreScanChannelQrSubtitle": "Сканировать QR-код канала", "meshcoreScanChannelQrTitle": "Сканировать QR канала", @@ -2209,7 +2209,7 @@ "meshcoreSending": "Отправка...", "meshcoreSessionNotActive": "Сессия MeshCore не активна", "meshcoreSetLocation": "Задать местоположение", - "meshcoreSetNodePosition": "Задать положение узла", + "meshcoreSetNodePosition": "Задать положение ноды", "meshcoreSettingsTitle": "Настройки", "meshcoreSfCrLabel": "SF/CR", "meshcoreShare": "Поделиться", @@ -2233,7 +2233,7 @@ "meshcoreShellDisconnectConfirmMessage": "Вы уверены, что хотите отключиться от этого устройства MeshCore?", "meshcoreShellDisconnectedFrom": "Отключено от {deviceName}", "meshcoreShellDisconnecting": "Отключение...", - "meshcoreShellDiscoverSubtitle": "Отправить объявление для поиска ближайших узлов", + "meshcoreShellDiscoverSubtitle": "Отправить объявление для поиска ближайших нод", "meshcoreShellDrawerAddChannel": "Добавить канал", "meshcoreShellDrawerAddContact": "Добавить контакт", "meshcoreShellDrawerDisconnect": "Отключиться", @@ -2241,8 +2241,8 @@ "meshcoreShellDrawerMyContactCode": "Мой код контакта", "meshcoreShellDrawerSectionHeader": "MESHCORE", "meshcoreShellDrawerSettings": "Настройки", - "meshcoreShellInfoNodeId": "ID узла", - "meshcoreShellInfoNodeName": "Имя узла", + "meshcoreShellInfoNodeId": "ID ноды", + "meshcoreShellInfoNodeName": "Имя ноды", "meshcoreShellInfoProtocol": "Протокол", "meshcoreShellInfoProtocolValue": "MeshCore", "meshcoreShellInfoPublicKey": "Публичный ключ", @@ -2272,15 +2272,15 @@ "meshcoreShellStatusOffline": "Не в сети", "meshcoreShellStatusOnline": "В сети", "meshcoreShellUnknown": "Неизвестно", - "meshcoreShellUnnamedNode": "Безымянный узел", + "meshcoreShellUnnamedNode": "Безымянная нода", "meshcoreSlotIndex": "Слот {index}", "meshcoreSpreadingFactorLabel": "Коэффициент расширения", "meshcoreStatusLabel": "Статус", "meshcoreSwapAB": "Поменять A ↔ B", "meshcoreSyncTime": "Синхронизировать время", "meshcoreSyncing": "Синхронизация...", - "meshcoreTapForPointA": "Нажмите на узел или карту для точки A", - "meshcoreTapForPointB": "Нажмите на узел или карту для точки B", + "meshcoreTapForPointA": "Нажмите на ноду или карту для точки A", + "meshcoreTapForPointB": "Нажмите на ноду или карту для точки B", "meshcoreTimeAgoDays": "{count}д назад", "meshcoreTimeAgoHours": "{count}ч назад", "meshcoreTimeAgoMinutes": "{count}м назад", @@ -2319,13 +2319,13 @@ "messagesContainerTitle": "Сообщения", "messagesScanChannelNotConnected": "Подключитесь к устройству для сканирования каналов", "messagingAddChannel": "Добавить канал", - "messagingAdvancedResetNodeDatabase": "Дополнительно: сбросить базу данных узлов", + "messagingAdvancedResetNodeDatabase": "Дополнительно: сбросить базу данных нод", "messagingChannelSettings": "Настройки канала", "messagingChannelSubtitle": "Канал", "messagingClearSearch": "Очистить поиск", "messagingCloseSearch": "Закрыть поиск", "messagingConfigureQuickResponses": "Настройте быстрые ответы в Настройках", - "messagingContactsDiscoveredHint": "Здесь появятся обнаруженные узлы", + "messagingContactsDiscoveredHint": "Здесь появятся обнаруженные ноды", "messagingContactsTitle": "Контакты", "messagingContactsTitleWithCount": "Контакты ({count})", "messagingDeleteMessageConfirmation": "Вы уверены, что хотите удалить это сообщение? Оно будет удалено только локально.", @@ -2333,7 +2333,7 @@ "messagingDirectMessageSubtitle": "Личное сообщение", "messagingEncryptionKeyIssueSubtitle": "Личное сообщение для {name} не доставлено", "messagingEncryptionKeyIssueTitle": "Проблема с ключом шифрования", - "messagingEncryptionKeyWarning": "Ключи шифрования могут быть рассинхронизированы. Это может произойти, если узел был сброшен или исключён из базы данных сети.", + "messagingEncryptionKeyWarning": "Ключи шифрования могут быть рассинхронизированы. Это может произойти, если нода была сброшена или исключён из базы данных сети.", "messagingFailedToSend": "Не удалось отправить", "messagingFilterActive": "Активные", "messagingFilterAll": "Все", @@ -2372,7 +2372,7 @@ "messagingSourceShortcut": "Shortcut", "messagingSourceTapback": "Реакция", "messagingStartConversation": "Начните разговор", - "messagingUnknownNode": "Неизвестный узел", + "messagingUnknownNode": "Неизвестная нода", "navigationActivity": "Активность", "navigationAether": "Aether", "navigationAutomations": "Автоматизации", @@ -2394,7 +2394,7 @@ "navigationMeshHealth": "Состояние сети", "navigationMessages": "Сообщения", "navigationNodeDex": "NodeDex", - "navigationNodes": "Узлы", + "navigationNodes": "Ноды", "navigationNotSignedIn": "Не выполнен вход", "navigationOffline": "Офлайн", "navigationPresence": "Присутствие", @@ -2429,17 +2429,17 @@ "nodeAnalyticsCharging": "Зарядка", "nodeAnalyticsClear": "Очистить", "nodeAnalyticsClearConfirm": "Очистить", - "nodeAnalyticsClearHistoryMessage": "Это удалит все исторические данные для этого узла. Действие невозможно отменить.", + "nodeAnalyticsClearHistoryMessage": "Это удалит все исторические данные для этой ноды. Действие невозможно отменить.", "nodeAnalyticsClearHistoryTitle": "Очистить историю", "nodeAnalyticsCsvShared": "CSV-данные переданы", - "nodeAnalyticsDataUpdated": "Данные узла обновлены", + "nodeAnalyticsDataUpdated": "Данные ноды обновлены", "nodeAnalyticsDirectNeighbors": "Прямые соседи ({count})", "nodeAnalyticsExport": "Экспорт", "nodeAnalyticsExportCsv": "CSV", - "nodeAnalyticsExportCsvSubject": "История узла {name} (CSV)", + "nodeAnalyticsExportCsvSubject": "История ноды {name} (CSV)", "nodeAnalyticsExportHistoryTitle": "Экспорт истории", "nodeAnalyticsExportJson": "JSON", - "nodeAnalyticsExportJsonSubject": "История узла {name} (JSON)", + "nodeAnalyticsExportJsonSubject": "История ноды {name} (JSON)", "nodeAnalyticsExportRecordCount": "{count} записей", "nodeAnalyticsFirstSeen": "Впервые замечен", "nodeAnalyticsHardware": "Оборудование", @@ -2455,8 +2455,8 @@ "nodeAnalyticsNoHistoryToExport": "Нет данных истории для экспорта", "nodeAnalyticsNoHistoryYet": "Исторических данных пока нет", "nodeAnalyticsNoNeighborData": "Нет данных о соседях", - "nodeAnalyticsNodeIdCopied": "ID узла скопирован", - "nodeAnalyticsNodeNotFound": "Узел не найден в сети", + "nodeAnalyticsNodeIdCopied": "ID ноды скопирован", + "nodeAnalyticsNodeNotFound": "Нода не найдена в сети", "nodeAnalyticsRecords": "Записи", "nodeAnalyticsRefreshFailed": "Ошибка обновления: {error}", "nodeAnalyticsRefreshNow": "Обновить сейчас", @@ -2474,7 +2474,7 @@ "nodeAnalyticsShareDetailBatteryLevel": "Аккумулятор: {level}%", "nodeAnalyticsShareDetailGateways": "Шлюзы: {count}", "nodeAnalyticsShareDetailHardware": "Оборудование: {hardware}", - "nodeAnalyticsShareDetailHeader": "🛰️ Узел Mesh: {name}", + "nodeAnalyticsShareDetailHeader": "🛰️ Нода Mesh: {name}", "nodeAnalyticsShareDetailId": "ID: !{nodeId}", "nodeAnalyticsShareDetailLocation": "Местоположение: {location}", "nodeAnalyticsShareDetailNeighbors": "Соседи: {count}", @@ -2482,17 +2482,17 @@ "nodeAnalyticsShareDetailStatus": "Статус: {status}", "nodeAnalyticsShareDetails": "Поделиться подробностями", "nodeAnalyticsShareDetailsSubtitle": "Полная техническая информация в виде текста", - "nodeAnalyticsShareFailed": "Ошибка при передаче узла: {error}", + "nodeAnalyticsShareFailed": "Ошибка при передаче ноды: {error}", "nodeAnalyticsShareLink": "Поделиться ссылкой", "nodeAnalyticsShareLinkSubtitle": "Красивый предпросмотр в iMessage, Slack и др.", - "nodeAnalyticsShareNodeTitle": "Поделиться узлом", - "nodeAnalyticsShareSubject": "Узел Mesh: {name}", + "nodeAnalyticsShareNodeTitle": "Поделиться нодой", + "nodeAnalyticsShareSubject": "Нода Mesh: {name}", "nodeAnalyticsShareText": "Посмотрите на {name} в Socialmesh!\n{url}", - "nodeAnalyticsShareTooltip": "Поделиться информацией об узле", + "nodeAnalyticsShareTooltip": "Поделиться информацией о ноде", "nodeAnalyticsShortName": "Краткое имя", "nodeAnalyticsShowOnMap": "Показать на карте", "nodeAnalyticsSignIn": "Войти", - "nodeAnalyticsSignInToShare": "Войдите, чтобы делиться узлами", + "nodeAnalyticsSignInToShare": "Войдите, чтобы делиться нодами", "nodeAnalyticsStopWatching": "Остановить слежение", "nodeAnalyticsTimeDaysAgo": "{days}д назад", "nodeAnalyticsTimeHoursAgo": "{hours}ч назад", @@ -2501,13 +2501,13 @@ "nodeAnalyticsUnknown": "Неизвестно", "nodeAnalyticsUptime": "Время работы", "nodeAnalyticsUptimeStat": "Время работы", - "nodeAnalyticsVisitAgain": "Посетите этот узел ещё раз, чтобы накопить историю", + "nodeAnalyticsVisitAgain": "Посетите эту ноду ещё раз, чтобы накопить историю", "nodeAnalyticsVoltage": "Напряжение", "nodeAnalyticsWatchLive": "Следить в реальном времени", "nodeComparisonCharging": "Зарядка", "nodeComparisonNo": "Нет", "nodeComparisonNoData": "--", - "nodeComparisonNodeIdCopied": "ID узла скопирован", + "nodeComparisonNodeIdCopied": "ID ноды скопирован", "nodeComparisonRowAirTimeTx": "Время передачи TX", "nodeComparisonRowBattery": "Аккумулятор", "nodeComparisonRowChannelUtil": "Утилизация канала", @@ -2525,13 +2525,13 @@ "nodeComparisonSectionMetrics": "Метрики", "nodeComparisonSectionNetwork": "Сеть", "nodeComparisonSectionStatus": "Статус", - "nodeComparisonTitle": "Сравнение узлов", + "nodeComparisonTitle": "Сравнение нод", "nodeComparisonUnknown": "Неизвестно", "nodeComparisonVs": "VS", "nodeComparisonYes": "Да", "nodeDetailAddToFavoritesTooltip": "Добавить в избранное", "nodeDetailAddedToFavorites": "{name} добавлен в избранное", - "nodeDetailAppBarTitle": "Сведения об узле", + "nodeDetailAppBarTitle": "Сведения о ноде", "nodeDetailBatteryCharging": "Зарядка", "nodeDetailBatteryPercent": "{level}%", "nodeDetailDistanceKilometers": "{km} км", @@ -2554,7 +2554,7 @@ "nodeDetailLabelHopsPreserved": "Хопы сохранены", "nodeDetailLabelInspected": "Проверено", "nodeDetailLabelNoiseFloor": "Уровень шума", - "nodeDetailLabelOnlineNodes": "Узлы онлайн", + "nodeDetailLabelOnlineNodes": "Ноды онлайн", "nodeDetailLabelPacketsRx": "Пакеты RX", "nodeDetailLabelPacketsTx": "Пакеты TX", "nodeDetailLabelPosition": "Позиция", @@ -2563,7 +2563,7 @@ "nodeDetailLabelRssi": "RSSI", "nodeDetailLabelSnr": "SNR", "nodeDetailLabelStatus": "Статус", - "nodeDetailLabelTotalNodes": "Всего узлов", + "nodeDetailLabelTotalNodes": "Всего нод", "nodeDetailLabelTxDropped": "TX сброшено", "nodeDetailLabelUnknownDrops": "Неизвестные сбросы", "nodeDetailLabelUptime": "Время работы", @@ -2576,10 +2576,10 @@ "nodeDetailLastHeardNever": "Никогда", "nodeDetailLastHeardTimestamp": "Последний сигнал {timestamp}", "nodeDetailMenuAdminSettings": "Настройки администратора", - "nodeDetailMenuAdminSubtitle": "Настроить этот узел удалённо", + "nodeDetailMenuAdminSubtitle": "Настроить эту ноду удалённо", "nodeDetailMenuExchangePositions": "Обменяться позициями", "nodeDetailMenuQrCode": "QR-код", - "nodeDetailMenuRemoveNode": "Удалить узел", + "nodeDetailMenuRemoveNode": "Удалить нода", "nodeDetailMenuRequestUserInfo": "Запросить информацию о пользователе", "nodeDetailMenuSetFixedPosition": "Установить фиксированную позицию", "nodeDetailMenuShowOnMap": "Показать на карте", @@ -2587,16 +2587,16 @@ "nodeDetailMessageButton": "Сообщение", "nodeDetailMuteError": "Ошибка изменения статуса отключения звука: {error}", "nodeDetailMuteNotConnected": "Невозможно изменить статус отключения звука: устройство не подключено", - "nodeDetailMuteTooltip": "Отключить звук узла", + "nodeDetailMuteTooltip": "Отключить звук ноды", "nodeDetailMuted": "{name} отключён", "nodeDetailMutedBadge": "Без звука", "nodeDetailNoPkiBadge": "Нет PKI", - "nodeDetailNoPositionData": "У узла нет данных о позиции", + "nodeDetailNoPositionData": "У ноды нет данных о позиции", "nodeDetailPkiBadge": "PKI", "nodeDetailPositionError": "Ошибка запроса позиции: {error}", "nodeDetailPositionRequested": "Позиция запрошена от {name}", - "nodeDetailQrInfoText": "ID узла: {nodeId}", - "nodeDetailQrSubtitle": "Отсканируйте, чтобы добавить этот узел", + "nodeDetailQrInfoText": "ID ноды: {nodeId}", + "nodeDetailQrSubtitle": "Отсканируйте, чтобы добавить эту ноду", "nodeDetailRebootButton": "Перезагрузить", "nodeDetailRebootConfirm": "Перезагрузить", "nodeDetailRebootError": "Ошибка перезагрузки: {error}", @@ -2605,10 +2605,10 @@ "nodeDetailRebootTitle": "Перезагрузка устройства", "nodeDetailRebootingSnackbar": "Устройство перезагружается...", "nodeDetailRemoveConfirm": "Удалить", - "nodeDetailRemoveError": "Ошибка удаления узла: {error}", + "nodeDetailRemoveError": "Ошибка удаления ноды: {error}", "nodeDetailRemoveFromFavoritesTooltip": "Удалить из избранного", - "nodeDetailRemoveMessage": "Удалить {name} из базы данных узлов? Узел будет удалён с вашего локального устройства.", - "nodeDetailRemoveTitle": "Удалить узел", + "nodeDetailRemoveMessage": "Удалить {name} из базы данных нод? Нода будет удалена с вашего локального устройства.", + "nodeDetailRemoveTitle": "Удалить нода", "nodeDetailRemovedFromFavorites": "{name} удалён из избранного", "nodeDetailRemovedSnackbar": "{name} удалён", "nodeDetailSectionDeviceMetrics": "Метрики устройства", @@ -2635,7 +2635,7 @@ "nodeDetailTracerouteNotConnected": "Невозможно отправить traceroute: устройство не подключено", "nodeDetailTracerouteSent": "Traceroute отправлен на {name} — проверьте историю traceroute для результатов", "nodeDetailTracerouteTooltip": "Traceroute", - "nodeDetailUnmuteTooltip": "Включить звук узла", + "nodeDetailUnmuteTooltip": "Включить звук ноды", "nodeDetailUnmuted": "{name} включён", "nodeDetailUserInfoError": "Ошибка запроса информации о пользователе: {error}", "nodeDetailUserInfoRequested": "Информация о пользователе запрошена от {name}", @@ -2698,7 +2698,7 @@ "nodedexCardRarity50to99": "50 - 99 встреч", "nodedexCardRarity5to19": "5 - 19 встреч", "nodedexCardRarityEpic": "ЭПИЧЕСКАЯ", - "nodedexCardRarityInfoDescription": "Редкость карточки отражает, как часто вы встречали этот узел в сети. Чем больше пересечений, тем редкостнее становится карточка.", + "nodedexCardRarityInfoDescription": "Редкость карточки отражает, как часто вы встречали эту ноду в сети. Чем больше пересечений, тем редкостнее становится карточка.", "nodedexCardRarityInfoTitle": "Редкость карточки", "nodedexCardRarityLegendary": "ЛЕГЕНДАРНАЯ", "nodedexCardRarityRare": "РЕДКАЯ", @@ -2710,26 +2710,26 @@ "nodedexClassificationClassify": "Классифицировать", "nodedexClassificationLabel": "КЛАССИФИКАЦИЯ", "nodedexClassificationTitle": "Классификация", - "nodedexClassifyNodeDescription": "Назначьте личную классификацию этому узлу. Она видна только вам.", - "nodedexClassifyNodeTitle": "Классифицировать узел", + "nodedexClassifyNodeDescription": "Назначьте личную классификацию этой ноде. Она видна только вам.", + "nodedexClassifyNodeTitle": "Классифицировать нода", "nodedexClearFilter": "Очистить", "nodedexCloseGallerySemanticLabel": "Закрыть галерею", "nodedexCoSeenCompactLabel": "Вместе", - "nodedexCoSeenDescription": "Узлы, часто встречаемые в одном сеансе", + "nodedexCoSeenDescription": "Ноды, часто встречаемые в одном сеансе", "nodedexCoSeenLinksTitle": "Связи совместных наблюдений", "nodedexCoSeenRelationshipDetails": "Детали совместного наблюдения", "nodedexCollectedCount": "{count} собрано", "nodedexConfidenceLabel": "Уверенность", "nodedexConfidenceTooltip": "Уверенность: {percentage}%", "nodedexConstellationCloseSearch": "Закрыть поиск", - "nodedexConstellationEmptySubtitle": "Откройте больше узлов, чтобы увидеть их связи.\nУзлы, встреченные вместе, образуют связи созвездия.", + "nodedexConstellationEmptySubtitle": "Откройте больше нод, чтобы увидеть их связи.\nНоды, встреченные вместе, образуют связи созвездия.", "nodedexConstellationEmptyTitle": "Созвездие ещё не создано", "nodedexConstellationLinkCount": "{count} связей", "nodedexConstellationLinkTitle": "Связь созвездия", - "nodedexConstellationNodeCount": "{count} узлов", + "nodedexConstellationNodeCount": "{count} нод", "nodedexConstellationProfile": "Профиль", - "nodedexConstellationSearchHint": "Поиск по имени или ID узла…", - "nodedexConstellationSearchNodes": "Поиск узлов", + "nodedexConstellationSearchHint": "Поиск по имени или ID ноды…", + "nodedexConstellationSearchNodes": "Поиск нод", "nodedexConstellationTitle": "Созвездие", "nodedexDayFri": "Пт", "nodedexDayFriday": "Пятница", @@ -2751,8 +2751,8 @@ "nodedexDensityNormal": "Обычная", "nodedexDensitySparse": "Разреженная", "nodedexDensityStars": "Звёзды", - "nodedexDetailNotFoundSubtitle": "Этот узел ещё не был обнаружен.", - "nodedexDetailNotFoundTitle": "Узел не найден в NodeDex", + "nodedexDetailNotFoundSubtitle": "Эта нода ещё не была обнаружена.", + "nodedexDetailNotFoundTitle": "Нода не найдена в NodeDex", "nodedexDeviceTitle": "Устройство", "nodedexDiscoveryTitle": "Обнаружение", "nodedexDistanceKilometers": "{distance} км", @@ -2770,42 +2770,42 @@ "nodedexEdgeDensityNormal": "Обычная", "nodedexEdgeDensitySparse": "Разреженная", "nodedexEdgeDensityTooltip": "Плотность рёбер: {label}", - "nodedexEmptyAlbumDescription": "Подключитесь к сетевому устройству и обнаруживайте узлы,\nчтобы начать формировать коллекцию", + "nodedexEmptyAlbumDescription": "Подключитесь к сетевому устройству и обнаруживайте ноды,\nчтобы начать формировать коллекцию", "nodedexEmptyAlbumHintMove": "Перемещайтесь", "nodedexEmptyAlbumHintScan": "Сканировать устройства", "nodedexEmptyAlbumTitle": "Карточек пока нет", - "nodedexEmptyAllSubtitle": "Подключитесь к устройству Meshtastic, и узлы будут появляться здесь по мере их обнаружения в сети.", - "nodedexEmptyAllTitle": "Узлы ещё не обнаружены", - "nodedexEmptyBeaconsSubtitle": "Маяки — это узлы с очень высокой активностью и частыми встречами. Для их классификации требуется время.", + "nodedexEmptyAllSubtitle": "Подключитесь к устройству Meshtastic, и ноды будут появляться здесь по мере их обнаружения в сети.", + "nodedexEmptyAllTitle": "Ноды ещё не обнаружены", + "nodedexEmptyBeaconsSubtitle": "Маяки — это ноды с очень высокой активностью и частыми встречами. Для их классификации требуется время.", "nodedexEmptyBeaconsTitle": "Маяки не найдены", - "nodedexEmptyContactSubtitle": "Узлы, классифицированные вами как Контакт, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", + "nodedexEmptyContactSubtitle": "Ноды, классифицированные вами как Контакт, появятся здесь. Удерживайте ноду, чтобы назначить эту метку.", "nodedexEmptyContactTitle": "Контакты отсутствуют", - "nodedexEmptyFrequentPeerSubtitle": "Узлы, классифицированные вами как Частый партнёр, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", + "nodedexEmptyFrequentPeerSubtitle": "Ноды, классифицированные вами как Частый партнёр, появятся здесь. Удерживайте ноду, чтобы назначить эту метку.", "nodedexEmptyFrequentPeerTitle": "Частые партнёры отсутствуют", - "nodedexEmptyGalleryDescription": "Обнаруживайте узлы, чтобы наполнить коллекцию", + "nodedexEmptyGalleryDescription": "Обнаруживайте ноды, чтобы наполнить коллекцию", "nodedexEmptyGalleryTitle": "Нет карточек для отображения", - "nodedexEmptyGhostsSubtitle": "Призраки — это узлы, которые появляются редко относительно времени, в течение которого они известны.", + "nodedexEmptyGhostsSubtitle": "Призраки — это ноды, которые появляются редко относительно времени, в течение которого они известны.", "nodedexEmptyGhostsTitle": "Призраки не найдены", - "nodedexEmptyKnownRelaySubtitle": "Узлы, классифицированные вами как Известный ретранслятор, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", + "nodedexEmptyKnownRelaySubtitle": "Ноды, классифицированные вами как Известный ретранслятор, появятся здесь. Удерживайте ноду, чтобы назначить эту метку.", "nodedexEmptyKnownRelayTitle": "Известные ретрансляторы отсутствуют", - "nodedexEmptyRecentSubtitle": "Узлы, обнаруженные за последние 24 часа, появятся здесь.", + "nodedexEmptyRecentSubtitle": "Ноды, обнаруженные за последние 24 часа, появятся здесь.", "nodedexEmptyRecentTitle": "Недавних открытий нет", - "nodedexEmptyRelaysSubtitle": "Ретрансляторы — это узлы с ролью маршрутизатора и активной переадресацией трафика.", + "nodedexEmptyRelaysSubtitle": "Ретрансляторы — это ноды с ролью маршрутизатора и активной переадресацией трафика.", "nodedexEmptyRelaysTitle": "Ретрансляторы не найдены", - "nodedexEmptySentinelsSubtitle": "Часовые — это долгоживущие узлы с фиксированным положением и стабильным присутствием.", + "nodedexEmptySentinelsSubtitle": "Часовые — это долгоживущие ноды с фиксированным положением и стабильным присутствием.", "nodedexEmptySentinelsTitle": "Часовые не найдены", - "nodedexEmptyTaggedSubtitle": "Удерживайте узел в списке, чтобы назначить социальную метку: Контакт, Доверенный узел или Известный ретранслятор.", - "nodedexEmptyTaggedTitle": "Узлов с метками нет", - "nodedexEmptyTagline1": "Узлы ещё не обнаружены.\nПодключитесь к сетевому устройству, чтобы начать вести полевой журнал.", - "nodedexEmptyTagline2": "NodeDex каталогизирует каждый обнаруженный узел.\nКаждый получает уникальную процедурную идентичность.", + "nodedexEmptyTaggedSubtitle": "Удерживайте ноду в списке, чтобы назначить социальную метку: Контакт, Доверенную ноду или Известный ретранслятор.", + "nodedexEmptyTaggedTitle": "Нод с метками нет", + "nodedexEmptyTagline1": "Ноды ещё не обнаружены.\nПодключитесь к сетевому устройству, чтобы начать вести полевой журнал.", + "nodedexEmptyTagline2": "NodeDex каталогизирует каждый обнаруженная нода.\nКаждый получает уникальную процедурную идентичность.", "nodedexEmptyTagline3": "Открывайте странников, часовых и призраков.\nЧерты личности формируются из поведенческих паттернов.", - "nodedexEmptyTagline4": "Отмечайте узлы как контакты или доверенные ретрансляторы.\nСтройте своё сетевое сообщество со временем.", + "nodedexEmptyTagline4": "Отмечайте ноды как контакты или доверенные ретрансляторы.\nСтройте своё сетевое сообщество со временем.", "nodedexEmptyTitleKeyword": "NodeDex", "nodedexEmptyTitlePrefix": "Ваш ", "nodedexEmptyTitleSuffix": " пуст", - "nodedexEmptyTrustedNodeSubtitle": "Узлы, классифицированные вами как Доверенный узел, появятся здесь. Удерживайте узел, чтобы назначить эту метку.", - "nodedexEmptyTrustedNodeTitle": "Доверенных узлов нет", - "nodedexEmptyWanderersSubtitle": "Странники — это узлы, замеченные в нескольких местах. Они появляются со временем по мере накопления данных о положении.", + "nodedexEmptyTrustedNodeSubtitle": "Ноды, классифицированные вами как Доверенная нода, появятся здесь. Удерживайте ноду, чтобы назначить эту метку.", + "nodedexEmptyTrustedNodeTitle": "Доверенных нод нет", + "nodedexEmptyWanderersSubtitle": "Странники — это ноды, замеченные в нескольких местах. Они появляются со временем по мере накопления данных о положении.", "nodedexEmptyWanderersTitle": "Странники не найдены", "nodedexEncounterActivityTitle": "Активность встреч", "nodedexEncounterCountLabel": "{count} встреч", @@ -2816,7 +2816,7 @@ "nodedexEvidenceActiveLastHour": "Активен в течение последнего часа", "nodedexEvidenceAirtimeTx": "Время в эфире TX {percent}%", "nodedexEvidenceChannelUtilization": "Загрузка канала {percent}%", - "nodedexEvidenceCoSeenWith": "Замечен вместе с {count} узлами", + "nodedexEvidenceCoSeenWith": "Замечен вместе с {count} нодами", "nodedexEvidenceDistinctPositions": "Наблюдался в {count} различных позициях", "nodedexEvidenceEncounterRate": "{rate} встреч/день", "nodedexEvidenceEncounterRateLow": "Частота встреч {rate}/день", @@ -2844,12 +2844,12 @@ "nodedexExportFailed": "Экспорт не удался: {error}", "nodedexExportNothingToExport": "Нечего экспортировать — NodeDex пуст", "nodedexExportShareSubject": "Экспорт Socialmesh NodeDex", - "nodedexFieldNoteAnchor0": "Узел-хаб. Замечен вместе с {coSeen} другими узлами.", + "nodedexFieldNoteAnchor0": "Нода-хаб. Замечен вместе с {coSeen} другими нодами.", "nodedexFieldNoteAnchor1": "Социальный центр локальной сети. Множество связей.", - "nodedexFieldNoteAnchor2": "Постоянный хаб. {coSeen} узлов в непосредственной близости.", - "nodedexFieldNoteAnchor3": "Якорная точка для соседних узлов. Фиксирован и хорошо связан.", - "nodedexFieldNoteAnchor4": "Центральный узел локальной топологии. Высокая плотность совместных наблюдений.", - "nodedexFieldNoteAnchor5": "Гравитационный центр. Другие узлы группируются вокруг него.", + "nodedexFieldNoteAnchor2": "Постоянный хаб. {coSeen} нод в непосредственной близости.", + "nodedexFieldNoteAnchor3": "Якорная точка для соседних нод. Фиксирован и хорошо связан.", + "nodedexFieldNoteAnchor4": "Центральная нода локальной топологии. Высокая плотность совместных наблюдений.", + "nodedexFieldNoteAnchor5": "Гравитационный центр. Другие ноды группируются вокруг него.", "nodedexFieldNoteAnchor6": "Инфраструктурный якорь. {coSeen} связанных партнёров.", "nodedexFieldNoteAnchor7": "Сетевой нексус. Стабильное присутствие с широкими связями.", "nodedexFieldNoteBeacon0": "Устойчивый сигнал. {rate} наблюдений в день.", @@ -2865,7 +2865,7 @@ "nodedexFieldNoteCourier2": "Активный обмен сообщениями. Поведение курьера вероятно.", "nodedexFieldNoteCourier3": "Переносит данные между сегментами сети. Зарегистрировано {messages} сообщений.", "nodedexFieldNoteCourier4": "Высокая плотность сообщений указывает на целенаправленную передачу данных.", - "nodedexFieldNoteCourier5": "Узел с интенсивной коммуникацией. Зафиксировано {messages} обменов.", + "nodedexFieldNoteCourier5": "Нода с интенсивной коммуникацией. Зафиксировано {messages} обменов.", "nodedexFieldNoteCourier6": "Частый посредник. Передаёт данные по сети.", "nodedexFieldNoteCourier7": "Зафиксирован паттерн доставки. Сообщений больше, чем встреч.", "nodedexFieldNoteDrifter0": "Время появления непредсказуемо. Появляется и исчезает без закономерности.", @@ -3014,14 +3014,14 @@ "nodedexNoEncountersOnDate": "Встреч в эту дату нет", "nodedexNoEncountersRecorded": "Встречи не зафиксированы", "nodedexNoNoteYet": "Заметок нет. Нажмите «Добавить заметку», чтобы написать.", - "nodedexNoRelationshipDataDescription": "Эти узлы не наблюдались вместе.", + "nodedexNoRelationshipDataDescription": "Эти ноды не наблюдались вместе.", "nodedexNoRelationshipDataTitle": "Нет данных о связи", - "nodedexNodeCountPlural": "{count} узлов", - "nodedexNodeCountSingular": "{count} узел", + "nodedexNodeCountPlural": "{count} нод", + "nodedexNodeCountSingular": "{count} нода", "nodedexNoteAdd": "Добавить заметку", "nodedexNoteCancel": "Отмена", "nodedexNoteEdit": "Редактировать", - "nodedexNoteHint": "Напишите заметку об этом узле...", + "nodedexNoteHint": "Напишите заметку об этом ноде...", "nodedexNoteSave": "Сохранить", "nodedexNoteTitle": "Заметка", "nodedexObservationTimelineTitle": "Хронология наблюдений", @@ -3034,13 +3034,13 @@ "nodedexPatinaAxisReach": "Охват", "nodedexPatinaAxisReachDescription": "Географический охват по регионам", "nodedexPatinaAxisRecency": "Давность", - "nodedexPatinaAxisRecencyDescription": "Насколько недавно этот узел был активен", + "nodedexPatinaAxisRecencyDescription": "Насколько недавно эта нода была активна", "nodedexPatinaAxisSignalDepth": "Глубина сигнала", "nodedexPatinaAxisSignalDepthDescription": "Качество собранных записей сигнала", "nodedexPatinaAxisSocial": "Социальный", "nodedexPatinaAxisSocialDescription": "Совместные наблюдения и сообщения", "nodedexPatinaAxisTenure": "Стаж", - "nodedexPatinaAxisTenureDescription": "Как давно известен этот узел", + "nodedexPatinaAxisTenureDescription": "Как давно известен эта нода", "nodedexPatinaBreakdownSubtitle": "Накопленная история по шести измерениям", "nodedexPatinaBreakdownTitle": "Детали патины", "nodedexPatinaEncounters": "Встречи", @@ -3088,8 +3088,8 @@ "nodedexRngLabel": "RNG", "nodedexRssiDbmValue": "{value} dBm", "nodedexRssiLabel": "RSSI", - "nodedexSearchHint": "Найти узел", - "nodedexSectionDiscoveredNodes": "Обнаруженные узлы", + "nodedexSearchHint": "Найти ноду", + "nodedexSectionDiscoveredNodes": "Обнаруженные ноды", "nodedexSectionYourDevice": "Ваше устройство", "nodedexSeenTogetherCount": "Замечены вместе {count} раз", "nodedexSelectedLinksCount": "{count} связей", @@ -3109,7 +3109,7 @@ "nodedexSnrTrend": "ТРЕНД SNR", "nodedexSocialTagContactDescription": "Человек, с которым вы общаетесь", "nodedexSocialTagFrequentPeerDescription": "Регулярно появляется в сети", - "nodedexSocialTagKnownRelayDescription": "Узел, надёжно пересылающий трафик", + "nodedexSocialTagKnownRelayDescription": "Нода, надёжно пересылающий трафик", "nodedexSocialTagTrustedNodeDescription": "Проверенная инфраструктура, которой вы доверяете", "nodedexSortDiscovered": "Обнаружен", "nodedexSortEncounters": "Встречи", @@ -3146,7 +3146,7 @@ "nodedexTagContact": "Контакт", "nodedexTagFrequentPeer": "Частый партнёр", "nodedexTagKnownRelay": "Известный ретранслятор", - "nodedexTagTrustedNode": "Доверенный узел", + "nodedexTagTrustedNode": "Доверенная нода", "nodedexTapCardToFlipSemanticLabel": "Нажмите на карточку, чтобы перевернуть", "nodedexTapToFlip": "НАЖМИТЕ, ЧТОБЫ ПЕРЕВЕРНУТЬ", "nodedexTimeBucketDawn": "Утро", @@ -3165,7 +3165,7 @@ "nodedexTimelineEncountered": "Встречен", "nodedexTimelineEncounteredAtDistance": "Встречен на расстоянии {distance}", "nodedexTimelineEncounteredSnr": "Встречен (SNR {snr}dB)", - "nodedexTimelineEventsAppearHere": "События будут появляться здесь по мере взаимодействия с этим узлом.", + "nodedexTimelineEventsAppearHere": "События будут появляться здесь по мере взаимодействия с этим нодой.", "nodedexTimelineFirst": "Первый", "nodedexTimelineHoursUnit": "{hours} ч", "nodedexTimelineJustNow": "Только что", @@ -3179,7 +3179,7 @@ "nodedexTitle": "NodeDex", "nodedexTotalCount": "{count} всего", "nodedexTraitAnchor": "Якорь", - "nodedexTraitAnchorDescription": "Постоянный узел со множеством соединений", + "nodedexTraitAnchorDescription": "Постоянная нода со множеством соединений", "nodedexTraitBeacon": "Маяк", "nodedexTraitBeaconDescription": "Всегда активен, высокая доступность", "nodedexTraitCollectionLabel": "КОЛЛЕКЦИЯ ХАРАКТЕРИСТИК", @@ -3189,7 +3189,7 @@ "nodedexTraitDrifterDescription": "Нерегулярные появления, исчезает и появляется", "nodedexTraitGhost": "Призрак", "nodedexTraitGhostDescription": "Редко встречается, неуловимое присутствие", - "nodedexTraitNodesPageTitle": "Узлы {traitLabel}", + "nodedexTraitNodesPageTitle": "Ноды {traitLabel}", "nodedexTraitRelay": "Ретранслятор", "nodedexTraitRelayDescription": "Высокая пропускная способность, пересылает трафик", "nodedexTraitSentinel": "Часовой", @@ -3218,8 +3218,8 @@ "nodesScreenDisconnect": "Отключить", "nodesScreenDistanceKilometers": "{km} км", "nodesScreenDistanceMeters": "{meters} м", - "nodesScreenEmptyAll": "Узлы пока не обнаружены", - "nodesScreenEmptyFiltered": "Нет узлов, соответствующих фильтру", + "nodesScreenEmptyAll": "Ноды пока не обнаружены", + "nodesScreenEmptyFiltered": "Нет нод, соответствующих фильтру", "nodesScreenFilterActive": "Активные", "nodesScreenFilterAll": "Все", "nodesScreenFilterFavorites": "Избранные", @@ -3235,7 +3235,7 @@ "nodesScreenLogsLabel": "Журналы:", "nodesScreenNoGps": "Нет GPS", "nodesScreenScanQrCodeTooltip": "Сканировать QR-код", - "nodesScreenSearchHint": "Найти узел", + "nodesScreenSearchHint": "Найти ноду", "nodesScreenSectionActive": "Активные", "nodesScreenSectionAetherFlights": "Рейсы Aether поблизости", "nodesScreenSectionBatteryCritical": "Критический (<20%)", @@ -3253,7 +3253,7 @@ "nodesScreenSectionUnknown": "Неизвестные", "nodesScreenSectionYourDevice": "Ваше устройство", "nodesScreenSettingsMenu": "Настройки", - "nodesScreenShowAllButton": "Показать все узлы", + "nodesScreenShowAllButton": "Показать все ноды", "nodesScreenSortBattery": "Аккумулятор", "nodesScreenSortMenuBatteryLevel": "Уровень заряда", "nodesScreenSortMenuMostRecent": "Последние", @@ -3263,7 +3263,7 @@ "nodesScreenSortRecent": "Последние", "nodesScreenSortSignal": "Сигнал", "nodesScreenThisDevice": "Это устройство", - "nodesScreenTitle": "{count, plural, =1{Узел (1)} few{Узлы ({count})} many{Узлы ({count})} other{Узлы ({count})}}", + "nodesScreenTitle": "{count, plural, =1{Нода (1)} few{Ноды ({count})} many{Ноды ({count})} other{Ноды ({count})}}", "nodesScreenTransportMqtt": "MQTT", "nodesScreenTransportRf": "RF", "nodesScreenYouBadge": "ВЫ", @@ -3271,11 +3271,11 @@ "onboardingAutomationGeofenceDesc": "Вход в обозначенную зону", "onboardingAutomationLowBattery": "Предупреждение о низком заряде", "onboardingAutomationLowBatteryDesc": "Заряд батареи опускается ниже 20%", - "onboardingAutomationSilentWatch": "Молчание узла", + "onboardingAutomationSilentWatch": "Молчание ноды", "onboardingAutomationSilentWatchDesc": "Нет связи в течение 30 мин", "onboardingAutomationSosKeyword": "Ключевое слово SOS", "onboardingAutomationSosKeywordDesc": "Сообщение содержит «SOS»", - "onboardingAutomationsAdvisor": "Настройте правила один раз — я буду следить за всем остальным. Низкий заряд? Сообщу. Узел замолчал? Предупрежу. Получен SOS? Активирую ваш вебхук.", + "onboardingAutomationsAdvisor": "Настройте правила один раз — я буду следить за всем остальным. Низкий заряд? Сообщу. Нода замолчал? Предупрежу. Получен SOS? Активирую ваш вебхук.", "onboardingAutomationsDescription": "Запускайте действия на основе событий сети.\nОповещения о батарее, геозоны, ключевые слова и многое другое.", "onboardingAutomationsTitle": "Интеллектуальная автоматизация", "onboardingCheckingRadio": "Проверка конфигурации радиоустройства", @@ -3285,11 +3285,11 @@ "onboardingConnectTitle": "Готово к подключению", "onboardingContinueButton": "Продолжить", "onboardingDashboardAdvisor": "Виджеты, карты, статистика — расположите их так, как удобно вам. Ваша сеть, ваш вид, ваш контроль.", - "onboardingDashboardDescription": "Настраиваемая панель с телеметрией в реальном времени.\nОтслеживайте узлы, следите за каналами, визуализируйте сеть.", + "onboardingDashboardDescription": "Настраиваемая панель с телеметрией в реальном времени.\nОтслеживайте ноды, следите за каналами, визуализируйте сеть.", "onboardingDashboardTitle": "Ваш командный центр", "onboardingDeviceHeltec": "Heltec V3", "onboardingDeviceHeltecCategory": "Универсальный", - "onboardingDeviceHeltecDescription": "Многофункциональный узел со встроенным дисплеем", + "onboardingDeviceHeltecDescription": "Многофункциональная нода со встроенным дисплеем", "onboardingDeviceLilygo": "LilyGo T-Beam", "onboardingDeviceLilygoCategory": "Дальнобойный", "onboardingDeviceLilygoDescription": "Максимальный радиус с внешней антенной", @@ -3306,9 +3306,9 @@ "onboardingHardwareAdvisor": "Возьмите SenseCAP T1000-E для отслеживания, Heltec V3 для дальности или RAK WisMesh для надёжности. Я работаю с любым из них.", "onboardingHardwareDescription": "Совместимо со всеми устройствами Meshtastic.\nОт компактных трекеров до дальнобойных станций.", "onboardingHardwareTitle": "Совместимое оборудование", - "onboardingNodedexAdvisor": "Каждый узел получает уникальный Sigil, уровень редкости и патину, которая углубляется с каждой встречей. Соберите их все — ваш NodeDex — это ваша история в сети.", - "onboardingNodedexBaseCamp": "Узел базового лагеря", - "onboardingNodedexDescription": "Каждый встреченный узел становится коллекционной карточкой.\nСоздавайте свой полевой журнал по всей сети.", + "onboardingNodedexAdvisor": "Каждая нода получает уникальный Sigil, уровень редкости и патину, которая углубляется с каждой встречей. Соберите их все — ваш NodeDex — это ваша история в сети.", + "onboardingNodedexBaseCamp": "Нода базового лагеря", + "onboardingNodedexDescription": "Каждый встреченная нода становится коллекционной карточкой.\nСоздавайте свой полевой журнал по всей сети.", "onboardingNodedexEpic": "ЭПИЧЕСКИЙ", "onboardingNodedexLegendary": "ЛЕГЕНДАРНЫЙ", "onboardingNodedexRare": "РЕДКИЙ", @@ -3339,7 +3339,7 @@ "onboardingWidgetBattery": "Батарея", "onboardingWidgetDashboard": "Панель", "onboardingWidgetLiveBadge": "LIVE", - "onboardingWidgetNodesOnline": "Узлов онлайн", + "onboardingWidgetNodesOnline": "Нод онлайн", "onboardingWidgetSnrDb": "SNR dB", "paxCounterAboutSubtitle": "PAX Counter пассивно прослушивает WiFi- и Bluetooth-зондирующие запросы от ближайших устройств. MAC-адреса и персональные данные не сохраняются.", "paxCounterAboutTitle": "О PAX Counter", @@ -3355,13 +3355,13 @@ "paxCounterSaved": "Конфигурация PAX Counter сохранена", "paxCounterTitle": "PAX Counter", "paxCounterUpdateInterval": "Интервал обновления", - "presenceAllNodes": "Все узлы", + "presenceAllNodes": "Все ноды", "presenceBackNearby": "Снова рядом", "presenceBroadcastInfo": "Ваши намерения и статус передаются вместе с вашими сигналами.", "presenceClear": "Очистить", - "presenceEmptyTagline1": "Узлы ещё не обнаружены.\nПодключитесь к сетевому устройству, чтобы видеть присутствие.", - "presenceEmptyTagline2": "Присутствие показывает, кто активен в вашей сети.\nУзлы появляются по мере трансляции.", - "presenceEmptyTagline3": "Наблюдайте за появлением и исчезновением узлов в реальном времени.\nСостояния: активный, затухающий, офлайн.", + "presenceEmptyTagline1": "Ноды ещё не обнаружены.\nПодключитесь к сетевому устройству, чтобы видеть присутствие.", + "presenceEmptyTagline2": "Присутствие показывает, кто активен в вашей сети.\nНоды появляются по мере трансляции.", + "presenceEmptyTagline3": "Наблюдайте за появлением и исчезновением нод в реальном времени.\nСостояния: активный, затухающий, офлайн.", "presenceEmptyTagline4": "Знакомые лица выделены.\nСтройте сообщество в вашей сети постепенно.", "presenceEmptyTitleKeyword": "присутствия", "presenceEmptyTitlePrefix": "Нет ", @@ -3378,29 +3378,29 @@ "presenceLegendMedium": "2–10 мин.", "presenceLegendShort": "< 2 мин.", "presenceMyPresence": "Моё присутствие", - "presenceNoMatchFilter": "Узлы не соответствуют фильтру", - "presenceNoMatchSearch": "Узлы не соответствуют запросу", + "presenceNoMatchFilter": "Ноды не соответствуют фильтру", + "presenceNoMatchSearch": "Ноды не соответствуют запросу", "presenceNodeCount": "{count} {noun}", - "presenceNodePlural": "узлов", - "presenceNodeSingular": "узел", - "presenceQuietMesh": "Сеть сейчас тиха — узлы появятся по мере выхода в онлайн.", + "presenceNodePlural": "нод", + "presenceNodeSingular": "нода", + "presenceQuietMesh": "Сеть сейчас тиха — ноды появятся по мере выхода в онлайн.", "presenceRecentActivity": "Последняя активность", "presenceSave": "Сохранить", - "presenceSearchHint": "Поиск узлов", + "presenceSearchHint": "Поиск нод", "presenceSectionActive": "Активные", "presenceSectionInactive": "Неактивные", "presenceSectionSeenRecently": "Видели недавно", "presenceSectionUnknown": "Неизвестные", "presenceSelectIntent": "Выбрать намерение", "presenceSetStatus": "Установить статус", - "presenceShowAll": "Показать все узлы", + "presenceShowAll": "Показать все ноды", "presenceStatusHint": "Чем вы занимаетесь?", "presenceStatusLabel": "Статус", "presenceStatusNotSet": "Не задан", "presenceStatusUpdated": "Статус обновлён", "presenceTitle": "Присутствие", "presenceTryDifferent": "Попробуйте другой запрос или фильтр", - "presenceWillAppear": "Узлы появятся здесь по мере обнаружения", + "presenceWillAppear": "Ноды появятся здесь по мере обнаружения", "productDetailAnonymous": "Аноним", "productDetailBattery": "Аккумулятор", "productDetailBeFirstReviewer": "Станьте первым, кто оставит отзыв на этот товар!", @@ -3553,9 +3553,9 @@ "profileUrlMustStartHttp": "URL должен начинаться с http:// или https://", "profileWebsiteHint": "https://example.com", "profileWebsiteLabel": "Веб-сайт", - "qrScannerAddNodeConfirm": "Добавить узел", - "qrScannerAddNodePrompt": "Добавить «{name}» в отслеживаемые узлы?", - "qrScannerAddNodeTitle": "Добавить узел", + "qrScannerAddNodeConfirm": "Добавить ноду", + "qrScannerAddNodePrompt": "Добавить «{name}» в отслеживаемые ноды?", + "qrScannerAddNodeTitle": "Добавить ноду", "qrScannerCancel": "Отмена", "qrScannerCancelAdd": "Отмена", "qrScannerChannelAlreadyExists": "У вас уже есть этот канал под названием «{name}»", @@ -3572,14 +3572,14 @@ "qrScannerImportFailed": "Импорт не выполнен: {error}", "qrScannerImportedChannelName": "Импортировано", "qrScannerMaxChannels": "Максимум 8 каналов — сначала удалите один", - "qrScannerNodeAddedToFavorites": "Узел «{name}» добавлен в избранное", - "qrScannerNodeAlreadyExists": "Узел уже существует", - "qrScannerNodeAlreadyInList": "Этот узел уже есть в вашем списке под именем «{name}».", - "qrScannerNodeInfoId": "ID узла", + "qrScannerNodeAddedToFavorites": "Нода «{name}» добавлена в избранное", + "qrScannerNodeAlreadyExists": "Нода уже существует", + "qrScannerNodeAlreadyInList": "Эта нода уже есть в вашем списке под именем «{name}».", + "qrScannerNodeInfoId": "ID ноды", "qrScannerNodeInfoName": "Название", "qrScannerNodeInfoShort": "Краткое", "qrScannerPrompt": "Наведите камеру на QR-код", - "qrScannerSupportsHint": "Поддерживаются узлы, каналы, автоматизации и многое другое", + "qrScannerSupportsHint": "Поддерживаются ноды, каналы, автоматизации и многое другое", "qrScannerTitle": "Сканировать QR-код", "qrScannerUpdate": "Обновить", "qrScannerUpdateNamePrompt": "Обновить имя на «{name}» и добавить в избранное?", @@ -3587,10 +3587,10 @@ "reachabilityAboutTooltip": "О достижимости", "reachabilityBetaBadge": "БЕТА", "reachabilityDisclaimerBanner": "Только оценки вероятности. Доставка в сети никогда не гарантирована.", - "reachabilityEmptyDescription": "Узлы будут появляться по мере их обнаружения\nв сети.", - "reachabilityEmptyTitle": "Узлы ещё не обнаружены", + "reachabilityEmptyDescription": "Ноды будут появляться по мере их обнаружения\nв сети.", + "reachabilityEmptyTitle": "Ноды ещё не обнаружены", "reachabilityGotIt": "Понятно", - "reachabilityHowCalculatedContent": "Оценка вероятности учитывает несколько факторов:\n• Актуальность: как давно мы получали сигнал от узла\n• Глубина пути: наблюдаемое число прыжков\n• Качество сигнала: RSSI и SNR при наличии данных\n• Характер наблюдений: прямые или ретранслированные пакеты\n• История ACK: успешность подтверждений личных сообщений", + "reachabilityHowCalculatedContent": "Оценка вероятности учитывает несколько факторов:\n• Актуальность: как давно мы получали сигнал от ноды\n• Глубина пути: наблюдаемое число прыжков\n• Качество сигнала: RSSI и SNR при наличии данных\n• Характер наблюдений: прямые или ретранслированные пакеты\n• История ACK: успешность подтверждений личных сообщений", "reachabilityHowCalculatedTitle": "Как рассчитывается?", "reachabilityLevelHigh": "Высокая", "reachabilityLevelLow": "Низкая", @@ -3600,11 +3600,11 @@ "reachabilityLimitationsContent": "• Meshtastic не имеет истинных таблиц маршрутизации\n• Сквозных подтверждений не существует\n• Пересылка осуществляется по возможности\n• Топология сети постоянно меняется\n• Все оценки основаны только на пассивном наблюдении", "reachabilityLimitationsTitle": "Важные ограничения", "reachabilityScorePercent": "{percentage}%", - "reachabilityScoringModelContent": "Модель оценки вероятности достижения узла (v1) — БЕТА\n\nЭвристическая модель, определяющая вероятность доставки до узла на основе наблюдаемых RF-метрик и истории пакетов. Оценка отражает вероятность, а не гарантию достижимости. Meshtastic пересылает пакеты по возможности без маршрутизации. Высокая оценка не гарантирует доставку.", + "reachabilityScoringModelContent": "Модель оценки вероятности достижения ноды (v1) — БЕТА\n\nЭвристическая модель, определяющая вероятность доставки до ноды на основе наблюдаемых RF-метрик и истории пакетов. Оценка отражает вероятность, а не гарантию достижимости. Meshtastic пересылает пакеты по возможности без маршрутизации. Высокая оценка не гарантирует доставку.", "reachabilityScoringModelTitle": "Модель оценки", "reachabilityScreenTitle": "Достижимость", - "reachabilitySearchHint": "Поиск узлов", - "reachabilityWhatIsThisContent": "На этом экране отображается вероятностная оценка того, насколько вероятно, что ваши сообщения дойдут до каждого узла. Это НЕ гарантия доставки.", + "reachabilitySearchHint": "Поиск нод", + "reachabilityWhatIsThisContent": "На этом экране отображается вероятностная оценка того, насколько вероятно, что ваши сообщения дойдут до каждой ноды. Это НЕ гарантия доставки.", "reachabilityWhatIsThisTitle": "Что это такое?", "regionSelectionApplyDialogConfirm": "Продолжить", "regionSelectionApplyDialogMessageChange": "Изменение региона приведёт к перезагрузке устройства. Это может занять до 30 секунд.\n\nВо время перезапуска устройства соединение будет кратковременно прервано.", @@ -3704,7 +3704,7 @@ "reviewModerationRejected": "Отзыв отклонён", "reviewModerationTitle": "Управление отзывами", "reviewModerationVerified": "Подтверждённый", - "routeDetailCenterOnNodeTooltip": "Центрировать на узле", + "routeDetailCenterOnNodeTooltip": "Центрировать на ноде", "routeDetailDistanceKilometers": "{km} км", "routeDetailDistanceLabel": "Расстояние", "routeDetailDistanceMeters": "{meters} м", @@ -3875,7 +3875,7 @@ "serialConfigTxdGpioSubtitle": "Номер GPIO-вывода для передачи данных", "settingsClearAllDataFailed": "Не удалось очистить некоторые данные: {error}", "settingsClearAllDataLabel": "Очистить всё", - "settingsClearAllDataMessage": "Это удалит ВСЕ данные приложения: сообщения, узлы, каналы, настройки, ключи, сигналы, закладки, автоматизации, виджеты и сохранённые параметры. Это действие нельзя отменить.", + "settingsClearAllDataMessage": "Это удалит ВСЕ данные приложения: сообщения, ноды, каналы, настройки, ключи, сигналы, закладки, автоматизации, виджеты и сохранённые параметры. Это действие нельзя отменить.", "settingsClearAllDataSuccess": "Все данные успешно очищены", "settingsClearAllDataTitle": "Очистить все данные", "settingsClearMessagesLabel": "Очистить", @@ -3886,7 +3886,7 @@ "settingsDeviceInfoDeviceName": "Имя устройства", "settingsDeviceInfoHardware": "Оборудование", "settingsDeviceInfoLongName": "Полное имя", - "settingsDeviceInfoNodeNumber": "Номер узла", + "settingsDeviceInfoNodeNumber": "Номер ноды", "settingsDeviceInfoNone": "Нет", "settingsDeviceInfoNotConnected": "Не подключено", "settingsDeviceInfoShortName": "Краткое имя", @@ -3896,7 +3896,7 @@ "settingsErrorLoading": "Ошибка загрузки настроек: {error}", "settingsForceSyncFailed": "Синхронизация не удалась: {error}", "settingsForceSyncLabel": "Синхронизировать", - "settingsForceSyncMessage": "Это очистит все локальные сообщения, узлы и каналы, а затем повторно синхронизирует всё с подключённым устройством.\n\nВы уверены, что хотите продолжить?", + "settingsForceSyncMessage": "Это очистит все локальные сообщения, ноды и каналы, а затем повторно синхронизирует всё с подключённым устройством.\n\nВы уверены, что хотите продолжить?", "settingsForceSyncNotConnected": "Устройство не подключено", "settingsForceSyncSuccess": "Синхронизация завершена", "settingsForceSyncTitle": "Принудительная синхронизация", @@ -3930,12 +3930,12 @@ "settingsProfileTitle": "Профиль", "settingsRegionConfigureSubtitle": "Настройка радиочастоты устройства", "settingsRemoteAdminConfigureTitle": "Настройка устройства", - "settingsRemoteAdminConfiguringTitle": "Настройка удалённого узла", + "settingsRemoteAdminConfiguringTitle": "Настройка удалённой ноды", "settingsRemoteAdminConnectedDevice": "Подключённое устройство", - "settingsRemoteAdminNodeCount": "{count} узлов", - "settingsRemoteAdminWarning": "Для удалённого администрирования необходимо, чтобы ваш открытый ключ был добавлен в список ключей администратора целевого узла.", + "settingsRemoteAdminNodeCount": "{count} нод", + "settingsRemoteAdminWarning": "Для удалённого администрирования необходимо, чтобы ваш открытый ключ был добавлен в список ключей администратора целевой ноды.", "settingsResetLocalDataLabel": "Сбросить", - "settingsResetLocalDataMessage": "Это очистит все сообщения и данные узлов, что вынудит выполнить свежую синхронизацию с устройством при следующем подключении.\n\nВаши настройки, тема и параметры будут сохранены.\n\nИспользуйте это, если узлы показывают некорректный статус или сообщения отображаются неправильно.", + "settingsResetLocalDataMessage": "Это очистит все сообщения и данные нод, что вынудит выполнить свежую синхронизацию с устройством при следующем подключении.\n\nВаши настройки, тема и параметры будут сохранены.\n\nИспользуйте это, если ноды показывают некорректный статус или сообщения отображаются неправильно.", "settingsResetLocalDataSuccess": "Локальные данные сброшены. Подключитесь повторно для синхронизации.", "settingsResetLocalDataTitle": "Сбросить локальные данные", "settingsSearchAutoAcceptTransfersSubtitle": "Автоматически принимать входящие предложения файлов", @@ -3968,8 +3968,8 @@ "settingsSearchLinkedDevicesSubtitle": "Устройства Meshtastic, привязанные к вашему профилю", "settingsSearchLinkedDevicesTitle": "Привязанные устройства", "settingsSearchNewFollowersSubtitle": "Push-уведомления, когда кто-то подписывается на вас", - "settingsSearchNewNodesNotificationsSubtitle": "Уведомлять о появлении новых узлов в сети", - "settingsSearchNewNodesNotificationsTitle": "Уведомления о новых узлах", + "settingsSearchNewNodesNotificationsSubtitle": "Уведомлять о появлении новых нод в сети", + "settingsSearchNewNodesNotificationsTitle": "Уведомления о новых нодах", "settingsSearchNotificationSoundSubtitle": "Воспроизводить звук при уведомлениях", "settingsSearchNotificationSoundTitle": "Звук уведомлений", "settingsSearchNotificationVibrationSubtitle": "Вибрировать при уведомлениях", @@ -3978,7 +3978,7 @@ "settingsSearchProfileSubtitle": "Ваше отображаемое имя, аватар и описание", "settingsSearchRegionSubtitle": "Регион радиочастоты устройства", "settingsSearchRegionTitle": "Регион", - "settingsSearchRemoteAdminSubtitle": "Настройка удалённых узлов через PKI-администрирование", + "settingsSearchRemoteAdminSubtitle": "Настройка удалённых нод через PKI-администрирование", "settingsSearchRemoteAdminTitle": "Удалённое администрирование", "settingsSearchResetLocalDataSubtitle": "Очистить все локальные данные приложения", "settingsSearchResetLocalDataTitle": "Сбросить локальные данные", @@ -4093,8 +4093,8 @@ "settingsTileMyBugReportsTitle": "Мои отчёты об ошибках", "settingsTileNetworkSubtitle": "Настройки WiFi, Ethernet, NTP", "settingsTileNetworkTitle": "Сеть", - "settingsTileNewNodesSubtitle": "Уведомлять о появлении новых узлов в сети", - "settingsTileNewNodesTitle": "Новые узлы", + "settingsTileNewNodesSubtitle": "Уведомлять о появлении новых нод в сети", + "settingsTileNewNodesTitle": "Новые ноды", "settingsTileOpenSourceSubtitle": "Сторонние библиотеки и атрибуции", "settingsTileOpenSourceTitle": "Лицензии на ПО с открытым кодом", "settingsTilePaxCounterLogsSubtitle": "История обнаружения устройств", @@ -4119,14 +4119,14 @@ "settingsTileQuickResponsesTitle": "Быстрые ответы", "settingsTileRadioConfigSubtitle": "Настройки LoRa, предустановка модема, мощность", "settingsTileRadioConfigTitle": "Конфигурация радио", - "settingsTileRangeTestSubtitle": "Проверка дальности сигнала с другими узлами", + "settingsTileRangeTestSubtitle": "Проверка дальности сигнала с другими нодами", "settingsTileRangeTestTitle": "Тест дальности", "settingsTileRegionTitle": "Регион / Частота", - "settingsTileResetLocalDataSubtitle": "Очистить сообщения и узлы, сохранив настройки", + "settingsTileResetLocalDataSubtitle": "Очистить сообщения и ноды, сохранив настройки", "settingsTileResetLocalDataTitle": "Сбросить локальные данные", "settingsTileRoutesSubtitle": "Запись и управление GPS-маршрутами", "settingsTileRoutesTitle": "Маршруты", - "settingsTileScanQrCodeSubtitle": "Импорт узлов, каналов или автоматизаций", + "settingsTileScanQrCodeSubtitle": "Импорт нод, каналов или автоматизаций", "settingsTileScanQrCodeTitle": "Сканировать QR-код", "settingsTileSecuritySubtitle": "Контроль доступа, управляемый режим", "settingsTileSecurityTitle": "Безопасность", @@ -4138,7 +4138,7 @@ "settingsTileSocialmeshTitle": "Socialmesh", "settingsTileSoundSubtitle": "Воспроизводить звук при уведомлениях", "settingsTileSoundTitle": "Звук", - "settingsTileStoreForwardSubtitle": "Хранить и пересылать сообщения для отключённых узлов", + "settingsTileStoreForwardSubtitle": "Хранить и пересылать сообщения для отключённых нод", "settingsTileStoreForwardTitle": "Хранение и пересылка", "settingsTileTelemetryIntervalsSubtitle": "Настройка частоты обновления телеметрии", "settingsTileTelemetryIntervalsTitle": "Интервалы телеметрии", @@ -4219,7 +4219,7 @@ "shopModelCategoryKitsDescription": "DIY-наборы и комплекты", "shopModelCategoryModules": "Модули", "shopModelCategoryModulesDescription": "Дополнительные модули и платы", - "shopModelCategoryNodes": "Узлы", + "shopModelCategoryNodes": "Ноды", "shopModelCategoryNodesDescription": "Готовые устройства Meshtastic", "shopModelCategorySolar": "Солнечная энергия", "shopModelCategorySolarDescription": "Солнечные панели и решения для питания", @@ -4284,7 +4284,7 @@ "signalDurationSubtitle": "Через сколько времени сигнал угаснет", "signalEmptyTagline1": "Здесь пока нет активных сигналов.\nСигналы появляются, когда кто-то поблизости становится активным.", "signalEmptyTagline2": "Сигналы работают через сеть и существуют временно.\nОни исчезают по истечении таймера.", - "signalEmptyTagline3": "Поделитесь статусом или фото.\nБлижайшие узлы увидят это в реальном времени.", + "signalEmptyTagline3": "Поделитесь статусом или фото.\nБлижайшие ноды увидят это в реальном времени.", "signalEmptyTagline4": "Станьте активным, чтобы оповестить о своём присутствии.\nБез интернета, напрямую между устройствами.", "signalEmptyTitleKeyword": "сигналов", "signalEmptyTitlePrefix": "Нет активных ", @@ -4568,11 +4568,11 @@ "socialCreatePostLocationSheetTitle": "Добавить местоположение", "socialCreatePostManualDesc": "Введите название места", "socialCreatePostMaxImages": "Максимально допустимо {max} изображений", - "socialCreatePostNoNodes": "Нет доступных узлов. Сначала подключитесь к сети.", - "socialCreatePostNodeLabel": "Узел {nodeId}", + "socialCreatePostNoNodes": "Нет доступных нод. Сначала подключитесь к сети.", + "socialCreatePostNodeLabel": "Нода {nodeId}", "socialCreatePostSignIn": "Войдите, чтобы создавать публикации", - "socialCreatePostTagNode": "Отметить узел", - "socialCreatePostTagNodeTitle": "Отметить узел", + "socialCreatePostTagNode": "Отметить нода", + "socialCreatePostTagNodeTitle": "Отметить нода", "socialCreatePostTitle": "Создать публикацию", "socialCreatePostUseCurrent": "Использовать текущее местоположение", "socialCreateStoryCamera": "Камера", @@ -4583,7 +4583,7 @@ "socialCreateStoryFailed": "Не удалось создать историю", "socialCreateStoryFollowers": "Подписчики", "socialCreateStoryItemsCount": "{count} элементов", - "socialCreateStoryLinkNode": "Привязать узел", + "socialCreateStoryLinkNode": "Привязать ноду", "socialCreateStoryLocationFailed": "Не удалось определить местоположение", "socialCreateStoryLocationRequired": "Требуется разрешение на доступ к местоположению", "socialCreateStoryPublic": "Публично", @@ -4611,7 +4611,7 @@ "socialEditProfile": "Редактировать профиль", "socialEmailCopied": "Электронная почта скопирована в буфер обмена", "socialEmptyPostsTagline1": "Делитесь фото и историями о ваших приключениях в сети.", - "socialEmptyPostsTagline2": "Публикуйте о настройке узлов, тестах дальности и открытиях.", + "socialEmptyPostsTagline2": "Публикуйте о настройке нод, тестах дальности и открытиях.", "socialEmptyPostsTagline3": "Сообщество сети ждёт, чтобы увидеть, что вы создаёте.", "socialEmptyPostsTagline4": "Документируйте свои приключения и делитесь ими с сетью.", "socialErrorLoadingReports": "Ошибка загрузки жалоб", @@ -4652,13 +4652,13 @@ "socialHubTitle": "Социальный", "socialIUnderstand": "Понятно", "socialImageBlockedByModeration": "Изображение заблокировано модерацией", - "socialInvalidNodeId": "Недействительный идентификатор узла", + "socialInvalidNodeId": "Недействительный идентификатор ноды", "socialJoined": "Присоединился {date}", "socialLike": "Нравится", "socialLiked": "Понравилось", "socialLikePlural": "отметок «Нравится»", "socialLikeSingular": "отметка «Нравится»", - "socialLinkNodeHint": "Привяжите узел сети к следующей публикации", + "socialLinkNodeHint": "Привяжите нода сети к следующей публикации", "socialLocationFallback": "Местоположение", "socialModerationAdditionalNotes": "Дополнительные заметки (необязательно)", "socialModerationApprove": "Одобрить", @@ -4688,7 +4688,7 @@ "socialNoContent": "Нет контента", "socialNoFollowersYet": "Подписчиков пока нет", "socialNoLocationPosts": "Нет публикаций с геолокацией", - "socialNoNodePosts": "Нет публикаций от узлов", + "socialNoNodePosts": "Нет публикаций от нод", "socialNoPendingFilterReports": "Нет ожидающих жалоб по фильтру «{filter}»", "socialNoPendingReports": "Нет ожидающих жалоб", "socialNoPhotoPosts": "Нет фотопубликаций", @@ -4698,7 +4698,7 @@ "socialNoSuggestions": "Нет доступных предложений", "socialNoUsersFound": "Пользователи не найдены", "socialNoViewsYet": "Просмотров пока нет", - "socialNodeLabel": "Узел {nodeId}", + "socialNodeLabel": "Нода {nodeId}", "socialNotFollowingAnyone": "Вы пока ни на кого не подписаны", "socialNoticesCount": "{current} из {total} уведомлений", "socialOK": "ОК", @@ -4708,7 +4708,7 @@ "socialPhotoAccessDesc": "Для создания историй нам необходим доступ к вашей фотобиблиотеке.", "socialPhotoAccessTitle": "Разрешить доступ к фотографиям", "socialPostCardLocationFallback": "Местоположение", - "socialPostCardNodeLabel": "Узел {nodeId}", + "socialPostCardNodeLabel": "Нода {nodeId}", "socialPostCardUnknownUser": "Неизвестный пользователь", "socialPostDeleted": "Публикация удалена", "socialPostDetailTitle": "Публикация", @@ -4992,7 +4992,7 @@ "takFilterBarStaleModeStale": "Устаревшие", "takNavigateEta": "ОВП: {eta}", "takNavigateLastUpdate": "Последнее обновление", - "takNavigateNoPosition": "Позиция недоступна\nПодключитесь к узлу с GPS", + "takNavigateNoPosition": "Позиция недоступна\nПодключитесь к ноде с GPS", "takNavigatePosition": "Позиция", "takNavigateRelativeTimeDays": "{count}д назад", "takNavigateRelativeTimeHours": "{count}ч назад", @@ -5026,8 +5026,8 @@ "takSettingsAlertUnknown": "Неизвестный", "takSettingsAutoConnectSubtitle": "Автоматически подключаться при открытии TAK экранов", "takSettingsAutoConnectTitle": "Автоподключение при открытии", - "takSettingsCallsignDefault": "Используется имя узла", - "takSettingsCallsignEditorHint": "Оставьте пустым, чтобы использовать имя вашего узла", + "takSettingsCallsignDefault": "Используется имя ноды", + "takSettingsCallsignEditorHint": "Оставьте пустым, чтобы использовать имя вашей ноды", "takSettingsCallsignEditorPlaceholder": "например, HIKER-7", "takSettingsCallsignEditorTitle": "Переопределение callsign", "takSettingsCallsignTitle": "Переопределение callsign", @@ -5043,7 +5043,7 @@ "takSettingsMapLayerTitle": "Показывать TAK слой на карте", "takSettingsProximitySubtitle": "Уведомлять, когда неопознанные объекты входят в радиус", "takSettingsProximityTitle": "Включить оповещения о близости", - "takSettingsPublishSubtitle": "Публиковать позицию вашего узла для операторов ATAK/WinTAK", + "takSettingsPublishSubtitle": "Публиковать позицию вашей ноды для операторов ATAK/WinTAK", "takSettingsPublishTitle": "Публиковать мою позицию", "takSettingsRadiusSubtitle": "{km} км", "takSettingsRadiusTitle": "Радиус оповещения", @@ -5102,7 +5102,7 @@ "telemetryAirQualityPmStandard": "Взвешенные частицы (стандарт)", "telemetryAirQualityTitle": "Журнал качества воздуха", "telemetryAirQualityUnitMicrogram": "µg/m³", - "telemetryAllNodes": "Все узлы", + "telemetryAllNodes": "Все ноды", "telemetryAqiGood": "Хорошее", "telemetryAqiHazardous": "Опасное", "telemetryAqiModerate": "Умеренное", @@ -5117,7 +5117,7 @@ "telemetryCo2Label": "CO₂ — {rating}", "telemetryCo2Poor": "Плохое", "telemetryConfigAirQualityDesc": "PM1.0, PM2.5, PM10, количество частиц, CO2", - "telemetryConfigAirtimeWarning": "Данные телеметрии передаются всем узлам сети. Более короткие интервалы увеличивают использование эфирного времени.", + "telemetryConfigAirtimeWarning": "Данные телеметрии передаются всем нодам сети. Более короткие интервалы увеличивают использование эфирного времени.", "telemetryConfigDeviceMetricsDesc": "Уровень заряда аккумулятора, напряжение, загруженность канала, TX эфирного времени", "telemetryConfigDisplayFahrenheit": "Отображать в Фаренгейтах", "telemetryConfigDisplayFahrenheitSubtitle": "Показывать температуру в градусах Фаренгейта вместо Цельсия", @@ -5192,19 +5192,19 @@ "telemetryPaxTitle": "Журнал PAX-счётчика", "telemetryPaxUptime": "Время работы: {uptime}", "telemetryPaxWifi": "WiFi", - "telemetryPositionAllNodesDescription": "Показать местоположения всех узлов", - "telemetryPositionAllNodesOption": "Все узлы", + "telemetryPositionAllNodesDescription": "Показать местоположения всех нод", + "telemetryPositionAllNodesOption": "Все ноды", "telemetryPositionClearLabel": "Очистить", - "telemetryPositionClearMessage": "Это действие безвозвратно удалит всю историю местоположений для всех узлов. Отменить невозможно.", + "telemetryPositionClearMessage": "Это действие безвозвратно удалит всю историю местоположений для всех нод. Отменить невозможно.", "telemetryPositionClearTitle": "Очистить данные о местоположении", "telemetryPositionCleared": "Данные о местоположении очищены", "telemetryPositionCount": "{count, plural, =1{{count} местоположение} few{{count} местоположения} many{{count} местоположений} other{{count} местоположения}}", "telemetryPositionDateRange": "Диапазон дат", - "telemetryPositionDrawerTitle": "Узлы", + "telemetryPositionDrawerTitle": "Ноды", "telemetryPositionExportSubject": "Экспорт местоположений Socialmesh", "telemetryPositionExportedCount": "Экспортировано {count} местоположений", "telemetryPositionFilterGoodFix": "Хороший сигнал", - "telemetryPositionFilterMyNode": "Мой узел", + "telemetryPositionFilterMyNode": "Моя нода", "telemetryPositionFilterThisWeek": "На этой неделе", "telemetryPositionFilterToday": "Сегодня", "telemetryPositionListView": "Список", @@ -5214,22 +5214,22 @@ "telemetryPositionNoExportData": "Нет данных о местоположении для экспорта", "telemetryPositionNoHistory": "История местоположений отсутствует", "telemetryPositionNoMatch": "Нет местоположений, соответствующих фильтрам", - "telemetryPositionNodesCount": "{count} узлов", + "telemetryPositionNodesCount": "{count} нод", "telemetryPositionStatDistance": "Расстояние", - "telemetryPositionStatNodes": "Узлы", + "telemetryPositionStatNodes": "Ноды", "telemetryPositionStatPoints": "Точки", "telemetryPositionTitle": "Местоположение", "telemetryReadingsCount": "{count} показаний", - "telemetrySearchByNode": "Поиск по узлу", - "telemetrySearchByNodeName": "Поиск по имени узла", + "telemetrySearchByNode": "Поиск по ноде", + "telemetrySearchByNodeName": "Поиск по имени ноды", "telemetrySettings": "Настройки", "telemetryStartDate": "Дата начала", "telemetryTracerouteClearLabel": "Очистить", "telemetryTracerouteClearMessage": "Это действие безвозвратно удалит всю историю трассировки для {scope}. Отменить невозможно.", "telemetryTracerouteClearTitle": "Очистить данные трассировки", "telemetryTracerouteCleared": "Данные трассировки очищены", - "telemetryTracerouteDirectConnection": "Прямое соединение — промежуточные узлы отсутствуют", - "telemetryTracerouteEmptyHint": "Запустите трассировку с узла, чтобы увидеть сетевые пути", + "telemetryTracerouteDirectConnection": "Прямое соединение — промежуточные ноды отсутствуют", + "telemetryTracerouteEmptyHint": "Запустите трассировку с ноды, чтобы увидеть сетевые пути", "telemetryTracerouteExportSubject": "Экспорт трассировки Socialmesh ({scope})", "telemetryTracerouteExportedCount": "Экспортировано {count} трассировок", "telemetryTracerouteFilterNoResponse": "Нет ответа", @@ -5250,7 +5250,7 @@ "timelineActivityWillAppear": "Активность будет отображаться здесь по мере возникновения", "timelineFilterAll": "Все", "timelineFilterMessages": "Сообщения", - "timelineFilterNodes": "Узлы", + "timelineFilterNodes": "Ноды", "timelineFilterSignals": "Сигналы", "timelineFilterWaypoints": "Точки маршрута", "timelineFriday": "Пятница", @@ -5281,7 +5281,7 @@ "widgetBuilderActionNoAction": "Без действия", "widgetBuilderActionOpenUrl": "Открыть URL", "widgetBuilderActionRequestPositions": "Запросить позиции", - "widgetBuilderActionRequestPositionsDesc": "Запросить у всех узлов передать своё местоположение", + "widgetBuilderActionRequestPositionsDesc": "Запросить у всех нод передать своё местоположение", "widgetBuilderActionRequestPositionsLabel": "Запросить позиции", "widgetBuilderActionSendMessage": "Отправить сообщение", "widgetBuilderActionSendMessageDesc": "Открыть редактор для отправки сообщения", @@ -5290,9 +5290,9 @@ "widgetBuilderActionShareLocationDesc": "Передать текущие координаты GPS", "widgetBuilderActionShareLocationLabel": "Поделиться местоположением", "widgetBuilderActionSosAlert": "SOS-оповещение", - "widgetBuilderActionSosAlertDesc": "Отправить экстренное оповещение всем узлам", + "widgetBuilderActionSosAlertDesc": "Отправить экстренное оповещение всем нодам", "widgetBuilderActionTraceroute": "Traceroute", - "widgetBuilderActionTracerouteDesc": "Проследить маршрут до узла", + "widgetBuilderActionTracerouteDesc": "Проследить маршрут до ноды", "widgetBuilderActionTracerouteLabel": "Traceroute", "widgetBuilderAddAction": "Добавить действие", "widgetBuilderAddBlock": "Добавить блок", @@ -5311,12 +5311,12 @@ "widgetBuilderAddToDashboard": "Добавить на панель", "widgetBuilderAddedToDashboard": "{name} добавлен на панель", "widgetBuilderAll": "Все", - "widgetBuilderAllNodes": "Все узлы", + "widgetBuilderAllNodes": "Все ноды", "widgetBuilderApprovedSuccess": "{name} одобрен", - "widgetBuilderBindingActiveMeshNodes": "Активные узлы сети", - "widgetBuilderBindingActiveMeshNodesDesc": "Узлы, от которых недавно поступал сигнал", - "widgetBuilderBindingActiveMeshNodesLegacy": "Активные узлы сети (устаревшее)", - "widgetBuilderBindingActiveMeshNodesLegacyDesc": "Псевдоним счётчика активных узлов (для обратной совместимости)", + "widgetBuilderBindingActiveMeshNodes": "Активные ноды сети", + "widgetBuilderBindingActiveMeshNodesDesc": "Ноды, от которых недавно поступал сигнал", + "widgetBuilderBindingActiveMeshNodesLegacy": "Активные ноды сети (устаревшее)", + "widgetBuilderBindingActiveMeshNodesLegacyDesc": "Псевдоним счётчика активных нод (для обратной совместимости)", "widgetBuilderBindingAirtimeTx": "Эфирное время TX", "widgetBuilderBindingAirtimeTxDesc": "Использование эфирного времени при передаче", "widgetBuilderBindingAltitude": "Высота", @@ -5333,7 +5333,7 @@ "widgetBuilderBindingCategoryGps": "GPS", "widgetBuilderBindingCategoryMessages": "Сообщения", "widgetBuilderBindingCategoryNetwork": "Сеть", - "widgetBuilderBindingCategoryNodeInfo": "Информация об узле", + "widgetBuilderBindingCategoryNodeInfo": "Информация о ноде", "widgetBuilderBindingCategoryPower": "Питание", "widgetBuilderBindingCh1Current": "Ток канала 1", "widgetBuilderBindingCh1CurrentDesc": "Ток силового канала 1", @@ -5352,13 +5352,13 @@ "widgetBuilderBindingCo2": "CO2", "widgetBuilderBindingCo2Desc": "Концентрация CO2", "widgetBuilderBindingDisplayName": "Отображаемое имя", - "widgetBuilderBindingDisplayNameDesc": "Отображаемое имя узла (полное или короткое)", + "widgetBuilderBindingDisplayNameDesc": "Отображаемое имя ноды (полное или короткое)", "widgetBuilderBindingDistance": "Расстояние", - "widgetBuilderBindingDistanceDesc": "Расстояние до узла в метрах", + "widgetBuilderBindingDistanceDesc": "Расстояние до ноды в метрах", "widgetBuilderBindingFirmwareVersion": "Версия прошивки", "widgetBuilderBindingFirmwareVersionDesc": "Текущая версия прошивки", "widgetBuilderBindingFirstHeard": "Первый контакт", - "widgetBuilderBindingFirstHeardDesc": "Когда узел был обнаружен впервые", + "widgetBuilderBindingFirstHeardDesc": "Когда нода была обнаружена впервые", "widgetBuilderBindingGroundSpeed": "Скорость", "widgetBuilderBindingGroundSpeedDesc": "Скорость относительно земли", "widgetBuilderBindingHardwareModel": "Модель оборудования", @@ -5366,29 +5366,29 @@ "widgetBuilderBindingHeading": "Курс", "widgetBuilderBindingHeadingDesc": "Курс движения в градусах", "widgetBuilderBindingHopCount": "Количество хопов", - "widgetBuilderBindingHopCountDesc": "Число хопов от данного узла (0 = прямой сосед)", + "widgetBuilderBindingHopCountDesc": "Число хопов от данной ноды (0 = прямой сосед)", "widgetBuilderBindingHumidity": "Влажность", "widgetBuilderBindingHumidityDesc": "Относительная влажность в процентах", "widgetBuilderBindingIaqIndex": "Индекс IAQ", "widgetBuilderBindingIaqIndexDesc": "Индекс качества воздуха в помещении", "widgetBuilderBindingLastHeard": "Последний контакт", - "widgetBuilderBindingLastHeardDesc": "Когда от узла последний раз поступал сигнал", + "widgetBuilderBindingLastHeardDesc": "Когда от ноды последний раз поступал сигнал", "widgetBuilderBindingLatitude": "Широта", "widgetBuilderBindingLatitudeDesc": "Координата широты GPS", "widgetBuilderBindingLightLevel": "Освещённость", "widgetBuilderBindingLightLevelDesc": "Уровень окружающего освещения", "widgetBuilderBindingLongitude": "Долгота", "widgetBuilderBindingLongitudeDesc": "Координата долготы GPS", - "widgetBuilderBindingNodeName": "Имя узла", - "widgetBuilderBindingNodeNameDesc": "Полное имя узла", - "widgetBuilderBindingNodeNumber": "Номер узла", - "widgetBuilderBindingNodeNumberDesc": "Уникальный номер узла", - "widgetBuilderBindingNodeRole": "Роль узла", + "widgetBuilderBindingNodeName": "Имя ноды", + "widgetBuilderBindingNodeNameDesc": "Полное имя ноды", + "widgetBuilderBindingNodeNumber": "Номер ноды", + "widgetBuilderBindingNodeNumberDesc": "Уникальный номер ноды", + "widgetBuilderBindingNodeRole": "Роль ноды", "widgetBuilderBindingNodeRoleDesc": "Роль в сети (CLIENT, ROUTER и др.)", - "widgetBuilderBindingNodeStatus": "Статус узла", - "widgetBuilderBindingNodeStatusDesc": "Пользовательский статус-сообщение от узла", - "widgetBuilderBindingNodesHeard2h": "Узлы в эфире (2 ч)", - "widgetBuilderBindingNodesHeard2hDesc": "Метрика Meshtastic: узлы, от которых поступал сигнал за последние 2 часа", + "widgetBuilderBindingNodeStatus": "Статус ноды", + "widgetBuilderBindingNodeStatusDesc": "Пользовательский статус-сообщение от ноды", + "widgetBuilderBindingNodesHeard2h": "Ноды в эфире (2 ч)", + "widgetBuilderBindingNodesHeard2hDesc": "Метрика Meshtastic: ноды, от которых поступал сигнал за последние 2 часа", "widgetBuilderBindingNoiseFloor": "Шумовой порог", "widgetBuilderBindingNoiseFloorDesc": "Измеренный уровень шума в dBm", "widgetBuilderBindingPacketsRx": "Пакеты RX", @@ -5418,7 +5418,7 @@ "widgetBuilderBindingSatellites": "Спутники", "widgetBuilderBindingSatellitesDesc": "Количество видимых спутников GPS", "widgetBuilderBindingShortName": "Короткое имя", - "widgetBuilderBindingShortNameDesc": "Короткий 4-символьный идентификатор узла", + "widgetBuilderBindingShortNameDesc": "Короткий 4-символьный идентификатор ноды", "widgetBuilderBindingSnr": "SNR", "widgetBuilderBindingSnrDesc": "Отношение сигнал/шум", "widgetBuilderBindingSoilMoisture": "Влажность почвы", @@ -5427,16 +5427,16 @@ "widgetBuilderBindingSoilTemperatureDesc": "Температура почвы", "widgetBuilderBindingTemperature": "Температура", "widgetBuilderBindingTemperatureDesc": "Температура окружающей среды", - "widgetBuilderBindingTotalMeshNodes": "Всего узлов сети", - "widgetBuilderBindingTotalMeshNodesDesc": "Общее количество узлов в сети", - "widgetBuilderBindingTotalNodes": "Всего узлов", - "widgetBuilderBindingTotalNodesDesc": "Общее количество известных узлов", + "widgetBuilderBindingTotalMeshNodes": "Всего нод сети", + "widgetBuilderBindingTotalMeshNodesDesc": "Общее количество нод в сети", + "widgetBuilderBindingTotalNodes": "Всего нод", + "widgetBuilderBindingTotalNodesDesc": "Общее количество известных нод", "widgetBuilderBindingUnreadMessages": "Непрочитанные сообщения", "widgetBuilderBindingUnreadMessagesDesc": "Количество непрочитанных сообщений", "widgetBuilderBindingUptime": "Время работы", "widgetBuilderBindingUptimeDesc": "Время работы устройства в секундах", "widgetBuilderBindingViaMqtt": "Через MQTT", - "widgetBuilderBindingViaMqttDesc": "Получен ли последний сигнал от узла через MQTT", + "widgetBuilderBindingViaMqttDesc": "Получен ли последний сигнал от ноды через MQTT", "widgetBuilderBindingWindDirection": "Направление ветра", "widgetBuilderBindingWindDirectionDesc": "Направление ветра в градусах", "widgetBuilderBindingWindGust": "Порыв ветра", @@ -5594,7 +5594,7 @@ "widgetBuilderLivePreview": "Предпросмотр в реальном времени", "widgetBuilderLocationSharedMesh": "Местоположение передано в сеть", "widgetBuilderLocationSharedRecently": "Местоположение было недавно передано — подождите перед повторной отправкой", - "widgetBuilderLocationSharedWithNode": "Местоположение передано узлу {name}", + "widgetBuilderLocationSharedWithNode": "Местоположение передано ноде {name}", "widgetBuilderMakeUnique": "Сделайте виджет более уникальным перед отправкой.", "widgetBuilderMapView": "Вид карты", "widgetBuilderMarketplace": "Маркетплейс", @@ -5662,8 +5662,8 @@ "widgetBuilderNone": "Нет", "widgetBuilderOk": "ОК", "widgetBuilderOptions": "Параметры", - "widgetBuilderPickNodeThenSend": "Выберите узел, затем отправьте", - "widgetBuilderPickNodeToTrace": "Выберите узел для трассировки", + "widgetBuilderPickNodeThenSend": "Выберите ноду, затем отправьте", + "widgetBuilderPickNodeToTrace": "Выберите ноду для трассировки", "widgetBuilderPrebuiltWidgets": "Готовые виджеты для настройки", "widgetBuilderQuickMessageSheet": "Быстрая отправка сообщения", "widgetBuilderQuickStartTemplates": "Шаблоны для быстрого старта", @@ -5692,10 +5692,10 @@ "widgetBuilderShareTitle": "Поделиться виджетом", "widgetBuilderShowChannelPicker": "Показать выбор канала", "widgetBuilderShowChannelPickerDesc": "Позволить пользователю выбрать канал", - "widgetBuilderShowNodePickerFirst": "Сначала показать выбор узла", - "widgetBuilderShowNodePickerFirstDesc": "Позволить пользователю выбрать узел для сообщения", - "widgetBuilderShowNodePickerTrace": "Сначала показать выбор узла", - "widgetBuilderShowNodePickerTraceDesc": "Позволить пользователю выбрать узел для трассировки", + "widgetBuilderShowNodePickerFirst": "Сначала показать выбор ноды", + "widgetBuilderShowNodePickerFirstDesc": "Позволить пользователю выбрать ноду для сообщения", + "widgetBuilderShowNodePickerTrace": "Сначала показать выбор ноды", + "widgetBuilderShowNodePickerTraceDesc": "Позволить пользователю выбрать ноду для трассировки", "widgetBuilderSignInAction": "Войти", "widgetBuilderSignInToShare": "Войдите, чтобы делиться виджетами", "widgetBuilderSignInToSubmit": "Войдите, чтобы публиковать виджеты", @@ -5726,7 +5726,7 @@ "widgetBuilderTemplateSignalStrengthDesc": "Отслеживание подключения", "widgetBuilderThresholdLines": "Пороговые линии", "widgetBuilderToggleToolbox": "Показать/скрыть панель инструментов", - "widgetBuilderTraceRouteToNode": "Трассировать маршрут до узла", + "widgetBuilderTraceRouteToNode": "Трассировать маршрут до ноды", "widgetBuilderTypeDecimal": "десятичное", "widgetBuilderTypeGauge": "Шкала", "widgetBuilderTypeGaugeDesc": "Большой визуальный индикатор", @@ -5796,18 +5796,18 @@ "worldMeshFilterModemPreset": "Пресет модема", "worldMeshFilterNo": "Нет", "worldMeshFilterNoOptions": "Нет доступных вариантов", - "worldMeshFilterNodeCount": "{filteredCount} из {totalCount} узлов", - "worldMeshFilterNodeRole": "Роль узла", - "worldMeshFilterNodesWithBattery": "{count} узлов с данными о батарее", - "worldMeshFilterNodesWithSensors": "{count} узлов с датчиками", + "worldMeshFilterNodeCount": "{filteredCount} из {totalCount} нод", + "worldMeshFilterNodeRole": "Роль ноды", + "worldMeshFilterNodesWithBattery": "{count} нод с данными о батарее", + "worldMeshFilterNodesWithSensors": "{count} нод с датчиками", "worldMeshFilterRegion": "Регион", "worldMeshFilterStatus": "Статус", "worldMeshFilterStatusActive": "Активен (≤2 мин)", "worldMeshFilterStatusFading": "Затухает (2–10 мин)", "worldMeshFilterStatusInactive": "Неактивен (10–60 мин)", "worldMeshFilterStatusUnknown": "Неизвестно (>60 мин)", - "worldMeshFilterTitle": "Фильтр узлов", - "worldMeshFilterTooltip": "Фильтровать узлы", + "worldMeshFilterTitle": "Фильтр нод", + "worldMeshFilterTooltip": "Фильтровать ноды", "worldMeshFilterYes": "Да", "worldMeshFocus": "Фокус", "worldMeshFsplSubtitle": "FSPL: {db} дБ", @@ -5816,7 +5816,7 @@ "worldMeshInfoCoordinates": "Координаты", "worldMeshInfoFirmware": "Прошивка", "worldMeshInfoHardware": "Оборудование", - "worldMeshInfoLocalNodes": "Локальные узлы", + "worldMeshInfoLocalNodes": "Локальные ноды", "worldMeshInfoModem": "Модем", "worldMeshInfoPrecision": "Точность", "worldMeshInfoRegion": "Регион", @@ -5826,7 +5826,7 @@ "worldMeshLegendIdle": "Простаивает (1–24 ч)", "worldMeshLegendOffline": "Офлайн (>24 ч)", "worldMeshLinkBudgetCopied": "Энергетический бюджет скопирован в буфер обмена", - "worldMeshLoadingNodeInfo": "Загрузка информации об узле...", + "worldMeshLoadingNodeInfo": "Загрузка информации о ноде...", "worldMeshLongPressHint": "Удерживайте для вызова действий", "worldMeshLosAnalysis": "Анализ прямой видимости", "worldMeshLosBulgeAndFresnel": "Выпуклость: {bulge} м · F1: {fresnel} м", @@ -5838,13 +5838,13 @@ "worldMeshMapStyleTerrain": "Рельеф", "worldMeshMeasurePointA": "A", "worldMeshMeasurePointB": "B", - "worldMeshMeasureTapA": "Нажмите на узел или карту для точки A", - "worldMeshMeasureTapB": "Нажмите на узел или карту для точки B", + "worldMeshMeasureTapA": "Нажмите на ноду или карту для точки A", + "worldMeshMeasureTapB": "Нажмите на ноду или карту для точки B", "worldMeshMeasurementActions": "Действия с измерением", "worldMeshMeasurementCopied": "Измерение скопировано в буфер обмена", "worldMeshMoreGateways": " +{count} ещё", "worldMeshNewMeasurement": "Новое измерение", - "worldMeshNodeIdCopied": "ID узла скопирован", + "worldMeshNodeIdCopied": "ID ноды скопирован", "worldMeshOpenMidpointInMaps": "Открыть середину в картах", "worldMeshOpenMidpointSubtitle": "Открыть во внешнем картографическом приложении", "worldMeshRefresh": "Обновить", @@ -5855,7 +5855,7 @@ "worldMeshRfLinkBudget": "Энергетический бюджет RF", "worldMeshRfLinkBudgetClipboard": "Энергетический бюджет RF (потери в свободном пространстве)\nРасстояние: {distance}\nЧастота: {frequency}\nПотери пути: {pathLoss}\nЗапас линии: {linkMargin}", "worldMeshScrollForMore": "Прокрутите для просмотра...", - "worldMeshSearchHint": "Найти узел", + "worldMeshSearchHint": "Найти ноду", "worldMeshSearchResultCount": "{count} результатов", "worldMeshSectionDevice": "Устройство", "worldMeshSectionDeviceMetrics": "Метрики устройства", @@ -5943,15 +5943,15 @@ "channelKeyCopy": "Копировать", "channelKeyCopied": "Ключ скопирован в буфер обмена", "remoteAdminTitle": "Удалённое администрирование", - "remoteAdminSearchHint": "Поиск узлов...", + "remoteAdminSearchHint": "Поиск нод...", "remoteAdminConnectedDevice": "Подключённое устройство", "remoteAdminLocalVia": "Локально (через BLE/USB)", "remoteAdminPkiEnabledNodes": "УЗЛЫ С PKI", "remoteAdminNodesAvailable": "{count} доступно", - "remoteAdminRequiresPki": "Для удалённого администрирования целевой узел должен иметь ваш публичный ключ в списке Admin Keys.", - "remoteAdminNoNodes": "Нет узлов с включённым PKI", - "remoteAdminNoMatchingNodes": "Нет узлов, соответствующих запросу «{query}»", - "remoteAdminNodesNeedPki": "Узлам требуется включённое PKI-шифрование\nдля принятия команд удалённого администрирования", + "remoteAdminRequiresPki": "Для удалённого администрирования целевая нода должен иметь ваш публичный ключ в списке Admin Keys.", + "remoteAdminNoNodes": "Нет нод с включённым PKI", + "remoteAdminNoMatchingNodes": "Нет нод, соответствующих запросу «{query}»", + "remoteAdminNodesNeedPki": "Нодам требуется включённое PKI-шифрование\nдля принятия команд удалённого администрирования", "remoteAdminPkiEnabled": "• PKI включено", "contentModerationNotAllowedTitle": "Контент не разрешён", "contentModerationMayViolateTitle": "Контент может нарушать правила", @@ -6022,8 +6022,8 @@ "albumRarityPageTitle": "Карточки {rarity}", "actionSheetQuickMessage": "Быстрое сообщение", "actionSheetTo": "КОМУ", - "actionSheetAllNodes": "Все узлы", - "actionSheetBroadcastToAll": "Трансляция всем узлам", + "actionSheetAllNodes": "Все ноды", + "actionSheetBroadcastToAll": "Трансляция всем нодам", "actionSheetBroadcastToEveryone": "Трансляция всем в канале", "actionSheetSendTo": "Отправить", "actionSheetQuickMessageLabel": "БЫСТРОЕ СООБЩЕНИЕ", @@ -6041,20 +6041,20 @@ "actionSheetPresetWeatherAlert": "Погодное предупреждение", "actionSheetEmergencySos": "Экстренный SOS", "actionSheetThisWill": "Это действие:", - "actionSheetSosBroadcast": "Транслирует экстренное сообщение ВСЕМ узлам", + "actionSheetSosBroadcast": "Транслирует экстренное сообщение ВСЕМ нодам", "actionSheetSosLocation": "Включает ваше текущее местоположение (если доступно)", "actionSheetSosIfttt": "Активирует IFTTT webhook (если настроен)", "actionSheetSosReady": "Готово к отправке экстренного сигнала", "actionSheetSosCountdown": "Подождите {seconds} секунд...", "actionSheetSendSos": "Отправить SOS", - "actionSheetSosSent": "Экстренный SOS отправлен всем узлам", + "actionSheetSosSent": "Экстренный SOS отправлен всем нодам", "actionSheetSosFailed": "Не удалось отправить SOS: {error}", "actionSheetTraceroute": "Трассировка", "actionSheetTracerouteTo": "Трассировка до", - "actionSheetTracerouteInfo": "Трассировка определяет путь пакетов до узла через сеть Mesh", + "actionSheetTracerouteInfo": "Трассировка определяет путь пакетов до ноды через сеть Mesh", "actionSheetTargetNode": "ЦЕЛЕВОЙ УЗЕЛ", "actionSheetSelected": "Выбран", - "actionSheetTapToSelectNode": "Нажмите для выбора узла", + "actionSheetTapToSelectNode": "Нажмите для выбора ноды", "actionSheetTrace": "Трассировать", "actionSheetTracerouteSent": "Трассировка отправлена к {target} — проверьте Историю трассировок для результатов", "actionSheetTracerouteFailed": "Не удалось выполнить трассировку: {error}", @@ -6099,12 +6099,12 @@ "premiumBenefitUnlimitedAutomations": "Неограниченные автоматизации", "premiumBenefitUnlimitedAutomationsDesc": "Создавайте столько правил, сколько вам нужно", "premiumBenefitSmartNotifications": "Умные уведомления", - "premiumBenefitSmartNotificationsDesc": "Получайте оповещения о заряде батареи, узлах не в сети и многом другом", + "premiumBenefitSmartNotificationsDesc": "Получайте оповещения о заряде батареи, нодах не в сети и многом другом", "premiumBenefitScheduledActions": "Запланированные действия", "premiumBenefitScheduledActionsDesc": "Запускайте автоматизации в определённое время", "premiumBenefitScheduledActionsShort": "Запуск в заданное время", "premiumBenefitGeofenceTriggers": "Геозонные триггеры", - "premiumBenefitGeofenceTriggersDesc": "Реагируйте, когда узлы входят в зону или покидают её", + "premiumBenefitGeofenceTriggersDesc": "Реагируйте, когда ноды входят в зону или покидают её", "premiumBenefitGeofenceTriggersShort": "Реакция на события по местоположению", "premiumBenefitConnect700": "Подключить 700+ сервисов", "premiumBenefitConnect700Desc": "Умный дом, уведомления, таблицы и многое другое", @@ -6149,7 +6149,7 @@ "premiumBenefitCustomLayouts": "Пользовательские макеты", "premiumBenefitCustomLayoutsDesc": "Создавайте собственные представления", "premiumBenefitSmartAlerts": "Умные оповещения", - "premiumBenefitSmartAlertsDesc": "Низкий заряд батареи, узел не в сети и многое другое", + "premiumBenefitSmartAlertsDesc": "Низкий заряд батареи, нода не в сети и многое другое", "settingsPremiumFeatureRequired": "Для использования этой функции требуется покупка", "settingsPremiumViewUpgrades": "Посмотреть улучшения", "settingsPremiumPro": "PRO", @@ -6198,11 +6198,11 @@ "storeForwardSave": "Сохранить", "storeForwardModuleSettings": "Настройки модуля", "storeForwardServerSettings": "Настройки сервера", - "storeForwardInfoDescription": "Позволяет узлам хранить сообщения и пересылать их устройствам, которые были офлайн. Требуется достаточно памяти.", + "storeForwardInfoDescription": "Позволяет нодам хранить сообщения и пересылать их устройствам, которые были офлайн. Требуется достаточно памяти.", "storeForwardEnable": "Включить сохранение и пересылку", "storeForwardEnableSubtitle": "Участвовать в сети S&F", "storeForwardActAsServer": "Работать как сервер", - "storeForwardActAsServerSubtitle": "Хранить сообщения для других узлов (использует больше ОЗУ)", + "storeForwardActAsServerSubtitle": "Хранить сообщения для других нод (использует больше ОЗУ)", "storeForwardHeartbeat": "Пульс", "storeForwardHeartbeatSubtitle": "Отправлять периодические объявления в сеть Mesh", "storeForwardRecordsLimit": "Лимит записей", @@ -6220,8 +6220,8 @@ "geofenceTapToSet": "Нажмите на карту, чтобы задать центр геозоны", "geofenceTapToSetCenter": "Нажмите для задания центра геозоны", "geofenceDragToAdjust": "Перетащите край круга для изменения радиуса", - "geofenceNodesCount": "{count} узлов", - "geofenceMonitoredNode": "Отслеживаемый узел", + "geofenceNodesCount": "{count} нод", + "geofenceMonitoredNode": "Отслеживаемая нода", "geofenceRadius": "Радиус", "geofenceRadiusKm": "Радиус: {value} км", "geofenceRadiusM": "Радиус: {value} м", @@ -6233,8 +6233,8 @@ "geofenceLocating": "Определение местоположения...", "geofenceUseMyLocation": "Использовать моё местоположение", "geofenceSetGeofence": "Задать геозону", - "geofenceSelectNode": "Выбрать узел", - "geofenceNoNodesWithGps": "Нет узлов с GPS", + "geofenceSelectNode": "Выбрать ноду", + "geofenceNoNodesWithGps": "Нет нод с GPS", "geofenceYou": "ВЫ", "geofenceMonitored": "Отслеживается", "geofenceMonitor": "Отслеживать", @@ -6342,7 +6342,7 @@ "rangeTestSave": "Сохранить", "rangeTestSaveSuccess": "Конфигурация теста дальности сохранена", "rangeTestSaveFailed": "Не удалось сохранить конфигурацию: {error}", - "rangeTestNoNodes": "Нет других доступных узлов", + "rangeTestNoNodes": "Нет других доступных нод", "rangeTestSelectTarget": "Выбрать цель", "rangeTestConfiguration": "Конфигурация", "rangeTestResultsCount": "Результаты ({count})", @@ -6350,7 +6350,7 @@ "rangeTestRunning": "Тест выполняется", "rangeTestReady": "Готов к тестированию", "rangeTestPacketsReceived": "Получено пакетов: {count}", - "rangeTestSelectNode": "Выбрать узел", + "rangeTestSelectNode": "Выбрать ноду", "rangeTestStop": "Стоп", "rangeTestStartTest": "Начать тест", "rangeTestEnableModule": "Включить модуль теста дальности", @@ -6363,10 +6363,10 @@ "rangeTestAvgRssi": "Ср. RSSI", "rangeTestMaxDist": "Макс. дальность", "rangeTestHowItWorks": "Как работает тест дальности", - "rangeTestHowItWorksDescription": "1. Выберите целевой узел для теста дальности\n2. Начните тест для отправки пакетов", - "rangeTestSelectTargetNode": "Выбрать целевой узел", - "rangeTestSearchNodes": "Поиск узлов…", - "rangeTestNoNodesMatch": "Нет узлов, соответствующих запросу «{query}»", + "rangeTestHowItWorksDescription": "1. Выберите целевую ноду для теста дальности\n2. Начните тест для отправки пакетов", + "rangeTestSelectTargetNode": "Выбрать целевую ноду", + "rangeTestSearchNodes": "Поиск нод…", + "rangeTestNoNodesMatch": "Нет нод, соответствующих запросу «{query}»", "themeSettingsTitle": "Настройки темы", "themeSettingsCurrentAccent": "Текущий акцентный цвет", "themeSettingsAccentColor": "АКЦЕНТНЫЙ ЦВЕТ", @@ -6412,7 +6412,7 @@ "privacySettingsThirdPartyServices": "СТОРОННИЕ СЕРВИСЫ", "privacySettingsFirebaseCategories": "Отчёты о сбоях, аналитика использования (при согласии)", "privacySettingsRevenueCatCategories": "Идентификаторы покупок, статус подписки", - "privacySettingsSigilCategories": "Хешированные идентификаторы узлов для генерации изображений", + "privacySettingsSigilCategories": "Хешированные идентификаторы нод для генерации изображений", "appearanceTitle": "Внешний вид и доступность", "appearanceResetTooltip": "Сбросить к умолчаниям", "appearanceLanguage": "Язык", @@ -6537,8 +6537,8 @@ "bgConnDirectMessagesSubtitle": "Уведомлять о личных сообщениях, полученных в фоне", "bgConnChannelMessages": "Сообщения в каналах", "bgConnChannelMessagesSubtitle": "Уведомлять о сообщениях в каналах в фоне", - "bgConnNodeDiscovery": "Обнаружение узлов", - "bgConnNodeDiscoverySubtitle": "Уведомлять при обнаружении новых узлов", + "bgConnNodeDiscovery": "Обнаружение нод", + "bgConnNodeDiscoverySubtitle": "Уведомлять при обнаружении новых нод", "bgConnSectionPersistentNotification": "ПОСТОЯННОЕ УВЕДОМЛЕНИЕ", "bgConnSectionBattery": "БАТАРЕЯ", "bgConnBatteryGuide": "Руководство по оптимизации батареи", @@ -6547,7 +6547,7 @@ "bgConnStyleDetailed": "Подробный", "bgConnNotificationStyle": "Стиль уведомления", "bgConnStyleMinimalDesc": "Показывает «Подключено к [устройство]»", - "bgConnStyleDetailedDesc": "Показывает статус подключения с количеством узлов и временем последнего сообщения", + "bgConnStyleDetailedDesc": "Показывает статус подключения с количеством нод и временем последнего сообщения", "linkedDevicesTitle": "Привязанные устройства", "linkedDevicesSignInRequired": "Требуется вход", "linkedDevicesSignInBody": "Войдите, чтобы привязать ваши устройства Meshtastic к социальному профилю.", @@ -6577,7 +6577,7 @@ "homeWidgetsTitle": "Виджеты главного экрана", "homeWidgetsSectionAvailable": "ДОСТУПНЫЕ ВИДЖЕТЫ", "homeWidgetsMeshStatus": "Статус Mesh", - "homeWidgetsMeshStatusDesc": "Показывает количество подключённых узлов и состояние сети Mesh", + "homeWidgetsMeshStatusDesc": "Показывает количество подключённых нод и состояние сети Mesh", "homeWidgetsSizeSmall": "Маленький", "homeWidgetsSizeMedium": "Средний", "homeWidgetsSizeLarge": "Большой", @@ -7059,8 +7059,8 @@ "dataExportAutomationRulesSubtitle": "Все конфигурации автоматизации", "dataExportExecutionLog": "Журнал выполнения", "dataExportExecutionLogSubtitle": "История срабатываний автоматизации с результатами", - "dataExportNodeList": "Список узлов", - "dataExportNodeListSubtitle": "Все обнаруженные узлы с подробностями", + "dataExportNodeList": "Список нод", + "dataExportNodeListSubtitle": "Все обнаруженные ноды с подробностями", "dataExportExportAll": "Экспортировать все данные", "dataExportExportAllSubtitle": "Полная резервная копия всех данных приложения", "dataExportClearAll": "Очистить все данные", @@ -7104,7 +7104,7 @@ "dataExportShareSubjectTraceroutes": "Экспорт трассировок Socialmesh", "dataExportShareSubjectAutomations": "Экспорт автоматизаций Socialmesh", "dataExportShareSubjectAutomationLog": "Экспорт журнала автоматизации Socialmesh", - "dataExportShareSubjectNodeList": "Экспорт списка узлов Socialmesh", + "dataExportShareSubjectNodeList": "Экспорт списка нод Socialmesh", "dataExportShareSubjectComplete": "Полный экспорт Socialmesh", "dataExportUnknownSender": "Неизвестно", "dataExportSnrNotAvailable": "Н/Д", @@ -7126,15 +7126,15 @@ "deviceMgmtShutdownWarning": "Устройство выключится через 2 секунды. Для повторного включения потребуется нажать кнопку питания вручную.", "deviceMgmtSyncTimeTitle": "Синхронизировать время", "deviceMgmtSyncTimeSubtitle": "Установить на устройстве текущее время", - "deviceMgmtResetNodeDbTitle": "Сбросить базу данных узлов", - "deviceMgmtResetNodeDbSubtitle": "Удалить все известные узлы с устройства и из приложения", - "deviceMgmtResetNodeDbWarning": "Это удалит все обнаруженные узлы с устройства и из приложения. Узлы будут обнаружены повторно со временем.", + "deviceMgmtResetNodeDbTitle": "Сбросить базу данных нод", + "deviceMgmtResetNodeDbSubtitle": "Удалить все известные ноды с устройства и из приложения", + "deviceMgmtResetNodeDbWarning": "Это удалит все обнаруженные ноды с устройства и из приложения. Ноды будут обнаружены повторно со временем.", "deviceMgmtFactoryResetConfigTitle": "Сброс конфигурации к заводским настройкам", - "deviceMgmtFactoryResetConfigSubtitle": "Сбросить всё, кроме базы данных узлов", - "deviceMgmtFactoryResetConfigWarning": "Это удалит каналы, регион и все настройки, но сохранит базу данных узлов.\n\nУстройство перезагрузится через 5 секунд. Вам потребуется заново настроить регион.", + "deviceMgmtFactoryResetConfigSubtitle": "Сбросить всё, кроме базы данных нод", + "deviceMgmtFactoryResetConfigWarning": "Это удалит каналы, регион и все настройки, но сохранит базу данных нод.\n\nУстройство перезагрузится через 5 секунд. Вам потребуется заново настроить регион.", "deviceMgmtFullFactoryResetTitle": "Полный сброс к заводским настройкам", "deviceMgmtFullFactoryResetSubtitle": "Полностью стереть данные и сбросить устройство", - "deviceMgmtFullFactoryResetWarning": "ВНИМАНИЕ: Это полностью сотрёт данные устройства, включая:\n· Всю конфигурацию\n· Все каналы\n· Все известные узлы\n· Идентификатор устройства\n\nУстройство перезагрузится через 5 секунд. Вам потребуется выполнить сопряжение и настройку заново.", + "deviceMgmtFullFactoryResetWarning": "ВНИМАНИЕ: Это полностью сотрёт данные устройства, включая:\n· Всю конфигурацию\n· Все каналы\n· Все известные ноды\n· Идентификатор устройства\n\nУстройство перезагрузится через 5 секунд. Вам потребуется выполнить сопряжение и настройку заново.", "deviceMgmtEnterDfuTitle": "Перейти в режим DFU", "deviceMgmtEnterDfuSubtitle": "Загрузиться в режим обновления прошивки", "deviceMgmtEnterDfuWarning": "Устройство перейдёт в режим обновления прошивки (DFU). Для прошивки новой прошивки или сброса устройства потребуется инструмент обновления прошивки.\n\nВы будете отключены от устройства.", @@ -7157,8 +7157,8 @@ "displayConfigFlipScreenSubtitle": "Повернуть дисплей на 180°", "displayConfigWakeOnTap": "Включение по касанию/движению", "displayConfigWakeOnTapSubtitle": "Включать экран при движении устройства", - "displayConfigLongNodeNames": "Длинные имена узлов", - "displayConfigLongNodeNamesSubtitle": "Показывать полные имена узлов на экране устройства", + "displayConfigLongNodeNames": "Длинные имена нод", + "displayConfigLongNodeNamesSubtitle": "Показывать полные имена нод на экране устройства", "displayConfigMessageBubbles": "Пузырьки сообщений", "displayConfigMessageBubblesSubtitle": "Отображать сообщения в виде пузырьков на экране", "displayConfig12hClock": "12-часовые часы", @@ -7259,8 +7259,8 @@ "iftttConfigSave": "Сохранить", "iftttConfigPremiumTitle": "Подключитесь к 700+ сервисам", "iftttConfigPremiumDesc": "Управляйте устройствами умного дома, записывайте события в таблицы, отправляйте сообщения в Discord/Slack и многое другое.", - "iftttConfigPremiumExampleTitle": "Узел отключился", - "iftttConfigPremiumExampleDesc": "Автоматически включить умный свет или отправить себе уведомление, когда ваш узел перестаёт отвечать.", + "iftttConfigPremiumExampleTitle": "Нода отключилась", + "iftttConfigPremiumExampleDesc": "Автоматически включить умный свет или отправить себе уведомление, когда вашу ноду перестаёт отвечать.", "iftttConfigSectionWebhook": "ВЕБХУК", "iftttConfigSectionMessageTriggers": "ТРИГГЕРЫ СООБЩЕНИЙ", "iftttConfigSectionNodeTriggers": "ТРИГГЕРЫ СОСТОЯНИЯ УЗЛА", @@ -7269,7 +7269,7 @@ "iftttConfigEnable": "Включить IFTTT", "iftttConfigEnableSubtitle": "Отправлять события в сервис IFTTT Webhooks", "iftttConfigDataSharingTitle": "Передача данных IFTTT", - "iftttConfigDataSharingMsg": "При включённых IFTTT Webhooks данные о событиях сети (сообщения, статус узлов, местоположения, уровень заряда) будут отправляться на серверы IFTTT через ваш персональный ключ вебхука.\n\nIFTTT — сторонний сервис со своей политикой конфиденциальности. Передаваться будут только выбранные вами типы событий.", + "iftttConfigDataSharingMsg": "При включённых IFTTT Webhooks данные о событиях сети (сообщения, статус нод, местоположения, уровень заряда) будут отправляться на серверы IFTTT через ваш персональный ключ вебхука.\n\nIFTTT — сторонний сервис со своей политикой конфиденциальности. Передаваться будут только выбранные вами типы событий.", "iftttConfigIUnderstand": "Понятно", "iftttConfigWebhookKeyLabel": "Ключ вебхука", "iftttConfigWebhookKeyHint": "например, cMcOnB_zaJTrZwsVvzVTHY", @@ -7284,10 +7284,10 @@ "iftttConfigMessageReceivedSubtitle": "Срабатывать при получении сообщения", "iftttConfigSosEmergency": "SOS / Экстренный сигнал", "iftttConfigSosEmergencySubtitle": "Срабатывать при ключевых словах SOS, экстренно, помощь, mayday", - "iftttConfigNodeActive": "Узел активен", - "iftttConfigNodeActiveSubtitle": "Срабатывать, когда узел недавно отвечал", - "iftttConfigNodeInactive": "Узел неактивен", - "iftttConfigNodeInactiveSubtitle": "Срабатывать, когда узел долго не отвечает", + "iftttConfigNodeActive": "Нода активна", + "iftttConfigNodeActiveSubtitle": "Срабатывать, когда нода недавно отвечал", + "iftttConfigNodeInactive": "Нода неактивна", + "iftttConfigNodeInactiveSubtitle": "Срабатывать, когда нода долго не отвечает", "iftttConfigBatteryLow": "Низкий заряд", "iftttConfigBatteryLowSubtitle": "Срабатывать, когда заряд ниже порогового значения", "iftttConfigBatteryThreshold": "Порог заряда", @@ -7295,7 +7295,7 @@ "iftttConfigTemperatureAlertSubtitle": "Срабатывать, когда температура превышает порог", "iftttConfigTemperatureThreshold": "Порог температуры", "iftttConfigPositionUpdates": "Обновления местоположения", - "iftttConfigPositionUpdatesSubtitle": "Срабатывать, когда узел покидает геозону", + "iftttConfigPositionUpdatesSubtitle": "Срабатывать, когда нода покидает геозону", "iftttConfigGeofenceRadius": "Радиус геозоны", "iftttConfigGeofenceRadiusHint": "1000", "iftttConfigGeofenceUnitM": "м", @@ -7303,8 +7303,8 @@ "iftttConfigCenterLatHint": "-33.8688", "iftttConfigCenterLongitude": "Долгота центра", "iftttConfigCenterLonHint": "151.2093", - "iftttConfigMonitoredNode": "Отслеживаемый узел", - "iftttConfigNoNodeSelected": "Узел не выбран. Будут отслеживаться все узлы.", + "iftttConfigMonitoredNode": "Отслеживаемая нода", + "iftttConfigNoNodeSelected": "Нода не выбран. Будут отслеживаться все ноды.", "iftttConfigAlertCooldown": "Пауза между оповещениями", "iftttConfigCooldown5min": "5 мин", "iftttConfigCooldown15min": "15 мин", @@ -7314,7 +7314,7 @@ "iftttConfigCooldown4hours": "4 часа", "iftttConfigCooldown8hours": "8 часов", "iftttConfigCooldown24hours": "24 часа", - "iftttConfigCooldownDesc": "Минимальное время между оповещениями о геозоне для одного узла", + "iftttConfigCooldownDesc": "Минимальное время между оповещениями о геозоне для одной ноды", "iftttConfigPickOnMap": "Выбрать на карте", "iftttConfigSetupGuide": "Руководство по настройке", "iftttConfigStep1": "Создайте аккаунт на ifttt.com", @@ -7364,7 +7364,7 @@ "mqttConfigPrecisionWithin1_5km": "В пределах 1,5 км", "mqttConfigPrecisionWithin700m": "В пределах 700 м", "mqttConfigPrecisionUnknown": "Неизвестно", - "mqttConfigInfoText": "MQTT позволяет устройству связать локальную радиосеть с интернетом. Это обеспечивает связь с узлами, находящимися вне зоны прямого радиоприёма.", + "mqttConfigInfoText": "MQTT позволяет устройству связать локальную радиосеть с интернетом. Это обеспечивает связь с нодами, находящимися вне зоны прямого радиоприёма.", "mqttConfigSaved": "Конфигурация MQTT сохранена", "mqttConfigSaveFailed": "Не удалось сохранить: {error}", "securityConfigTitle": "Безопасность", @@ -7375,7 +7375,7 @@ "securityConfigSectionAccessControls": "КОНТРОЛЬ ДОСТУПА", "securityConfigPublicKey": "Открытый ключ", "securityConfigNoKeySet": "Ключ не задан", - "securityConfigPublicKeyDesc": "Ваш открытый ключ отправляется другим узлам для защищённого обмена сообщениями", + "securityConfigPublicKeyDesc": "Ваш открытый ключ отправляется другим нодам для защищённого обмена сообщениями", "securityConfigPrivateKey": "Приватный ключ", "securityConfigPrivateKeyHint": "32-байтовый ключ в кодировке Base64", "securityConfigPrivateKeyDesc": "Используется для вычисления общего секрета с удалёнными устройствами", @@ -7388,7 +7388,7 @@ "securityConfigBackupBtn": "Создать копию", "securityConfigRestoreBtn": "Восстановить", "securityConfigDeleteBackupTooltip": "Удалить резервную копию", - "securityConfigAdminKeysDesc": "Открытые ключи, уполномоченные отправлять административные сообщения этому узлу", + "securityConfigAdminKeysDesc": "Открытые ключи, уполномоченные отправлять административные сообщения этой ноде", "securityConfigPrimaryAdminKey": "Основной ключ администратора", "securityConfigSecondaryAdminKey": "Дополнительный ключ администратора", "securityConfigTertiaryAdminKey": "Третий ключ администратора", @@ -7440,8 +7440,8 @@ "trafficMgmtDirectResponseSubtitle": "Отвечать на запросы NodeInfo напрямую", "trafficMgmtMaxHops": "Макс. переходов: {value}", "trafficMgmtMaxHopsDesc": "Максимальное число переходов для прямого ответа NodeInfo", - "trafficMgmtPerNodeRateLimit": "Ограничение скорости на узел", - "trafficMgmtPerNodeRateLimitSubtitle": "Ограничивать скорость пакетов от отдельных узлов", + "trafficMgmtPerNodeRateLimit": "Ограничение скорости на ноду", + "trafficMgmtPerNodeRateLimitSubtitle": "Ограничивать скорость пакетов от отдельных нод", "trafficMgmtWindow": "Окно: {seconds}с", "trafficMgmtWindowDesc": "Временное окно для расчёта ограничения скорости", "trafficMgmtMaxPackets": "Макс. пакетов: {value}", @@ -7455,7 +7455,7 @@ "trafficMgmtExhaustHopPosition": "Исчерпание переходов для местоположения", "trafficMgmtExhaustHopPositionSub": "Установить лимит переходов 0 для ретранслируемых местоположений", "trafficMgmtPreserveRouterHops": "Сохранять переходы маршрутизатора", - "trafficMgmtPreserveRouterHopsSub": "Сохранять счётчик переходов для узлов-маршрутизаторов", + "trafficMgmtPreserveRouterHopsSub": "Сохранять счётчик переходов для нод-маршрутизаторов", "trafficMgmtSaved": "Конфигурация управления трафиком сохранена", "trafficMgmtSaveFailed": "Не удалось сохранить: {error}", "adminPanelTitle": "Администратор", @@ -7573,7 +7573,7 @@ "adminBroadcastDefBodyCelebration": "У нас есть повод отпраздновать вместе с сообществом Socialmesh!", "adminBroadcastDefBodyTip": "Вот полезный совет, который поможет вам получить максимум от Socialmesh.", "adminBroadcastDefBodySignals": "Узнайте, что нового в Signals — вашей mesh-ленте присутствия.", - "adminBroadcastDefBodyNodedex": "В NodeDex появились новые функции для обнаружения и отслеживания mesh-узлов.", + "adminBroadcastDefBodyNodedex": "В NodeDex появились новые функции для обнаружения и отслеживания mesh-нод.", "adminBroadcastDefBodyAether": "Новые улучшения Aether для обмена полётами теперь доступны.", "adminBroadcastDefBodyActivity": "Посмотрите, что происходит в вашей ленте активности.", "adminBroadcastDefBodyPresence": "Обнаружение присутствия улучшено для лучшего осознания mesh-сети.", @@ -7593,7 +7593,7 @@ "adminBroadcastLinkScanner": "Сканер", "adminBroadcastLinkMessages": "Сообщения", "adminBroadcastLinkChannels": "Каналы", - "adminBroadcastLinkNodes": "Узлы", + "adminBroadcastLinkNodes": "Ноды", "adminBroadcastLinkMap": "Карта", "adminBroadcastLinkSignals": "Signals", "adminBroadcastLinkNodedex": "NodeDex", @@ -7614,7 +7614,7 @@ "adminDiagTargetRemote": "Удалённое: {hexId}", "adminDiagDescription": "Запускайте диагностические проверки подключённого устройства и экспортируйте подробный пакет данных для отладки проблем с протоколом и транспортом.", "adminDiagTargetLabel": "Цель", - "adminDiagMyNodeLabel": "Мой узел", + "adminDiagMyNodeLabel": "Моя нода", "adminDiagStressToggle": "Включить стресс-тесты", "adminDiagStressToggleSub": "Пакетное чтение и корреляция не по порядку", "adminDiagWriteToggle": "Включить тесты записи (обратимые)", @@ -7745,13 +7745,13 @@ "adminConformanceTargetDevice": "Целевое устройство", "adminConformanceTargetRemote": "Удалённое: {target}", "adminConformanceTargetLocal": "Локальное устройство", - "adminConformanceNodesAvailable": "Доступно {count} удалённых узлов", + "adminConformanceNodesAvailable": "Доступно {count} удалённых нод", "adminConformanceOtaPki": "Удалённое управление через PKI", - "adminConformanceNoNodes": "Нет удалённых узлов с поддержкой PKI", + "adminConformanceNoNodes": "Нет удалённых нод с поддержкой PKI", "adminConformanceSwitchLocal": "Переключиться на локальное", "adminConformanceTestOptions": "Параметры тестирования", "adminConformanceDestructive": "Деструктивные тесты", - "adminConformanceDestructiveSub": "Случайные мутации, пакетная нагрузка, сброс базы узлов. Может временно изменить конфигурацию устройства.", + "adminConformanceDestructiveSub": "Случайные мутации, пакетная нагрузка, сброс базы нод. Может временно изменить конфигурацию устройства.", "adminConformanceRunRemoteDestructive": "Запустить удалённое тестирование (деструктивное)", "adminConformanceRunRemoteSafe": "Запустить удалённое тестирование (безопасное)", "adminConformanceRunLocalDestructive": "Запустить тестирование (деструктивное)", @@ -7886,7 +7886,7 @@ "globalLayerAddFromTemplateDescription": "Выберите предопределённый шаблон темы. Заполнители будут заменены значениями, указанными ниже.", "globalLayerChannelFieldLabel": "Канал", "globalLayerChannelFieldHint": "LongFast", - "globalLayerNodeIdFieldLabel": "ID узла", + "globalLayerNodeIdFieldLabel": "ID ноды", "globalLayerNodeIdFieldHint": "!a1b2c3d4", "globalLayerTemplateAdded": "Добавлено", "adminFollowRequestFrom": "ОТ", @@ -7899,7 +7899,7 @@ "dashboardDone": "Готово", "dashboardEditTitle": "Редактировать панель", "dashboardHealthConnection": "Соединение", - "dashboardHealthNodes": "Узлы", + "dashboardHealthNodes": "Ноды", "dashboardHealthOffline": "Не в сети", "dashboardHealthOnline": "В сети", "dashboardHealthSignal": "Сигнал", @@ -7908,9 +7908,9 @@ "dashboardLive": "LIVE", "dashboardNoChannelsConfigured": "Каналы не настроены", "dashboardNoMessagesYet": "Сообщений пока нет", - "dashboardNoNearbyNodes": "Ближайшие узлы не обнаружены", + "dashboardNoNearbyNodes": "Ближайшие ноды не обнаружены", "dashboardNoSignalData": "Данные о сигнале недоступны", - "dashboardNodesLabel": "Узлы", + "dashboardNodesLabel": "Ноды", "dashboardQuickMessage": "Быстрое\nсообщение", "dashboardRemoveConfirm": "Удалить", "dashboardRemoveFromFavorites": "Удалить из избранного", @@ -7927,8 +7927,8 @@ "dashboardStatusOnline": "В сети", "dashboardTitle": "Панель", "dashboardTraceroute": "Трассировка", - "dashboardWidgetActiveNodes": "Активные узлы", - "dashboardWidgetActiveNodesDesc": "Узлы, активные за последний час", + "dashboardWidgetActiveNodes": "Активные ноды", + "dashboardWidgetActiveNodesDesc": "Ноды, активные за последний час", "dashboardWidgetAirtimeUsage": "Использование эфирного времени", "dashboardWidgetAirtimeUsageDesc": "Время радиопередачи и ограничения", "dashboardWidgetChannelActivity": "Активность канала", @@ -7941,14 +7941,14 @@ "dashboardWidgetMessagesDesc": "Всего отправлено и получено сообщений", "dashboardWidgetNetworkTopology": "Топология сети", "dashboardWidgetNetworkTopologyDesc": "Визуальный граф радиосети", - "dashboardWidgetNodes": "Узлы", - "dashboardWidgetNodesDesc": "Всего обнаруженных узлов в сети", + "dashboardWidgetNodes": "Ноды", + "dashboardWidgetNodesDesc": "Всего обнаруженных нод в сети", "dashboardWidgetPacketStats": "Статистика пакетов", "dashboardWidgetPacketStatsDesc": "Количество отправленных, полученных и отброшенных пакетов", "dashboardWidgetQuickActions": "Быстрые действия", "dashboardWidgetQuickActionsDesc": "Быстрый доступ к основным функциям", "dashboardWidgetRangeTest": "Тест дальности", - "dashboardWidgetRangeTestDesc": "Тест дальности сигнала с другими узлами", + "dashboardWidgetRangeTestDesc": "Тест дальности сигнала с другими нодами", "dashboardWidgetRecentMessages": "Последние сообщения", "dashboardWidgetRecentMessagesDesc": "Свежие сообщения из сети", "dashboardWidgetSignalStrength": "Мощность сигнала", @@ -7989,7 +7989,7 @@ "mapControlsFitAll": "Вписать всё", "mapControlsResetNorth": "Сброс севера", "mapNodeDrawerClosePanel": "Закрыть панель", - "nodeSelectorSearchHint": "Поиск узлов...", + "nodeSelectorSearchHint": "Поиск нод...", "portalViewBroker": "Брокер", "portalViewLocalMesh": "Локальная сеть", "portalViewRemote": "Удалённый", @@ -8023,7 +8023,7 @@ "aetherInFlight": "В полёте", "aetherLiveFlightData": "Данные рейса в реальном времени", "aetherOnGround": "На земле", - "globalLayerNodesSeenVia": "{count} узлов обнаружено через Глобальный слой", + "globalLayerNodesSeenVia": "{count} нод обнаружено через Глобальный слой", "helpChannelCreationTitle": "Создание канала", "helpChannelCreationDescription": "Узнайте, как создавать и настраивать mesh-каналы", "helpEncryptionLevelsTitle": "Шифрование канала", @@ -8031,8 +8031,8 @@ "helpMessageRoutingTitle": "Как передаются сообщения", "helpMessageRoutingDescription": "Понимание маршрутизации в mesh-сети и ретрансляции сообщений", "helpNodesOverviewTitle": "Ваша mesh-сеть", - "helpNodesOverviewDescription": "Знакомство с узлами вашей mesh-сети", - "helpNodeRolesTitle": "Роли узлов", + "helpNodesOverviewDescription": "Знакомство с нодами вашей mesh-сети", + "helpNodeRolesTitle": "Роли нод", "helpNodeRolesDescription": "Объяснение ролей CLIENT, ROUTER и REPEATER", "helpRegionSelectionTitle": "Выбор региона", "helpRegionSelectionDescription": "Частотные диапазоны и соответствие законодательству", @@ -8065,7 +8065,7 @@ "helpRoutesOverviewTitle": "Маршруты", "helpRoutesOverviewDescription": "Записывайте и делитесь GPS-маршрутами", "helpPositionOverviewTitle": "История позиций", - "helpPositionOverviewDescription": "Журналы GPS-позиций всех узлов вашей mesh-сети", + "helpPositionOverviewDescription": "Журналы GPS-позиций всех нод вашей mesh-сети", "helpSettingsOverviewTitle": "Настройки", "helpSettingsOverviewDescription": "Настройка приложения и устройства", "helpProfileOverviewTitle": "Ваш профиль", @@ -8082,26 +8082,26 @@ "helpOfflineMapsOverviewDescription": "Параметры отображения и управления картой", "helpRadioConfigOverviewTitle": "Настройки радио", "helpRadioConfigOverviewDescription": "Настройка вашего LoRa радио", - "helpPresenceOverviewTitle": "Присутствие узла", - "helpPresenceOverviewDescription": "Отслеживайте, какие узлы активны в вашей mesh-сети", + "helpPresenceOverviewTitle": "Присутствие ноды", + "helpPresenceOverviewDescription": "Отслеживайте, какие ноды активны в вашей mesh-сети", "helpReachabilityOverviewTitle": "Достижимость mesh-сети", - "helpReachabilityOverviewDescription": "Определение доступных для вас узлов", + "helpReachabilityOverviewDescription": "Определение доступных для вас нод", "helpMeshHealthOverviewTitle": "Здоровье mesh-сети", "helpMeshHealthOverviewDescription": "Мониторинг состояния вашей mesh-сети", "helpTracerouteOverviewTitle": "Трассировка маршрута", "helpTracerouteOverviewDescription": "Определение пути прохождения пакетов через вашу mesh-сеть", "helpNodedexOverviewTitle": "Полевой журнал NodeDex", - "helpNodedexOverviewDescription": "Ваша личная запись обо всех узлах, обнаруженных в mesh-сети", + "helpNodedexOverviewDescription": "Ваша личная запись обо всех нодах, обнаруженных в mesh-сети", "helpNodedexAlbumTitle": "Альбом коллекционера", - "helpNodedexAlbumDescription": "Представление обнаруженных узлов в виде коллекционных карточек", + "helpNodedexAlbumDescription": "Представление обнаруженных нод в виде коллекционных карточек", "helpNodedexConstellationTitle": "Вид созвездия", - "helpNodedexConstellationDescription": "Визуализация связей совместно обнаруженных узлов в виде звёздной карты", - "helpNodedexDetailTitle": "Профиль узла", - "helpNodedexDetailDescription": "Полная история и идентификация узла", + "helpNodedexConstellationDescription": "Визуализация связей совместно обнаруженных нод в виде звёздной карты", + "helpNodedexDetailTitle": "Профиль ноды", + "helpNodedexDetailDescription": "Полная история и идентификация ноды", "helpCloudSyncOverviewTitle": "Облачная синхронизация", "helpCloudSyncOverviewDescription": "Премиум-синхронизация данных mesh-сети между устройствами", "helpAetherOverviewTitle": "Aether", - "helpAetherOverviewDescription": "Отслеживание узлов Meshtastic на высоте", + "helpAetherOverviewDescription": "Отслеживание нод Meshtastic на высоте", "helpTakGatewayOverviewTitle": "TAK Шлюз", "helpTakGatewayOverviewDescription": "Интеграция вашей mesh-сети в экосистему TAK", "helpRadioComplianceTitle": "Правила использования радио и ваши обязанности", @@ -8123,20 +8123,20 @@ "helpDefaultKeyBubble": "**КЛЮЧ ПО УМОЛЧАНИЮ** означает, что все участники mesh-сети могут читать ваши сообщения. Это публично! Используйте для общих объявлений или тестирования.", "helpPskEncryptionBubble": "**PSK** (Pre-Shared Key) означает, что вы создаёте случайный секретный ключ. Только люди с этим точным ключом смогут расшифровать ваши сообщения. Намного приватнее!", "helpPskSharingBubble": "Поделитесь своим PSK через **QR-код**! При сканировании собеседник получит ключ и настройки канала. Проще простого!", - "helpRoutingIntroBubble": "Хотите увидеть, как это работает? Когда вы отправляете сообщение, оно **передаётся от узла к узлу**, как горячая картошка!", - "helpRoutingHopsBubble": "Каждый **прыжок** — это когда узел получает ваше сообщение и пересылает его дальше. Большинству сообщений нужно **1–3 прыжка**, чтобы достичь получателя!", - "helpRoutingRouterRoleBubble": "Узлы **ROUTER** — супергерои mesh-сети: они ретранслируют сообщения для всех! Узлы **CLIENT** лишь отправляют и получают собственные сообщения.", + "helpRoutingIntroBubble": "Хотите увидеть, как это работает? Когда вы отправляете сообщение, оно **передаётся от ноды к ноде**, как горячая картошка!", + "helpRoutingHopsBubble": "Каждый **прыжок** — это когда нода получает ваше сообщение и пересылает его дальше. Большинству сообщений нужно **1–3 прыжка**, чтобы достичь получателя!", + "helpRoutingRouterRoleBubble": "Ноды **ROUTER** — супергерои mesh-сети: они ретранслируют сообщения для всех! Ноды **CLIENT** лишь отправляют и получают собственные сообщения.", "helpRoutingStoreForwardBubble": "**Store & Forward** — отличная функция! Если от получателя давно не было сигнала, сообщение будет сохранено и доставлено при следующем появлении пакета.", - "helpNodesIntroBubble": "Это ваша **mesh-сеть**! Каждое устройство, которое вы видите здесь, — узел, способный общаться с вами.", + "helpNodesIntroBubble": "Это ваша **mesh-сеть**! Каждое устройство, которое вы видите здесь, — нода, способный общаться с вами.", "helpNodesStatusBubble": "**Зелёная точка** означает **Активен** (слышен совсем недавно). **Жёлтая** — **Виден недавно**. **Серая** — **Неактивен**. LoRa не имеет сигнала об отключении — статус определяется косвенно.", - "helpNodesInfoBubble": "На каждой карточке отображается **имя** узла, **уровень заряда** и **уровень сигнала**. Нажмите на любой узел, чтобы узнать подробнее!", - "helpNodesFiltersBubble": "Используйте **фильтры** вверху для поиска конкретных узлов. Можно отображать только **Активные** узлы, избранные или узлы с GPS.", - "helpNodesActionsBubble": "Нажмите на узел, чтобы **отправить сообщение**, увидеть **местоположение на карте** или проверить **данные телеметрии**!", - "helpRolesIntroBubble": "**Роли узлов** определяют, как ваше устройство помогает mesh-сети. Давайте разберём каждую!", + "helpNodesInfoBubble": "На каждой карточке отображается **имя** ноды, **уровень заряда** и **уровень сигнала**. Нажмите на любую ноду, чтобы узнать подробнее!", + "helpNodesFiltersBubble": "Используйте **фильтры** вверху для поиска конкретных нод. Можно отображать только **Активные** ноды, избранные или ноды с GPS.", + "helpNodesActionsBubble": "Нажмите на ноду, чтобы **отправить сообщение**, увидеть **местоположение на карте** или проверить **данные телеметрии**!", + "helpRolesIntroBubble": "**Роли нод** определяют, как ваше устройство помогает mesh-сети. Давайте разберём каждую!", "helpRoleClientBubble": "**CLIENT**: Ваше устройство отправляет и получает сообщения, но не ретранслирует их для других. Отличный выбор для **экономии батареи**!", "helpRoleRouterBubble": "**ROUTER**: Вы супергерой mesh-сети! Вы ретранслируете сообщения для всех. Расходует больше батареи, но делает сеть сильнее!", "helpRoleRouterLateBubble": "**ROUTER LATE**: Повторно транслирует после других роутеров. Расширяет покрытие, не занимая приоритетные прыжки. Отлично для резервных ретрансляторов!", - "helpRoleClientBaseBubble": "**CLIENT BASE**: Базовая станция для ваших избранных узлов. Маршрутизирует их пакеты как роутер, а всё остальное обрабатывает как клиент!", + "helpRoleClientBaseBubble": "**CLIENT BASE**: Базовая станция для ваших избранных нод. Маршрутизирует их пакеты как роутер, а всё остальное обрабатывает как клиент!", "helpRegionIntroBubble": "Это важно! Ваш **регион** определяет, какие радиочастоты вы можете использовать по закону.", "helpRegionLegalBubble": "В каждой стране свои правила. Использование **неверной частоты** может быть незаконным! Всегда выбирайте регион по своему фактическому местоположению.", "helpRegionBandsBubble": "Большинство регионов используют **915 МГц** (Америка) или **868 МГц** (Европа). Некоторые — **433 МГц**. Оборудование вашего устройства должно поддерживать эту частоту!", @@ -8147,32 +8147,32 @@ "helpConnectionPairingBubble": "Первый раз? Устройство должно находиться в **режиме сопряжения**. Найдите значок Bluetooth на экране или нажмите кнопку!", "helpConnectionTroubleshootBubble": "Не можете найти устройство? Проверьте:\\n- **Bluetooth включён**\\n- Устройство заряжено\\n- Устройство не подключено к другому источнику\\n- Вы находитесь достаточно близко (до 10 м)", "helpGpsIntroBubble": "**GPS** позволяет другим видеть вас на карте! Давайте объясним, как это работает.", - "helpGpsBroadcastBubble": "Ваше устройство отправляет **обновления позиции** каждые несколько минут. Другие узлы видят вас на своей карте!", + "helpGpsBroadcastBubble": "Ваше устройство отправляет **обновления позиции** каждые несколько минут. Другие ноды видят вас на своей карте!", "helpGpsPrivacyBubble": "Конфиденциальность важна! Вы можете **отключить GPS** или задать интервалы обновлений. Отключите его, когда хотите оставаться невидимым!", "helpGpsBatteryBubble": "GPS расходует **батарею**! Большие интервалы обновлений = лучший заряд батареи. Балансируйте между конфиденциальностью и удобством!", "helpMetricsIntroBubble": "Давайте разберём цифры сигнала! Они показывают, насколько хорошо работает ваше соединение.", "helpMetricsRssiBubble": "**RSSI** (мощность принятого сигнала): насколько громкий сигнал. Чем выше, тем лучше! **−50 дБм** = отлично, **−120 дБм** = еле держится.", "helpMetricsSnrBubble": "**SNR** (отношение сигнал/шум): насколько чистый сигнал. Положительное = хорошо, отрицательное = шумно! **+10 дБ** = отлично, **−10 дБ** = плохо.", "helpMetricsPracticalBubble": "На практике: **Зелёный** = отлично, **жёлтый** = нормально, **красный** = плохо. Подойдите ближе или найдите возвышенность для улучшения!", - "helpMapIntroBubble": "Добро пожаловать на **карту mesh-сети**! Каждая точка — это узел с GPS. Все они часть вашей сети!", - "helpMapMarkersBubble": "**Нажмите на любой маркер**, чтобы узнать, кто это. Вы можете отправить сообщение, проверить батарею или посмотреть, когда узел был виден последний раз!", - "helpMapFeaturesBubble": "Попробуйте **тепловую карту**, чтобы увидеть, где концентрируются узлы, или **линии связи**, чтобы увидеть, кто с кем общается!", - "helpMapMeasureBubble": "Используйте **режим измерения** для проверки расстояний между точками. Отлично подходит для планирования размещения нового узла!", - "helpMapFiltersBubble": "Используйте **фильтры**, чтобы показывать только **Активные** узлы или узлы с GPS. Помогает, когда на карте много объектов!", + "helpMapIntroBubble": "Добро пожаловать на **карту mesh-сети**! Каждая точка — это нода с GPS. Все они часть вашей сети!", + "helpMapMarkersBubble": "**Нажмите на любой маркер**, чтобы узнать, кто это. Вы можете отправить сообщение, проверить батарею или посмотреть, когда нода была видена последний раз!", + "helpMapFeaturesBubble": "Попробуйте **тепловую карту**, чтобы увидеть, где концентрируются ноды, или **линии связи**, чтобы увидеть, кто с кем общается!", + "helpMapMeasureBubble": "Используйте **режим измерения** для проверки расстояний между точками. Отлично подходит для планирования размещения новой ноды!", + "helpMapFiltersBubble": "Используйте **фильтры**, чтобы показывать только **Активные** ноды или ноды с GPS. Помогает, когда на карте много объектов!", "helpChannelsIntroBubble": "Это ваши **каналы**! Представьте их как разные радиочастоты. Каждый — отдельный разговор.", "helpChannelsPrimaryBubble": "**Основной** канал особенный. Он всегда занимает слот 0 и не может быть удалён. Большая часть трафика mesh-сети идёт через него!", "helpChannelsSecondaryBubble": "**Дополнительные каналы** предназначены для приватных групп. Создайте один для семьи, туристического клуба или аварийной команды!", "helpChannelsEncryptionBubble": "Видите **значок замка**? Это означает, что канал зашифрован. Только люди с ключом могут читать сообщения!", "helpChannelsShareBubble": "Нажмите на канал, чтобы увидеть его **QR-код**. Друзья могут отсканировать его для мгновенного подключения с правильными настройками!", "helpAutomationsIntroBubble": "**Автоматизации** делают вашу mesh-сеть умнее! Настройте правила, и нужные действия будут выполняться автоматически.", - "helpAutomationsTriggersBubble": "Каждая автоматизация начинается с **триггера**. Например, когда узел становится неактивным, батарея разряжается или вы входите в зону!", + "helpAutomationsTriggersBubble": "Каждая автоматизация начинается с **триггера**. Например, когда нода становится неактивным, батарея разряжается или вы входите в зону!", "helpAutomationsActionsBubble": "Затем выберите **действие**! Отправить сообщение, воспроизвести звук, показать уведомление или даже активировать IFTTT!", "helpAutomationsExamplesBubble": "Пример: **Уведомить меня, когда заряд батареи папы упадёт ниже 20%**. Или **Отправить «Я дома!», когда я войду в геозону**!", "helpAutomationsToggleBubble": "Используйте **переключатель**, чтобы включать или отключать автоматизации. Протестируйте их перед использованием!", "helpDashboardIntroBubble": "Добро пожаловать на **Панель управления**! Это ваш персональный командный центр. Всё необходимое — с первого взгляда!", "helpDashboardWidgetsBubble": "Каждая карточка — это **виджет**. Они отображают актуальные данные вашей сети — уровень заряда, сообщения, погоду и многое другое!", "helpDashboardReorderBubble": "**Удерживайте и перетаскивайте** виджеты, чтобы переупорядочить их. Поместите избранные наверх! Нажмите **Изменить**, чтобы добавить или удалить их.", - "helpDashboardTapBubble": "**Нажмите на любой виджет**, чтобы увидеть подробности или выполнить действие. Попробуйте нажать на виджет узла, чтобы увидеть всю его информацию!", + "helpDashboardTapBubble": "**Нажмите на любой виджет**, чтобы увидеть подробности или выполнить действие. Попробуйте нажать на виджет ноды, чтобы увидеть всю его информацию!", "helpBuilderIntroBubble": "Добро пожаловать в **Конструктор виджетов**! Здесь вы можете создавать собственные виджеты с нуля!", "helpBuilderTemplatesBubble": "Начните с **шаблона** или создайте с нуля. Шаблоны предоставляют готовые датчики, графики и карточки статуса для настройки!", "helpBuilderBindingsBubble": "Вся магия — в **привязках данных**! Подключите любой элемент к актуальным данным сети — заряду, GPS, температуре, уровню сигнала!", @@ -8200,19 +8200,19 @@ "helpDetailVotingBubble": "Нажмите на **стрелку вверх или вниз** у любого ответа, чтобы проголосовать. Голоса выводят наверх самые полезные ответы.", "helpDetailReplyBubble": "Используйте **панель ответа** внизу для ответа. Нажмите на значок ответа у любого сообщения, чтобы ответить именно на него.", "helpDetailActionsBubble": "**Меню действий** (три точки) позволяет **удалить** свой сигнал или **пожаловаться** на чужой. Используйте с умом!", - "helpWorldIntroBubble": "Добро пожаловать в **Мировую сеть**! Смотрите всю глобальную сеть Meshtastic. Каждая точка — это узел где-то в мире!", + "helpWorldIntroBubble": "Добро пожаловать в **Мировую сеть**! Смотрите всю глобальную сеть Meshtastic. Каждая точка — это нода где-то в мире!", "helpWorldScopeBubble": "Отдалитесь, чтобы увидеть **мировую сеть**, или приблизьтесь, чтобы исследовать локальные кластеры. Это поистине глобальное сообщество!", - "helpWorldDataBubble": "Данные поступают через **MQTT** — от узлов, которые решили публично делиться своим местоположением. Вы тоже можете участвовать!", + "helpWorldDataBubble": "Данные поступают через **MQTT** — от нод, которые решили публично делиться своим местоположением. Вы тоже можете участвовать!", "helpWorldFiltersBubble": "Используйте **фильтры** для отображения конкретных регионов или временных промежутков. Находите активные mesh-сети рядом с вами!", "helpRoutesIntroBubble": "**Маршруты** позволяют записывать ваши путешествия! Идеально для походов, велопрогулок или любых вылазок на природу!", "helpRoutesRecordBubble": "Нажмите **Запись**, чтобы начать отслеживание. GPS-точки сохраняются по мере движения. Работает даже в офлайн-режиме!", "helpRoutesGpxBubble": "**Импортируйте GPX-файлы**, чтобы следовать по готовым маршрутам. Экспортируйте свои маршруты и делитесь ими с другими!", "helpRoutesShareBubble": "Делитесь маршрутами с участниками вашей сети! Отлично подходит для координации точек встречи или обмена любимыми тропами.", - "helpPositionIntroBubble": "**История позиций** записывает каждую GPS-позицию, переданную узлами вашей сети.", - "helpPositionListMapBubble": "Переключайтесь между **списком** и **картой** через меню. Карта показывает, где побывали все узлы с течением времени!", - "helpPositionFiltersBubble": "Используйте **чипы фильтров** для сужения результатов: сегодня, на этой неделе, хорошее GPS-соединение или только конкретный узел.", - "helpPositionSearchBubble": "**Строка поиска** фильтрует по имени узла. Удобно, когда в вашей сети десятки узлов!", - "helpPositionMapNodesBubble": "В режиме карты нажмите кнопку **список узлов**, чтобы выбрать конкретный узел. Каждый узел получает свой цвет для удобства!", + "helpPositionIntroBubble": "**История позиций** записывает каждую GPS-позицию, переданную нодами вашей сети.", + "helpPositionListMapBubble": "Переключайтесь между **списком** и **картой** через меню. Карта показывает, где побывали все ноды с течением времени!", + "helpPositionFiltersBubble": "Используйте **чипы фильтров** для сужения результатов: сегодня, на этой неделе, хорошее GPS-соединение или только конкретная нода.", + "helpPositionSearchBubble": "**Строка поиска** фильтрует по имени ноды. Удобно, когда в вашей сети десятки нод!", + "helpPositionMapNodesBubble": "В режиме карты нажмите кнопку **список нод**, чтобы выбрать конкретную ноду. Каждую ноду получает свой цвет для удобства!", "helpPositionExportBubble": "**Экспортируйте в CSV** через меню для анализа в таблицах или GIS-инструментах. Отличный способ документировать покрытие!", "helpPositionGoodFixBubble": "Фильтр **Хорошее соединение** показывает только позиции с 6+ спутниками. Это помогает отсеять неточные данные!", "helpSettingsIntroBubble": "Добро пожаловать в **Настройки**! Здесь вы можете настроить всё — от внешнего вида приложения до параметров радио!", @@ -8224,14 +8224,14 @@ "helpProfileShareBubble": "Добавьте **позывной**, **аватар** и **ссылки**, чтобы сделать профиль по-настоящему своим.", "helpProfileCloudBubble": "**Облачная синхронизация** — это премиум-функция, которая создаёт резервные копии вашего профиля, NodeDex, автоматизаций и настроек на всех устройствах.", "helpMesh3dIntroBubble": "Добро пожаловать в **Mesh 3D**! Смотрите всю сеть в трёх измерениях. Вращайте, масштабируйте и исследуйте топологию!", - "helpMesh3dNodesBubble": "Каждая сфера — это **узел**. Линии показывают соединения на основе мощности сигнала. Более толстые линии — более надёжное соединение!", - "helpMesh3dColorsBubble": "Цвета отражают **состояние узла**. Зелёный — активный, жёлтый — затухающий, серый — неактивный. Смотрите, как ваша сеть меняется со временем!", - "helpMesh3dTapBubble": "**Нажмите на любой узел**, чтобы выбрать его и увидеть подробности. Отлично помогает понять структуру сети!", - "helpGlobeIntroBubble": "Вращайте **Глобус**, чтобы смотреть на вашу сеть из космоса! Каждая светящаяся точка — это узел с известным местоположением!", - "helpGlobeInteractBubble": "**Перетаскивайте для вращения**, сводите/разводите пальцы для масштабирования. Нажмите на узел, чтобы подлететь к его местоположению и увидеть подробности!", + "helpMesh3dNodesBubble": "Каждая сфера — это **нода**. Линии показывают соединения на основе мощности сигнала. Более толстые линии — более надёжное соединение!", + "helpMesh3dColorsBubble": "Цвета отражают **состояние ноды**. Зелёный — активный, жёлтый — затухающий, серый — неактивный. Смотрите, как ваша сеть меняется со временем!", + "helpMesh3dTapBubble": "**Нажмите на любую ноду**, чтобы выбрать его и увидеть подробности. Отлично помогает понять структуру сети!", + "helpGlobeIntroBubble": "Вращайте **Глобус**, чтобы смотреть на вашу сеть из космоса! Каждая светящаяся точка — это ноду с известным местоположением!", + "helpGlobeInteractBubble": "**Перетаскивайте для вращения**, сводите/разводите пальцы для масштабирования. Нажмите на ноду, чтобы подлететь к его местоположению и увидеть подробности!", "helpGlobeArcsBubble": "Наблюдайте за **дугами соединений** — они показывают пути сообщений, проходящих по вашей сети!", - "helpTimelineIntroBubble": "**Лента событий** показывает всё, что происходит в вашей сети. Сообщения, изменения узлов, сигналы — всё в хронологическом порядке!", - "helpTimelineFilterBubble": "Используйте **фильтры** для просмотра конкретных типов событий. Только сообщения? Только входы узлов? Настраивайте под себя!", + "helpTimelineIntroBubble": "**Лента событий** показывает всё, что происходит в вашей сети. Сообщения, изменения нод, сигналы — всё в хронологическом порядке!", + "helpTimelineFilterBubble": "Используйте **фильтры** для просмотра конкретных типов событий. Только сообщения? Только входы нод? Настраивайте под себя!", "helpTimelineTapBubble": "**Нажмите на любое событие**, чтобы увидеть полные подробности. Отлично подходит для отладки или понимания происходящего в сети!", "helpShopIntroBubble": "Добро пожаловать в **Магазин устройств**! Просматривайте радиоустройства и аксессуары, совместимые с Meshtastic!", "helpShopCompareBubble": "**Сравнивайте устройства** по дальности, заряду батареи и функциям. Каждое оценено, чтобы помочь вам выбрать подходящее!", @@ -8243,74 +8243,74 @@ "helpRadioRegionBubble": "**Регион** определяет разрешённые частоты. Неверная настройка может создать помехи другим пользователям и нарушить закон!", "helpRadioModemBubble": "**Пресет модема** балансирует между дальностью и скоростью. Дальний диапазон = медленнее, но дальше. Короткий диапазон = быстрее, но ближе!", "helpRadioPowerBubble": "Большая **мощность передатчика** означает большую дальность, но быстрее расходует батарею. Найдите оптимальный баланс для вашей ситуации!", - "helpPresenceIntroBubble": "**Присутствие** показывает, какие узлы активны, недавно видны или неактивны в вашей сети!", - "helpPresenceActiveBubble": "**Активные** узлы (зелёные) отправили сообщение за последние 2 минуты. Они точно доступны!", - "helpPresenceRecentBubble": "**Недавно видимые** узлы (жёлтые) были активны 2–10 минут назад. Скорее всего, ещё в зоне досягаемости!", - "helpPresenceInactiveBubble": "**Неактивные** узлы (серые) не выходили на связь более 10 минут. Возможно, они выключены, вышли из зоны или разрядились!", - "helpPresenceChartBubble": "**График активности** показывает недавнюю активность узлов по времени. Наблюдайте, как ваша сеть оживает в течение дня!", - "helpReachabilityIntroBubble": "**Достижимость** оценивает вероятность связи с каждым узлом на основе истории наблюдений сигнала!", + "helpPresenceIntroBubble": "**Присутствие** показывает, какие ноды активны, недавно видны или неактивны в вашей сети!", + "helpPresenceActiveBubble": "**Активные** ноды (зелёные) отправили сообщение за последние 2 минуты. Они точно доступны!", + "helpPresenceRecentBubble": "**Недавно видимые** ноды (жёлтые) были активны 2–10 минут назад. Скорее всего, ещё в зоне досягаемости!", + "helpPresenceInactiveBubble": "**Неактивные** ноды (серые) не выходили на связь более 10 минут. Возможно, они выключены, вышли из зоны или разрядились!", + "helpPresenceChartBubble": "**График активности** показывает недавнюю активность нод по времени. Наблюдайте, как ваша сеть оживает в течение дня!", + "helpReachabilityIntroBubble": "**Достижимость** оценивает вероятность связи с каждым нодой на основе истории наблюдений сигнала!", "helpReachabilityBetaBubble": "Это **БЕТА-версия** — тестовые пакеты не отправляются! Всё вычисляется на основе истории наблюдений сигнала.", - "helpReachabilityHighBubble": "**Высокая** достижимость (яркая) означает, что мы наблюдали много коммуникации с этим узлом. Скорее всего, он доступен!", + "helpReachabilityHighBubble": "**Высокая** достижимость (яркая) означает, что мы наблюдали много коммуникации с этим нодой. Скорее всего, он доступен!", "helpReachabilityMediumBubble": "**Средняя** достижимость (менее яркая) означает частичную связь. Возможно, он в зоне досягаемости, но нестабильно!", - "helpReachabilityLowBubble": "**Низкая** достижимость (очень тусклая) означает редкую связь. Узел может быть на краю зоны или временно недоступен!", - "helpHealthIntroBubble": "**Состояние сети** отслеживает проблемы: перегрузка, потеря пакетов и нестабильные узлы могут влиять на вашу сеть!", + "helpReachabilityLowBubble": "**Низкая** достижимость (очень тусклая) означает редкую связь. Нода может быть на краю зоны или временно недоступна!", + "helpHealthIntroBubble": "**Состояние сети** отслеживает проблемы: перегрузка, потеря пакетов и нестабильные ноды могут влиять на вашу сеть!", "helpHealthStatusBubble": "**Индикатор состояния** показывает общее состояние сети. Зелёный — всё хорошо, жёлтый — есть проблемы, красный — критично!", "helpHealthMetricsBubble": "**Метрики** показывают количество пакетов, повторные передачи и количество прыжков. Следите за высокими значениями повторных передач!", "helpHealthUtilizationBubble": "**График использования** показывает загрузку вашей сети по времени. Пики могут указывать на перегрузку или помехи!", "helpHealthIssuesBubble": "Раздел **Проблемы** выделяет конкретные неполадки и предлагает решения. Проверьте здесь, если что-то идёт не так!", "helpHealthMonitoringBubble": "Используйте кнопку **паузы**, чтобы остановить мониторинг и сэкономить батарею. Нажмите **возобновить**, когда будете готовы проверить снова!", - "helpTracerouteIntroBubble": "**Трассировка маршрута** определяет фактический путь, по которому ваши пакеты доходят до другого узла!", + "helpTracerouteIntroBubble": "**Трассировка маршрута** определяет фактический путь, по которому ваши пакеты доходят до другой ноды!", "helpTracerouteHowBubble": "При отправке трассировки каждый ретранслятор на пути добавляет себя в пакет. Когда он возвращается, вы видите полный путь!", - "helpTracerouteSendBubble": "Отправьте трассировку с **карточки сведений об узле** (нажмите значок маршрута) или из **истории трассировок** в любое время.", + "helpTracerouteSendBubble": "Отправьте трассировку с **карточки сведений о ноде** (нажмите значок маршрута) или из **истории трассировок** в любое время.", "helpTracerouteCooldownBubble": "Между трассировками есть **30-секундная пауза** для соблюдения норм использования эфирного времени. Пожалуйста, используйте их разумно!", "helpTracerouteResultsBubble": "Результаты показывают пути прыжков **туда** и **обратно** с **SNR** (отношение сигнал/шум) для каждого прыжка.", "helpTracerouteHistoryBubble": "Все трассировки сохраняются в **Историю трассировок** (Настройки > Журналы телеметрии). Удобно для отслеживания изменений сети!", "helpTracerouteExportBubble": "Экспортируйте историю трассировок в **CSV** для анализа тенденций или документирования. Используйте меню на экране истории!", - "helpTracerouteTipsBubble": "**Совет профессионала:** Запускайте трассировки после перемещения узлов, замены антенн или добавления новых ретрансляторов, чтобы проверить улучшения!", - "helpNodedexIntroBubble": "Добро пожаловать в **NodeDex** — ваш личный полевой журнал mesh-сети! Каждый узел, который вы обнаружите, добавляется в вашу коллекцию!", - "helpNodedexSigilsBubble": "Каждый узел получает уникальный **процедурный Символ** — геометрический глиф, сгенерированный из его идентификатора. Никаких двух одинаковых!", - "helpNodedexTraitsBubble": "Узлы получают **Черты** на основе реального поведения — **Странник** перемещается между регионами, **Маяк** всегда доступен, **Призрак** мелькает редко!", - "helpNodedexFiltersBubble": "Используйте **чипы фильтров**, чтобы показывать только узлы с определёнными чертами, недавно обнаруженные узлы или конкретные типы устройств.", - "helpNodedexFieldJournalBubble": "По мере наблюдения за узлами ваш **полевой журнал** пополняется — каждый узел получает рейтинг, автосводку и хронологию!", + "helpTracerouteTipsBubble": "**Совет профессионала:** Запускайте трассировки после перемещения нод, замены антенн или добавления новых ретрансляторов, чтобы проверить улучшения!", + "helpNodedexIntroBubble": "Добро пожаловать в **NodeDex** — ваш личный полевой журнал mesh-сети! Каждая нода, который вы обнаружите, добавляется в вашу коллекцию!", + "helpNodedexSigilsBubble": "Каждая нода получает уникальный **процедурный Символ** — геометрический глиф, сгенерированный из его идентификатора. Никаких двух одинаковых!", + "helpNodedexTraitsBubble": "Ноды получают **Черты** на основе реального поведения — **Странник** перемещается между регионами, **Маяк** всегда доступен, **Призрак** мелькает редко!", + "helpNodedexFiltersBubble": "Используйте **чипы фильтров**, чтобы показывать только ноды с определёнными чертами, недавно обнаруженные ноды или конкретные типы устройств.", + "helpNodedexFieldJournalBubble": "По мере наблюдения за нодами ваш **полевой журнал** пополняется — каждая нода получает рейтинг, автосводку и хронологию!", "helpNodedexAlbumModeBubble": "Нажмите **переключатель вида** в панели приложения, чтобы перейти в **режим Альбома** — вид коллекционных карточек вашего NodeDex!", - "helpNodedexAtmosphereBubble": "Замечаете тонкие **частицы** за экраном? Это **Стихийная Атмосфера** — она отражает преобладающий элемент вашего текущего набора узлов!", + "helpNodedexAtmosphereBubble": "Замечаете тонкие **частицы** за экраном? Это **Стихийная Атмосфера** — она отражает преобладающий элемент вашего текущего набора нод!", "helpNodedexCloudSyncBubble": "Ваш NodeDex хранится локально в SQLite и сохраняется после перезапуска приложения — но **не** при переустановке. Используйте **Облачную синхронизацию** для резервного копирования!", "helpNodedexExportBubble": "Используйте **меню**, чтобы **экспортировать** NodeDex в JSON-файл для резервного копирования или **импортировать** его обратно на другом устройстве.", - "helpNodedexSigilBubble": "Это **Символ** узла — уникальный процедурный глиф, сгенерированный из его идентификатора. Он не меняется и однозначно идентифицирует узел.", - "helpNodedexTraitBubble": "**Черта** — это выведенная личность на основе поведения данного узла: движение, частота появления, уровень сигнала и режимы активности.", + "helpNodedexSigilBubble": "Это **Символ** ноды — уникальный процедурный глиф, сгенерированный из его идентификатора. Он не меняется и однозначно идентифицирует нода.", + "helpNodedexTraitBubble": "**Черта** — это выведенная личность на основе поведения данной ноды: движение, частота появления, уровень сигнала и режимы активности.", "helpNodedexAutoSummaryBubble": "**Автосводка** вычисляет инсайты из истории встреч — распределение по времени суток, динамику появлений и качество сигнала.", - "helpNodedexObservationTimelineBubble": "**Временная шкала наблюдений** визуализирует плотность встреч с этим узлом с течением времени. Отражает, когда и как часто вы видели этот узел.", - "helpNodedexDiscoveryBubble": "**Статистика обнаружения** показывает, когда вы впервые и последний раз видели этот узел, количество встреч и общий охват активности.", - "helpNodedexSignalBubble": "**Записи сигнала** отслеживают лучшие и последние значения SNR и RSSI. Это помогает понять качество соединения с данным узлом.", - "helpNodedexSocialTagBubble": "**Социальный тег** — это метка, которую вы назначаете для категоризации узла: друг, ретранслятор, инфраструктура и т.д.", - "helpNodedexNoteBubble": "**Ваша заметка** — свободное текстовое поле для всего, что вы хотите запомнить об этом узле. Видно только вам.", - "helpNodedexRegionsBubble": "**История регионов** записывает каждый регулятивный регион, в котором наблюдался этот узел. Видно, путешествует ли он!", - "helpNodedexEncountersBubble": "**Последние встречи** — хронология появлений этого узла в вашей сети. Каждая запись включает время, SNR и контекст.", - "helpNodedexActivityTimelineBubble": "**Лента активности** — единая хронологическая лента всего наблюдаемого об этом узле: встречи, изменения, телеметрия и сигналы.", - "helpNodedexCoseenBubble": "**Совместно наблюдаемые** — узлы, часто замечаемые в одной сессии с данным узлом. Помогает понять топологию и кластеры сети.", + "helpNodedexObservationTimelineBubble": "**Временная шкала наблюдений** визуализирует плотность встреч с этим нодой с течением времени. Отражает, когда и как часто вы видели эту ноду.", + "helpNodedexDiscoveryBubble": "**Статистика обнаружения** показывает, когда вы впервые и последний раз видели эту ноду, количество встреч и общий охват активности.", + "helpNodedexSignalBubble": "**Записи сигнала** отслеживают лучшие и последние значения SNR и RSSI. Это помогает понять качество соединения с данным нодой.", + "helpNodedexSocialTagBubble": "**Социальный тег** — это метка, которую вы назначаете для категоризации ноды: друг, ретранслятор, инфраструктура и т.д.", + "helpNodedexNoteBubble": "**Ваша заметка** — свободное текстовое поле для всего, что вы хотите запомнить об этом ноде. Видно только вам.", + "helpNodedexRegionsBubble": "**История регионов** записывает каждый регулятивный регион, в котором наблюдался эта нода. Видно, путешествует ли он!", + "helpNodedexEncountersBubble": "**Последние встречи** — хронология появлений этой ноды в вашей сети. Каждая запись включает время, SNR и контекст.", + "helpNodedexActivityTimelineBubble": "**Лента активности** — единая хронологическая лента всего наблюдаемого об этом ноде: встречи, изменения, телеметрия и сигналы.", + "helpNodedexCoseenBubble": "**Совместно наблюдаемые** — ноды, часто замечаемые в одной сессии с данным нодой. Помогает понять топологию и кластеры сети.", "helpNodedexDeviceBubble": "**Информация об устройстве** показывает актуальную телеметрию — уровень заряда, модель оборудования, версию прошивки и время работы.", - "helpAlbumIntroBubble": "Добро пожаловать в **Альбом коллекционера** — вид вашего NodeDex в формате карточек! Каждый узел становится уникальной коллекционной карточкой!", + "helpAlbumIntroBubble": "Добро пожаловать в **Альбом коллекционера** — вид вашего NodeDex в формате карточек! Каждая нода становится уникальной коллекционной карточкой!", "helpAlbumCoverBubble": "**Обложка альбома** — ваша панель: там показан ваш **Титул исследователя**, общее количество карточек и краткое описание коллекции.", "helpAlbumGroupingBubble": "Используйте **чипы группировки**, чтобы упорядочить карточки по **Черте** (Маяк, Ретранслятор, Призрак...), **Редкости** или **Дате обнаружения**.", - "helpAlbumRarityBubble": "Карточки получают **уровни редкости** на основе количества встреч и черты. **Обычные** узлы встречаются часто, **Легендарные** — невероятно редки!", - "helpAlbumInteractionsBubble": "**Нажмите** на карточку, чтобы открыть полный профиль узла. **Удерживайте**, чтобы открыть **Галерею карточек** для этой черты.", + "helpAlbumRarityBubble": "Карточки получают **уровни редкости** на основе количества встреч и черты. **Обычные** ноды встречаются часто, **Легендарные** — невероятно редки!", + "helpAlbumInteractionsBubble": "**Нажмите** на карточку, чтобы открыть полный профиль ноды. **Удерживайте**, чтобы открыть **Галерею карточек** для этой черты.", "helpAlbumGalleryBubble": "В **Галерее карточек** листайте влево и вправо. **Нажмите** на карточку, чтобы развернуть её, и изучите детали.", "helpAlbumHolographicBubble": "Карточки более высокой редкости переливаются **голографическим эффектом** — чем редче карточка, тем интенсивнее эффект!", "helpAlbumPersistenceBubble": "Ваши предпочтения вида альбома и выбор группировки **сохраняются автоматически**. С облачной синхронизацией они переносятся между устройствами!", - "helpConstellationIntroBubble": "Добро пожаловать в **Созвездие** — звёздную карту вашей mesh-сети! Узлы выглядят как звёзды, а связи — как линии созвездий!", - "helpConstellationLayoutBubble": "Расположение **управляется силами** — узлы, которые часто встречаются вместе, группируются. Изолированные узлы дрейфуют на периферию!", - "helpConstellationInteractionsBubble": "**Нажмите** на узел, чтобы выделить его связи. **Двойное нажатие** для приближения к кластеру. **Щипок для масштабирования** панорамирует вид!", + "helpConstellationIntroBubble": "Добро пожаловать в **Созвездие** — звёздную карту вашей mesh-сети! Ноды выглядят как звёзды, а связи — как линии созвездий!", + "helpConstellationLayoutBubble": "Расположение **управляется силами** — ноды, которые часто встречаются вместе, группируются. Изолированные ноды дрейфуют на периферию!", + "helpConstellationInteractionsBubble": "**Нажмите** на ноду, чтобы выделить его связи. **Двойное нажатие** для приближения к кластеру. **Щипок для масштабирования** панорамирует вид!", "helpConstellationEdgesBubble": "Используйте кнопку **плотности рёбер** в панели приложения, чтобы управлять количеством отображаемых связей. Меньше шума — чётче структура!", - "helpConstellationSearchBubble": "Значок **поиска** позволяет найти конкретный узел по имени или hex-идентификатору. Вид автоматически центрируется на нём!", + "helpConstellationSearchBubble": "Значок **поиска** позволяет найти конкретную ноду по имени или hex-идентификатору. Вид автоматически центрируется на нём!", "helpConstellationAtmosphereBubble": "Созвездие имеет собственную **Стихийную Атмосферу** — тонкий звёздный свет и туманности, отражающие характер вашей коллекции!", "helpConstellationDataBubble": "Данные о совместных наблюдениях формируются **автоматически** из ваших встреч. Чем больше сессий, тем богаче созвездие!", "helpCloudSyncIntroBubble": "**Облачная синхронизация** — это премиум-подписка, которая синхронизирует данные вашей mesh-сети между всеми устройствами!", "helpCloudSyncWhatSyncsBubble": "Облачная синхронизация создаёт резервные копии вашего **NodeDex** (символы, встречи, социальные теги, заметки, совместные наблюдения), **автоматизаций**, **профиля** и **настроек приложения**.", "helpCloudSyncOfflineFirstBubble": "Приложение **работает офлайн в первую очередь**. Изменения сразу сохраняются в SQLite, а когда появляется интернет — синхронизируются в фоне.", - "helpCloudSyncConflictBubble": "Если вы редактируете один узел на двух устройствах, Облачная синхронизация использует принцип **«последняя запись побеждает»** — сохраняется самое последнее изменение.", + "helpCloudSyncConflictBubble": "Если вы редактируете одну ноду на двух устройствах, Облачная синхронизация использует принцип **«последняя запись побеждает»** — сохраняется самое последнее изменение.", "helpCloudSyncSubscriptionBubble": "Облачная синхронизация доступна по **ежемесячной** или **ежегодной** подписке. Управляйте ею в Настройках > Облачная синхронизация.", "helpCloudSyncWithoutBubble": "Без Облачной синхронизации все данные хранятся только на устройстве. Они сохраняются после перезапуска, но не переживают переустановку приложения.", - "helpAetherIntroBubble": "**Aether** позволяет отслеживать узлы Meshtastic на высоте! На высоте 10 000 м сигналы LoRa могут покрывать тысячи километров!", + "helpAetherIntroBubble": "**Aether** позволяет отслеживать ноды Meshtastic на высоте! На высоте 10 000 м сигналы LoRa могут покрывать тысячи километров!", "helpAetherScheduleBubble": "**Запланируйте рейс** перед полётом. Введите номер рейса, аэропорты, дату вылета и настройте отслеживание.", "helpAetherActiveBubble": "**Активные рейсы** показывают актуальные данные о местоположении из API OpenSky Network. Вы увидите свою позицию на карте в реальном времени!", "helpAetherReportsBubble": "**Отчёты о приёме** позволяют наземным станциям сообщать, когда они принимают ваш сигнал. Создавайте карты покрытия на большой высоте!", @@ -8341,27 +8341,27 @@ "helpFtHowBubble": "Файлы разбиваются на **фрагменты ~200 байт** и отправляются по одному через mesh. Получатель собирает фрагменты обратно в файл!", "helpFtNackBubble": "Пропустили фрагмент? Не проблема. Получатель отправляет **NACK** (отрицательное подтверждение), и отправитель повторяет только пропущенные фрагменты!", "helpFtLimitBubble": "Максимальный размер файлов — **8 КБ**. LoRa — медленная, общая, маломощная радиосвязь. Один файл 8 КБ может занять несколько минут!", - "helpFtBetaBubble": "Эта функция находится в стадии **БЕТА**. Оба узла должны работать на Socialmesh в одной и той же mesh-сети.", - "helpFtContactsBubble": "Используйте вкладку **Контакты**, чтобы выбрать узел, затем нажмите **Отправить файл**. Вкладка «Контакты» показывает, кто сейчас в сети.", + "helpFtBetaBubble": "Эта функция находится в стадии **БЕТА**. Оба ноды должны работать на Socialmesh в одной и той же mesh-сети.", + "helpFtContactsBubble": "Используйте вкладку **Контакты**, чтобы выбрать ноду, затем нажмите **Отправить файл**. Вкладка «Контакты» показывает, кто сейчас в сети.", "helpFtlSharedBubble": "Каналы LoRa **общие и медленные**. Каждый байт, который вы отправляете, — это эфирное время, которое используется совместно с другими. Отправляйте только необходимое!", "helpFtlToaBubble": "**Время в эфире** на фрагмент зависит от коэффициента расширения (SF). SF7 (быстро, малая дальность): ~30 мс/фрагмент. SF12 (медленно, большая дальность): ~1,5 с/фрагмент!", "helpFtlMathBubble": "8 КБ ÷ 200 байт/фрагмент = **41 фрагмент**. При SF7: ~1,2 с всего. При SF12: **~61 с** — и это только эфирное время, без учёта повторных передач!", "helpFtlDutyBubble": "Диапазоны EU868 и аналогичные имеют **1% дюти-цикл** — радио может передавать только 1% времени. Файл на 8 КБ при SF12 может занять **несколько часов**!", "helpFtlCapBubble": "8 КБ — это **самый безопасный максимум**, при котором передача остаётся выполнимой даже при наихудшем коэффициенте расширения.", "helpFtlUsbBubble": "Передачи через BLE и USB не имеют ограничений радиодюти-цикла. В будущих версиях этот лимит может быть снят для таких подключений.", - "helpNodeDexSectionSigil": "Уникальный процедурный глиф, сгенерированный из идентификатора данного узла.", + "helpNodeDexSectionSigil": "Уникальный процедурный глиф, сгенерированный из идентификатора данной ноды.", "helpNodeDexSectionTrait": "Выведенный архетип личности на основе поведенческих сигналов:", - "helpNodeDexSectionAutoSummary": "Вычисленные инсайты из истории встреч данного узла. Распределение по времени суток", - "helpNodeDexSectionObservationTimeline": "Визуальная временная шкала истории наблюдений данного узла. Столбик показывает", - "helpNodeDexSectionDiscovery": "Отслеживает время первого и последнего обнаружения данного узла в вашей сети, общее", + "helpNodeDexSectionAutoSummary": "Вычисленные инсайты из истории встреч данной ноды. Распределение по времени суток", + "helpNodeDexSectionObservationTimeline": "Визуальная временная шкала истории наблюдений данной ноды. Столбик показывает", + "helpNodeDexSectionDiscovery": "Отслеживает время первого и последнего обнаружения данной ноды в вашей сети, общее", "helpNodeDexSectionSignal": "Лучшие и последние значения SNR (отношение сигнал/шум) и RSSI", - "helpNodeDexSectionSocialTag": "Личная метка для категоризации данного узла. Социальные теги являются", - "helpNodeDexSectionNote": "Свободная заметка о любой информации, которую вы хотите запомнить об этом узле.", - "helpNodeDexSectionRegions": "Все регулятивные регионы, в которых наблюдался данный узел. Регион", - "helpNodeDexSectionEncounters": "Хронологическая лента появлений данного узла в вашей сети.", - "helpNodeDexSectionActivityTimeline": "Единая хронологическая лента всего наблюдаемого об этом узле:", - "helpNodeDexSectionCoseen": "Узлы, которые часто наблюдаются в одной сессии с данным узлом.", - "helpNodeDexSectionDevice": "Актуальная телеметрия с узла: процент заряда батареи, модель оборудования,", + "helpNodeDexSectionSocialTag": "Личная метка для категоризации данной ноды. Социальные теги являются", + "helpNodeDexSectionNote": "Свободная заметка о любой информации, которую вы хотите запомнить об этом ноде.", + "helpNodeDexSectionRegions": "Все регулятивные регионы, в которых наблюдался данная нода. Регион", + "helpNodeDexSectionEncounters": "Хронологическая лента появлений данной ноды в вашей сети.", + "helpNodeDexSectionActivityTimeline": "Единая хронологическая лента всего наблюдаемого об этом ноде:", + "helpNodeDexSectionCoseen": "Ноды, которые часто наблюдаются в одной сессии с данным нодой.", + "helpNodeDexSectionDevice": "Актуальная телеметрия с ноды: процент заряда батареи, модель оборудования,", "helpNodeDexSectionAlbumRarity": "Уровни редкости вычисляются на основе количества встреч и выведенной черты.", "helpNodeDexSectionAlbumGrouping": "Карточки можно группировать по Черте (поведенческий архетип), Редкости", "helpNodeDexSectionAlbumExplorerTitle": "Ваш Титул исследователя отражает общий прогресс коллекции.", @@ -8392,26 +8392,26 @@ "failedToPlay": "Не удалось воспроизвести: {error}", "whatsNewVersion190Subtitle": "Версия 1.9.0", "whatsNewReachabilityTitle": "Достижимость", - "whatsNewReachabilityDescription": "Оцените вероятность достижения каждого узла в вашей сети — без отправки единого тестового пакета.\\n\\nДостижимость пассивно наблюдает за трафиком в сети и присваивает каждому узлу уровень уверенности: высокий, средний или низкий. Найдите в меню под разделом «Сеть».", + "whatsNewReachabilityDescription": "Оцените вероятность достижения каждой ноды в вашей сети — без отправки единого тестового пакета.\\n\\nДостижимость пассивно наблюдает за трафиком в сети и присваивает каждой ноде уровень уверенности: высокий, средний или низкий. Найдите в меню под разделом «Сеть».", "whatsNewVersion1100Subtitle": "Версия 1.10.0", "whatsNewWorldMapTitle": "Карта мира", - "whatsNewWorldMapDescription": "Смотрите всю глобальную сеть Meshtastic на одной карте. Каждая точка — узел, передающий своё местоположение. Приближайте, перемещайте карту, нажимайте на точки для просмотра сведений об узлах, информации об оборудовании и времени последней активности.\\n\\nПодключение не требуется. Карта мира берёт данные в реальном времени из бэкенда Socialmesh, чтобы вы могли изучать сеть где угодно.", + "whatsNewWorldMapDescription": "Смотрите всю глобальную сеть Meshtastic на одной карте. Каждая точка — нода, передающий своё местоположение. Приближайте, перемещайте карту, нажимайте на точки для просмотра сведений о нодах, информации об оборудовании и времени последней активности.\\n\\nПодключение не требуется. Карта мира берёт данные в реальном времени из бэкенда Socialmesh, чтобы вы могли изучать сеть где угодно.", "whatsNewVersion1101Subtitle": "Версия 1.10.1", "whatsNewPresenceTitle": "Присутствие", - "whatsNewPresenceDescription": "Смотрите, кто активен в вашей сети, с первого взгляда. Присутствие показывает активность узлов в реальном времени с индикаторами намерений — мониторинг, мобильный или стационарная базовая станция.\\n\\nФильтруйте по уровню активности, ищите по имени и нажимайте на любой узел для просмотра полного профиля. Найдите в меню под разделом «Социальное».", + "whatsNewPresenceDescription": "Смотрите, кто активен в вашей сети, с первого взгляда. Присутствие показывает активность нод в реальном времени с индикаторами намерений — мониторинг, мобильный или стационарная базовая станция.\\n\\nФильтруйте по уровню активности, ищите по имени и нажимайте на любая нода для просмотра полного профиля. Найдите в меню под разделом «Социальное».", "whatsNewVersion1110Subtitle": "Версия 1.11.0", "whatsNewSignalsTitle": "Сигналы", "whatsNewSignalsDescription": "Транслируйте мимолётные моменты в вашу сеть. Сигналы — это кратковременные публикации: поделитесь текстом, фото или вашим местоположением с TTL от 15 минут до 24 часов.\\n\\nБлижайшие сигналы отображаются первыми с бейджами близости, показывающими число переходов. Когда они исчезнут, они пропадут навсегда. Настоящий автономный эфемерный контент.", "whatsNewVersion1130Subtitle": "Версия 1.13.0", "whatsNewNodeDexTitle": "NodeDex", - "whatsNewNodeDexDescription": "Живой полевой журнал мира радиосетей. Каждый обнаруженный узел автоматически записывается с уникальным процедурным Sigil и чертой характера, полученной из реального поведения.\\n\\nНайдите в меню под разделом «Социальное». Фильтруйте по чертам, ищите по имени или шестнадцатеричному ID, нажимайте на запись для изучения полного профиля — история сигнала, хронология обнаружения и многое другое.", + "whatsNewNodeDexDescription": "Живой полевой журнал мира радиосетей. Каждый обнаруженная нода автоматически записывается с уникальным процедурным Sigil и чертой характера, полученной из реального поведения.\\n\\nНайдите в меню под разделом «Социальное». Фильтруйте по чертам, ищите по имени или шестнадцатеричному ID, нажимайте на запись для изучения полного профиля — история сигнала, хронология обнаружения и многое другое.", "whatsNewVersion1150Subtitle": "Версия 1.15.0", "whatsNewAetherTitle": "Aether", - "whatsNewAetherDescription": "Отслеживайте узлы Meshtastic на высоте! Запланируйте полёт с вашим узлом и позвольте наземным станциям по всему миру прослушивать ваш сигнал.\\n\\nНа высоте 35 000 футов LoRa может достигать 400+ км. Сообщайте о приёмах, соревнуйтесь в таблице лидеров по дальности и устанавливайте новые рекорды. Найдите в меню под разделом «Социальное».", + "whatsNewAetherDescription": "Отслеживайте ноды Meshtastic на высоте! Запланируйте полёт с вашим нодой и позвольте наземным станциям по всему миру прослушивать ваш сигнал.\\n\\nНа высоте 35 000 футов LoRa может достигать 400+ км. Сообщайте о приёмах, соревнуйтесь в таблице лидеров по дальности и устанавливайте новые рекорды. Найдите в меню под разделом «Социальное».", "whatsNewVersion1160Subtitle": "Версия 1.16.0", "whatsNewTakGatewayTitle": "TAK Шлюз", "whatsNewTakGatewayDescription": "Подключите вашу сеть к экосистеме Team Awareness Kit (TAK). Socialmesh теперь подключается к TAK Gateway через WebSocket и передаёт живые объекты Cursor-on-Target на вашу карту.\\n\\nКаждый объект раскрашен по стандартной принадлежности и снабжён иконкой соответствующего типа. Фильтруйте по принадлежности, ищите позывные, отслеживайте объекты долгим нажатием и нажимайте на маркер для просмотра полных данных CoT. Найдите в меню под разделом «Сеть».", - "notificationNewNodeTitle": "Обнаружен новый узел", + "notificationNewNodeTitle": "Обнаружен новая нода", "notificationNewNodeBody": "{nodeName} ({shortCode}) присоединился к сети", "notificationAetherFlightTitle": "Обнаружен полёт Aether", "notificationDetectionSensorTitle": "{sensorName}: {state}", @@ -8420,7 +8420,7 @@ "notificationProximityAlertTitle": "Оповещение о близости: {callsign}", "notificationDirectMessageTitle": "Сообщение от {senderName} ({shortCode})", "notificationChannelMessageTitle": "{senderName} ({shortCode}) в {channelName}", - "notificationChannelNodeDiscovery": "Уведомления о новых обнаруженных узлах сети", + "notificationChannelNodeDiscovery": "Уведомления о новых обнаруженных нодах сети", "notificationChannelAetherFlights": "Уведомления о событиях обнаружения полётов Aether", "notificationChannelDeviceAlerts": "Важные уведомления от вашего устройства Meshtastic", "notificationChannelDetectionSensor": "Уведомления о событиях датчиков обнаружения", @@ -8430,14 +8430,14 @@ "notificationChannelMessages": "Уведомления о сообщениях в каналах сети", "flowNodeEvent": "Событие", "flowNodeMessageContains": "Сообщение содержит", - "flowNodeNodeSilent": "Узел молчит", + "flowNodeNodeSilent": "Нода молчит", "flowNodeScheduled": "По расписанию", "flowNodeSignalWeak": "Слабый сигнал", "flowNodeChannelActivity": "Активность канала", "flowNodeDetectionSensor": "Датчик обнаружения", "flowNodeManual": "Вручную", - "flowNodeAllNodes": "Все узлы", - "flowNodeNodes": "Узлы", + "flowNodeAllNodes": "Все ноды", + "flowNodeNodes": "Ноды", "flowNodeTraitFilter": "Фильтр по чертам", "flowNodeDistanceFilter": "Фильтр по расстоянию", "flowNodeEncounterFilter": "Фильтр по встречам", @@ -8460,7 +8460,7 @@ "flowNodeInverted": "Инвертировано", "flowNodeDelayed": "Отложено", "automationTemplateLowBatteryTitle": "Оповещение о низком заряде", - "automationTemplateNodeOfflineTitle": "Оповещение об отключении узла", + "automationTemplateNodeOfflineTitle": "Оповещение об отключении ноды", "automationTemplateWeatherReportTitle": "Отчёт о погоде", "automationTemplateWeatherReportDescription": "Периодически отправлять данные о погоде с датчиков окружающей среды", "automationTemplateChannelMonitorTitle": "Мониторинг канала", @@ -8496,7 +8496,7 @@ "onboardingSignalContentMike": "Базовый лагерь разбит. Готов по вашей команде.", "onboardingSignalContentAlex": "Уже еду, буду через 15 мин", "automationErrorSendMsgNotConfigured": "Обратный вызов отправки сообщений не настроен", - "automationErrorNoTargetNode": "Целевой узел не указан", + "automationErrorNoTargetNode": "Целевая нода не указан", "automationErrorSendChannelNotConfigured": "Обратный вызов отправки в канал не настроен", "automationErrorNoTargetChannel": "Целевой канал не указан", "automationErrorNoSoundConfigured": "Звук не настроен", @@ -8513,11 +8513,11 @@ "automationErrorShortcutRunFailed": "Не удалось выполнить Shortcut: {error}", "automationErrorGlyphNotAvailable": "Интерфейс подсветки недоступен", "automationErrorGlyphPatternFailed": "Не удалось отобразить паттерн подсветки: {error}", - "automationTemplateLowBatteryDesc": "Уведомить, когда уровень аккумулятора узла падает ниже 20%", - "automationTemplateNodeOfflineDesc": "Уведомить, когда узел уходит в офлайн", - "automationTemplateGeofenceExitDesc": "Оповестить, когда узел покидает обозначенную зону", + "automationTemplateLowBatteryDesc": "Уведомить, когда уровень аккумулятора ноды падает ниже 20%", + "automationTemplateNodeOfflineDesc": "Уведомить, когда нода уходит в офлайн", + "automationTemplateGeofenceExitDesc": "Оповестить, когда нода покидает обозначенную зону", "automationTemplateSosDesc": "Автоматически ответить при получении SOS-сообщения", - "automationTemplateDeadManDesc": "Оповестить, если нет активности от узла в течение 30 минут", + "automationTemplateDeadManDesc": "Оповестить, если нет активности от ноды в течение 30 минут", "automationScheduledTitle": "Автоматизация по расписанию", "automationScheduledBody": "Нажмите, чтобы запустить автоматизацию по расписанию", "authErrorGoogleSignInCancelled": "Вход через Google отменён", @@ -8565,13 +8565,13 @@ "globalLayerCopySummaryTitle": "Готово к подключению", "globalLayerCopySummaryBody": "Просмотрите настройки Глобального слоя ниже. Вы можете изменить любую из них позже.", "mqttTopicChatLabel": "Чат", - "mqttTopicChatDescription": "Текстовые сообщения, которыми обмениваются узлы сети по определённому каналу.", + "mqttTopicChatDescription": "Текстовые сообщения, которыми обмениваются ноды сети по определённому каналу.", "mqttTopicTelemetryLabel": "Телеметрия", "mqttTopicTelemetryDescription": "Данные о состоянии устройства: уровень заряда, напряжение, время работы.", "mqttTopicPositionLabel": "Местоположение", - "mqttTopicPositionDescription": "GPS-координаты, передаваемые узлами сети (конфиденциальные данные).", - "mqttTopicNodeInfoLabel": "Информация об узле", - "mqttTopicNodeInfoDescription": "Широковещательные сведения об узле: длинное имя, короткое имя, модель оборудования.", + "mqttTopicPositionDescription": "GPS-координаты, передаваемые нодами сети (конфиденциальные данные).", + "mqttTopicNodeInfoLabel": "Информация о ноде", + "mqttTopicNodeInfoDescription": "Широковещательные сведения о ноде: длинное имя, короткое имя, модель оборудования.", "mqttTopicMapReportsLabel": "Отчёты карты", "mqttTopicMapReportsDescription": "Периодические отчёты о местоположении для общедоступных сервисов карты сети.", "mqttBrokerMeshtasticName": "Meshtastic (официальный)", @@ -8667,8 +8667,8 @@ "deepLinkInvalidInviteLink": "Недействительная или неполная ссылка-приглашение", "deepLinkInvalidChannelData": "Недействительные данные канала", "deepLinkConnectToImportChannel": "Подключите устройство для импорта этого канала", - "deepLinkUnableToLoadNode": "Не удалось загрузить данные узла", - "deepLinkNodeAddedSuccess": "Узел успешно добавлен", + "deepLinkUnableToLoadNode": "Не удалось загрузить данные ноды", + "deepLinkNodeAddedSuccess": "Нода успешно добавлена", "lifecycleActionCancelled": "Действие отменено", "lifecycleActionExpiredBackground": "Действие истекло, пока приложение было в фоне", "lifecycleActionCancelledBackground": "Действие отменено — приложение в фоновом режиме", From 7b58814494914f6f51a815b380daa2891c40770f Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Fri, 6 Mar 2026 05:37:45 +0300 Subject: [PATCH 09/11] =?UTF-8?q?l10n:=20update=20translation=20of=20"Time?= =?UTF-8?q?line"=20to=20"=D0=98=D1=81=D1=82=D0=BE=D1=80=D0=B8=D1=8F"=20for?= =?UTF-8?q?=20consistency=20in=20Russian=20language=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/GLOSSARY_RU.md | 1 + lib/l10n/app_ru.arb | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/GLOSSARY_RU.md b/docs/GLOSSARY_RU.md index 67458d4c..74999232 100644 --- a/docs/GLOSSARY_RU.md +++ b/docs/GLOSSARY_RU.md @@ -76,6 +76,7 @@ |---------|---------|------------| | Dashboard | Панель | | | Feed | Лента | | +| Timeline | История | | | Map | Карта | | | Settings | Настройки | | | Profile | Профиль | | diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 42cc8618..64507918 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -1649,7 +1649,7 @@ "helpCenterScreenSettings": "Настройки", "helpCenterScreenSignalFeed": "Лента Сигналов", "helpCenterScreenTakGateway": "TAK Шлюз", - "helpCenterScreenTimeline": "Хронология", + "helpCenterScreenTimeline": "История", "helpCenterScreenTraceRouteLog": "Журнал трассировки маршрута", "helpCenterScreenWidgetBuilder": "Конструктор виджетов", "helpCenterScreenWidgetDashboard": "Панель виджетов", @@ -2413,7 +2413,7 @@ "navigationTakGateway": "TAK Шлюз", "navigationTakMap": "TAK Карта", "navigationThemePack": "Пакет тем", - "navigationTimeline": "Хронология", + "navigationTimeline": "История", "navigationViewProfile": "Просмотр профиля", "navigationWidgets": "Виджеты", "navigationWorldMap": "Карта мира", @@ -2674,7 +2674,7 @@ "nodeIntelligenceUnknown": "Неизвестно", "nodedexActiveDaysOf14": "{count}/14 дней", "nodedexActiveNow": "активен сейчас", - "nodedexActivityTimelineTitle": "Хронология активности", + "nodedexActivityTimelineTitle": "История активности", "nodedexAddToAppleWallet": "Добавить в Apple Wallet", "nodedexAdditionalTraits": "Дополнительные характеристики", "nodedexAgeDiscoveredDaysAgo": "обнаружен {days} д. назад", @@ -2933,7 +2933,7 @@ "nodedexGroupByRegion": "Региону", "nodedexGroupByTrait": "Характеристике", "nodedexHardwareLabel": "Оборудование", - "nodedexHelpActivityTimeline": "Хронология активности", + "nodedexHelpActivityTimeline": "История активности", "nodedexHelpClassification": "Классификация", "nodedexHelpConstellationLinks": "Связи созвездия", "nodedexHelpDeviceInfo": "Информация об устройстве", @@ -3024,7 +3024,7 @@ "nodedexNoteHint": "Напишите заметку об этом ноде...", "nodedexNoteSave": "Сохранить", "nodedexNoteTitle": "Заметка", - "nodedexObservationTimelineTitle": "Хронология наблюдений", + "nodedexObservationTimelineTitle": "История наблюдений", "nodedexObservedDate": "Наблюдался {date}", "nodedexPaletteColorPrimary": "Основной", "nodedexPaletteColorSecondary": "Дополнительный", @@ -3070,7 +3070,7 @@ "nodedexRegionEncounterCount": "{count} встреч", "nodedexRegionsCompactLabel": "Регионы", "nodedexRegionsLabel": "Регионы", - "nodedexRelationshipTimeline": "Хронология отношений", + "nodedexRelationshipTimeline": "История отношений", "nodedexRelativeDaysAgo": "{days}д назад", "nodedexRelativeHoursAgo": "{hours}ч назад", "nodedexRelativeJustNow": "только что", @@ -3158,7 +3158,7 @@ "nodedexTimeBucketNight": "Ночь", "nodedexTimeBucketNightRange": "23:00 – 5:00", "nodedexTimelineChannel": "Канал {channel}", - "nodedexTimelineCouldNotLoad": "Не удалось загрузить хронологию", + "nodedexTimelineCouldNotLoad": "Не удалось загрузить историю", "nodedexTimelineEncounterBestSnr": ", лучший SNR {snr}dB", "nodedexTimelineEncounterClosest": ", ближайшее {distance}", "nodedexTimelineEncounterSession": "{count} встреч за {duration}{detail}", @@ -5268,7 +5268,7 @@ "timelineSnrValue": "SNR: {value} dB", "timelineSunday": "Воскресенье", "timelineThursday": "Четверг", - "timelineTitle": "Хронология", + "timelineTitle": "История", "timelineToday": "Сегодня", "timelineTryDifferent": "Попробуйте другой поисковый запрос или фильтр", "timelineTuesday": "Вторник", @@ -5557,7 +5557,7 @@ "widgetBuilderIconSun": "Солнце", "widgetBuilderIconTemperature": "Температура", "widgetBuilderIconThumbsUp": "Нравится", - "widgetBuilderIconTimeline": "Хронология", + "widgetBuilderIconTimeline": "История", "widgetBuilderIconUp": "Вверх", "widgetBuilderIconWarning": "Предупреждение", "widgetBuilderIconWifi": "WiFi", @@ -6913,7 +6913,7 @@ "ringtoneValidationMissingColons": "Неверный формат: отсутствуют двоеточия. Ожидается name:defaults:notes", "ringtoneValidationInvalidFormat": "Неверный формат: ожидается name:defaults:notes", "ringtoneValidationInvalidDefaults": "Неверные значения по умолчанию: ожидается d=duration, o=octave, b=bpm", - "ringtoneValidationNoNotes": "В RTTTL строке не найдено нот", + "ringtoneValidationNoNotes": "В строке RTTTL не найдено нот", "ringtoneValidationInvalidNote": "Неверная нота: «{note}»", "ringtoneValidationNoValidNotes": "Не найдено допустимых нот", "accountSubTitle": "Аккаунт", @@ -8074,7 +8074,7 @@ "helpMesh3dOverviewDescription": "3D-визуализация топологии сети", "helpGlobeOverviewTitle": "Вид глобуса", "helpGlobeOverviewDescription": "3D-глобус с вашей mesh-сетью", - "helpTimelineOverviewTitle": "Хронология", + "helpTimelineOverviewTitle": "История", "helpTimelineOverviewDescription": "История активности в вашей mesh-сети", "helpDeviceShopOverviewTitle": "Магазин устройств", "helpDeviceShopOverviewDescription": "Обзор оборудования Meshtastic", @@ -8191,7 +8191,7 @@ "helpCreateImageBubble": "Нажмите на **значок изображения**, чтобы прикрепить фото. Изображения загружаются через облако, когда есть интернет — по mesh передаётся только ссылка.", "helpCreateLocationBubble": "Нажмите на **метку местоположения**, чтобы прикрепить текущую GPS-позицию устройства. Ваше местоположение видно всем, кто получит сигнал.", "helpCreateTtlBubble": "**Значок таймера** задаёт TTL — как долго сигнал остаётся активным. Выбирайте от нескольких минут до нескольких часов.", - "helpCreateIntentBubble": "Выберите **Намерение присутствия**, чтобы сообщить сети, чем вы занимаетесь — исследуете, наблюдаете, нуждаетесь в помощи и т.д.", + "helpCreateIntentBubble": "Выберите **Намерение присутствия**, чтобы сообщить сети, чем вы занимаетесь — исследуете, наблюдаете, помогаете или просто слушаете. Это добавляет контекст без лишних слов.", "helpCreateStatusBubble": "Поле **краткого статуса** — это одна строка, которая отображается как подпись к вашему сигналу в ленте.", "helpCreateSubmitBubble": "Когда будете готовы, нажмите **Транслировать**! Ваш сигнал распространится по mesh-сети через радио. Он доступен всем в пределах досягаемости!", "helpDetailIntroBubble": "Это экран **подробностей сигнала**. Здесь можно прочитать полный текст, увидеть, откуда он пришёл, и ответить!", @@ -8271,7 +8271,7 @@ "helpNodedexSigilsBubble": "Каждая нода получает уникальный **процедурный Символ** — геометрический глиф, сгенерированный из его идентификатора. Никаких двух одинаковых!", "helpNodedexTraitsBubble": "Ноды получают **Черты** на основе реального поведения — **Странник** перемещается между регионами, **Маяк** всегда доступен, **Призрак** мелькает редко!", "helpNodedexFiltersBubble": "Используйте **чипы фильтров**, чтобы показывать только ноды с определёнными чертами, недавно обнаруженные ноды или конкретные типы устройств.", - "helpNodedexFieldJournalBubble": "По мере наблюдения за нодами ваш **полевой журнал** пополняется — каждая нода получает рейтинг, автосводку и хронологию!", + "helpNodedexFieldJournalBubble": "По мере наблюдения за нодами ваш **полевой журнал** пополняется — каждая нода получает рейтинг, автосводку и историю!", "helpNodedexAlbumModeBubble": "Нажмите **переключатель вида** в панели приложения, чтобы перейти в **режим Альбома** — вид коллекционных карточек вашего NodeDex!", "helpNodedexAtmosphereBubble": "Замечаете тонкие **частицы** за экраном? Это **Стихийная Атмосфера** — она отражает преобладающий элемент вашего текущего набора нод!", "helpNodedexCloudSyncBubble": "Ваш NodeDex хранится локально в SQLite и сохраняется после перезапуска приложения — но **не** при переустановке. Используйте **Облачную синхронизацию** для резервного копирования!", @@ -8285,7 +8285,7 @@ "helpNodedexSocialTagBubble": "**Социальный тег** — это метка, которую вы назначаете для категоризации ноды: друг, ретранслятор, инфраструктура и т.д.", "helpNodedexNoteBubble": "**Ваша заметка** — свободное текстовое поле для всего, что вы хотите запомнить об этом ноде. Видно только вам.", "helpNodedexRegionsBubble": "**История регионов** записывает каждый регулятивный регион, в котором наблюдался эта нода. Видно, путешествует ли он!", - "helpNodedexEncountersBubble": "**Последние встречи** — хронология появлений этой ноды в вашей сети. Каждая запись включает время, SNR и контекст.", + "helpNodedexEncountersBubble": "**Последние встречи** — история появлений этой ноды в вашей сети. Каждая запись включает время, SNR и контекст.", "helpNodedexActivityTimelineBubble": "**Лента активности** — единая хронологическая лента всего наблюдаемого об этом ноде: встречи, изменения, телеметрия и сигналы.", "helpNodedexCoseenBubble": "**Совместно наблюдаемые** — ноды, часто замечаемые в одной сессии с данным нодой. Помогает понять топологию и кластеры сети.", "helpNodedexDeviceBubble": "**Информация об устройстве** показывает актуальную телеметрию — уровень заряда, модель оборудования, версию прошивки и время работы.", From 01986359ae7c60085ce3b20d8308b253f3a76a33 Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Fri, 6 Mar 2026 05:38:14 +0300 Subject: [PATCH 10/11] l10n: remove TODO section for Russian localization from TODO_RU.md --- docs/TODO_RU.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/docs/TODO_RU.md b/docs/TODO_RU.md index 99f23373..e69de29b 100644 --- a/docs/TODO_RU.md +++ b/docs/TODO_RU.md @@ -1,11 +0,0 @@ -# TODO (RU локализация) - -Сюда перенесены TODO из `lib/l10n/app_ru.arb` (удалены из ARB, чтобы файл оставался валидным JSON/ARB). - -## Проверить/улучшить переводы - -- `ringtoneValidationNoNotes` — сверить формулировку с английской строкой “No notes found in RTTTL string”. -- `ringtoneValidationInvalidNote` — сверить формат кавычек/пунктуацию с английской строкой “Invalid note: \"{note}\"”. -- `ringtoneValidationNoValidNotes` — сверить формулировку с английской строкой “No valid notes found”. -- `helpCreateIntentBubble` — в EN есть доп. фраза “It adds context without extra words.”; решить, нужно ли добавить аналог в RU. - From 86d1c815acc6869b59e5524303128ad6a156c7ae Mon Sep 17 00:00:00 2001 From: Vladimir Grishin Date: Sat, 7 Mar 2026 04:58:10 +0500 Subject: [PATCH 11/11] Update Global Layer, MQTT, Public key, Edges & Spreading factor translations * l10n: Update MQTT & Global Layer translations * l10n: Update Public key, MQTT & 'this node' translations * l10n: Update Edge, SpreadFactor translations * l10n: Update translations of router, repeater, air util, dbm, spread factor, import * l10n: Add new terms related with Global Layer & MQTT --- docs/GLOSSARY_RU.md | 25 +++-- lib/l10n/app_ru.arb | 226 ++++++++++++++++++++++---------------------- 2 files changed, 131 insertions(+), 120 deletions(-) diff --git a/docs/GLOSSARY_RU.md b/docs/GLOSSARY_RU.md index 74999232..4416d997 100644 --- a/docs/GLOSSARY_RU.md +++ b/docs/GLOSSARY_RU.md @@ -1,7 +1,7 @@ # Глоссарий терминов — Socialmesh (EN → RU) Справочник терминов, используемых в переводе приложения на русский язык. -Обновлён: 2026-03-05 | Покрытие: 8404/8675 ключей (96%) +Обновлён: 2026-03-06 | Покрытие: 8404/8675 ключей (96%) --- @@ -21,8 +21,8 @@ | Hops | хопы / хопов | | | Gateway | Шлюз | | | Gateways | Шлюзы | | -| Router (role) | Маршрутизатор | Роль узла | -| Repeater | Ретранслятор | | +| Router (role) | Роутер | Роль узла | +| Repeater | Репитер | | | Relay | Ретранслятор | | | Relay Mode | Режим ретрансляции | | | Client (role) | Клиент | Роль узла по умолчанию | @@ -50,13 +50,13 @@ | Frequency | Частота | | | Region | Регион | Регион радиочастот | | Channel Utilization | Загрузка канала | | -| Air Util | Эфирное время | | +| Air Util | Загрузка передачи | | | Signal Strength | Уровень сигнала | | | SNR | SNR | Не переводить — Signal-to-Noise Ratio | | RSSI | RSSI | Не переводить — уровень сигнала | -| dBm | дБм | | +| dBm | dBm | Не переводить | | MHz | MHz | Не переводить | -| Spread Factor | Коэффициент расширения | | +| Spread Factor | Коэффициент распространения | | | Bandwidth | Полоса пропускания | | | Coding Rate | Скорость кодирования | | | TX Power | Мощность передачи (TX) | | @@ -67,6 +67,17 @@ | LoRa | LoRa | Не переводить — технология | | MQTT | MQTT | Не переводить — протокол | | PKI | PKI | Не переводить — инфраструктура ключей | +| Global Layer | MQTT | Общий термин для блока работы по MQTT через интернет | +| MQTT server | MQTT-сервер | | +| MQTT broker | MQTT-сервер | То же, что и MQTT-сервер | +| broker | MQTT-сервер | То же, что и MQTT-сервер | +| Topic Root | Корневая тема | Префикс | +| Host | Адрес | | +| Hostname | Адрес сервера | | +| DNS Resolution | Разрешение DNS | | +| TLS handshake | TLS handshake | Не переводить | +| Username | Имя пользователя | | +| Duty cycle | Рабочий цикл | --- @@ -215,7 +226,7 @@ | Notification | Уведомление | | | Alert | Оповещение | | | Permission | Разрешение | | -| Import | Импортировать | | +| Import | Импорт | | | Export | Экспорт | | | Share | Поделиться | | | Backup | Создать копию | | diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 64507918..c55c7c18 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -857,7 +857,7 @@ "channelFormKeySizeNoneDesc": "Сообщения отправляются в открытом виде", "channelFormMaxChannelsReached": "Максимально допустимо 8 каналов", "channelFormMqttLabel": "MQTT", - "channelFormMqttWarning": "Большинство устройств имеют очень ограниченные вычислительные ресурсы и оперативную память. Подключение активного канала, например LongFast, через стандартный сервер MQTT может перегрузить устройство потоком 15–25 пакетов в секунду, из-за чего оно перестанет отвечать. Рекомендуется использовать частный брокер или менее загруженный канал.", + "channelFormMqttWarning": "Большинство устройств имеют очень ограниченные вычислительные ресурсы и оперативную память. Подключение активного канала, например LongFast, через стандартный сервер MQTT может перегрузить устройство потоком 15–25 пакетов в секунду, из-за чего оно перестанет отвечать. Рекомендуется использовать частный MQTT-сервер или менее загруженный канал.", "channelFormNameHint": "Введите имя канала (без пробелов)", "channelFormNameMaxHint": "Не более 11 символов", "channelFormNameTitle": "Имя канала", @@ -938,7 +938,7 @@ "channelWizardKeySizeDefaultDesc": "Простой общий ключ — совместим, но небезопасен", "channelWizardKeySizeNone": "Нет", "channelWizardKeySizeNoneDesc": "Без шифрования — сообщения отправляются в открытом виде", - "channelWizardMqttFloodWarning": "Большинство устройств имеют очень ограниченные вычислительные ресурсы и оперативную память. Подключение активного канала, например LongFast, через стандартный сервер MQTT может перегрузить устройство потоком 15–25 пакетов в секунду, из-за чего оно перестанет отвечать. Рекомендуется использовать частный брокер или менее загруженный канал.", + "channelWizardMqttFloodWarning": "Большинство устройств имеют очень ограниченные вычислительные ресурсы и оперативную память. Подключение активного канала, например LongFast, через стандартный сервер MQTT может перегрузить устройство потоком 15–25 пакетов в секунду, из-за чего оно перестанет отвечать. Рекомендуется использовать частный MQTT-сервер или менее загруженный канал.", "channelWizardMqttHeader": "Настройки MQTT", "channelWizardMqttWarning": "Для работы uplink/downlink необходимо настроить MQTT на устройстве.", "channelWizardNameBannerInfo": "Имя канала ограничено 12 буквенно-цифровыми символами.", @@ -2274,7 +2274,7 @@ "meshcoreShellUnknown": "Неизвестно", "meshcoreShellUnnamedNode": "Безымянная нода", "meshcoreSlotIndex": "Слот {index}", - "meshcoreSpreadingFactorLabel": "Коэффициент расширения", + "meshcoreSpreadingFactorLabel": "Коэффициент распространения", "meshcoreStatusLabel": "Статус", "meshcoreSwapAB": "Поменять A ↔ B", "meshcoreSyncTime": "Синхронизировать время", @@ -2769,7 +2769,7 @@ "nodedexEdgeDensityDense": "Плотная", "nodedexEdgeDensityNormal": "Обычная", "nodedexEdgeDensitySparse": "Разреженная", - "nodedexEdgeDensityTooltip": "Плотность рёбер: {label}", + "nodedexEdgeDensityTooltip": "Плотность связей: {label}", "nodedexEmptyAlbumDescription": "Подключитесь к сетевому устройству и обнаруживайте ноды,\nчтобы начать формировать коллекцию", "nodedexEmptyAlbumHintMove": "Перемещайтесь", "nodedexEmptyAlbumHintScan": "Сканировать устройства", @@ -3165,7 +3165,7 @@ "nodedexTimelineEncountered": "Встречен", "nodedexTimelineEncounteredAtDistance": "Встречен на расстоянии {distance}", "nodedexTimelineEncounteredSnr": "Встречен (SNR {snr}dB)", - "nodedexTimelineEventsAppearHere": "События будут появляться здесь по мере взаимодействия с этим нодой.", + "nodedexTimelineEventsAppearHere": "События будут появляться здесь по мере взаимодействия с этой нодой.", "nodedexTimelineFirst": "Первый", "nodedexTimelineHoursUnit": "{hours} ч", "nodedexTimelineJustNow": "Только что", @@ -3933,7 +3933,7 @@ "settingsRemoteAdminConfiguringTitle": "Настройка удалённой ноды", "settingsRemoteAdminConnectedDevice": "Подключённое устройство", "settingsRemoteAdminNodeCount": "{count} нод", - "settingsRemoteAdminWarning": "Для удалённого администрирования необходимо, чтобы ваш открытый ключ был добавлен в список ключей администратора целевой ноды.", + "settingsRemoteAdminWarning": "Для удалённого администрирования необходимо, чтобы ваш публичный ключ был добавлен в список ключей администратора целевой ноды.", "settingsResetLocalDataLabel": "Сбросить", "settingsResetLocalDataMessage": "Это очистит все сообщения и данные нод, что вынудит выполнить свежую синхронизацию с устройством при следующем подключении.\n\nВаши настройки, тема и параметры будут сохранены.\n\nИспользуйте это, если ноды показывают некорректный статус или сообщения отображаются неправильно.", "settingsResetLocalDataSuccess": "Локальные данные сброшены. Подключитесь повторно для синхронизации.", @@ -6632,7 +6632,7 @@ "radioConfigUsePreset": "Использовать пресет", "radioConfigUsePresetSubtitle": "Использовать пресетные настройки модема вместо пользовательских", "radioConfigBandwidth": "Полоса пропускания", - "radioConfigSpreadFactor": "Коэффициент расширения", + "radioConfigSpreadFactor": "Коэффициент распространения", "radioConfigCodingRate": "Скорость кодирования", "radioConfigFrequencySlot": "Слот частоты", "radioConfigFrequencySlotSubtitle": "Рабочая частота рассчитывается исходя из региона, пресета модема и этого значения", @@ -7327,31 +7327,31 @@ "iftttConfigSaveFailed": "Не удалось сохранить настройки IFTTT", "mqttConfigTitle": "MQTT", "mqttConfigSave": "Сохранить", - "mqttConfigDutyCycleWarning": "В вашем регионе допускается рабочий цикл {percent}%. Использование MQTT не рекомендуется при ограничении рабочего цикла — дополнительный трафик быстро перегрузит вашу LoRa сеть.", + "mqttConfigDutyCycleWarning": "В вашем регионе допускается рабочий цикл {percent}%. Использование MQTT с ретрансляцией по радио не рекомендуется при ограничении рабочего цикла — дополнительный трафик быстро перегрузит вашу сеть LoRa.", "mqttConfigEnable": "Включить MQTT", - "mqttConfigEnableSubtitle": "Подключить устройство к MQTT-брокеру для расширения сети", - "mqttConfigNoWifiAdvisory": "Это устройство не имеет оборудования WiFi. Включите прокси MQTT-клиента ниже, чтобы приложение могло передавать сообщения от имени устройства.", + "mqttConfigEnableSubtitle": "Подключить ноду к серверу для отправки и получения данных через интернет", + "mqttConfigNoWifiAdvisory": "Это устройство не имеет оборудования WiFi. Включите прокси клиента ниже, чтобы приложение могло передавать сообщения от имени устройства.", "mqttConfigNoWifiTitle": "Нет оборудования WiFi", - "mqttConfigNoWifiMsg": "Это устройство не имеет оборудования WiFi. Без прокси MQTT-клиента устройство не может самостоятельно подключиться к MQTT-брокеру.\n\nВсё равно сохранить без прокси?", + "mqttConfigNoWifiMsg": "Это устройство не имеет оборудования WiFi. Без прокси клиента устройство не может самостоятельно подключиться к MQTT-серверу.\n\nВсё равно сохранить без прокси?", "mqttConfigSaveAnyway": "Всё равно сохранить", "mqttConfigSectionServer": "СЕРВЕР", "mqttConfigSectionAuth": "АУТЕНТИФИКАЦИЯ", "mqttConfigSectionOptions": "ПАРАМЕТРЫ", "mqttConfigServerAddressLabel": "Адрес сервера", "mqttConfigServerAddressHint": "mqtt.meshtastic.org", - "mqttConfigTopicRootLabel": "Корень топика", + "mqttConfigTopicRootLabel": "Корневая тема", "mqttConfigTopicRootHint": "msh", "mqttConfigUseTls": "Использовать TLS", - "mqttConfigUseTlsSubtitle": "Шифровать подключение к брокеру", + "mqttConfigUseTlsSubtitle": "Шифровать подключение к MQTT", "mqttConfigUsernameLabel": "Имя пользователя", "mqttConfigOptionalHint": "Необязательно", "mqttConfigPasswordLabel": "Пароль", "mqttConfigEncryption": "Шифрование", - "mqttConfigEncryptionSubtitle": "Шифровать сообщения сети через MQTT", - "mqttConfigJsonOutput": "JSON вывод", - "mqttConfigJsonOutputSubtitle": "Публиковать сообщения в формате JSON", - "mqttConfigClientProxy": "Прокси MQTT-клиента", - "mqttConfigClientProxySubtitle": "Использовать сеть телефона для MQTT\n(Необходимо для устройств без WiFi)", + "mqttConfigEncryptionSubtitle": "Шифровать сообщения, отправляемые по MQTT", + "mqttConfigJsonOutput": "Вывод JSON", + "mqttConfigJsonOutputSubtitle": "Публиковать сообщения в формате JSON (без шифрования)", + "mqttConfigClientProxy": "Прокси клиента", + "mqttConfigClientProxySubtitle": "Использовать интернет с телефона для MQTT\n(Необходимо для устройств без WiFi)", "mqttConfigMapReporting": "Отчёт на карте", "mqttConfigMapReportingSubtitle": "Передавать местоположение на публичную карту сети", "mqttConfigMapReportSettingsHeader": "НАСТРОЙКИ ОТЧЁТА НА КАРТЕ", @@ -7364,7 +7364,7 @@ "mqttConfigPrecisionWithin1_5km": "В пределах 1,5 км", "mqttConfigPrecisionWithin700m": "В пределах 700 м", "mqttConfigPrecisionUnknown": "Неизвестно", - "mqttConfigInfoText": "MQTT позволяет устройству связать локальную радиосеть с интернетом. Это обеспечивает связь с нодами, находящимися вне зоны прямого радиоприёма.", + "mqttConfigInfoText": "MQTT позволяет устройству выгружать свои данные на публичные карты в интернете, а также обмениваться данными через интернет. Можно обеспечить связь с нодами, находящимися вне зоны прямого радиоприёма.", "mqttConfigSaved": "Конфигурация MQTT сохранена", "mqttConfigSaveFailed": "Не удалось сохранить: {error}", "securityConfigTitle": "Безопасность", @@ -7373,26 +7373,26 @@ "securityConfigSectionAdminKeys": "КЛЮЧИ АДМИНИСТРАТОРА", "securityConfigSectionDeviceMgmt": "УПРАВЛЕНИЕ УСТРОЙСТВОМ", "securityConfigSectionAccessControls": "КОНТРОЛЬ ДОСТУПА", - "securityConfigPublicKey": "Открытый ключ", + "securityConfigPublicKey": "Публичный ключ", "securityConfigNoKeySet": "Ключ не задан", - "securityConfigPublicKeyDesc": "Ваш открытый ключ отправляется другим нодам для защищённого обмена сообщениями", + "securityConfigPublicKeyDesc": "Ваш публичный ключ отправляется другим нодам для защищённого обмена сообщениями", "securityConfigPrivateKey": "Приватный ключ", "securityConfigPrivateKeyHint": "32-байтовый ключ в кодировке Base64", "securityConfigPrivateKeyDesc": "Используется для вычисления общего секрета с удалёнными устройствами", "securityConfigRegenKeyPair": "Обновить пару ключей", "securityConfigGenerating": "Генерация...", "securityConfigGenerate": "Сгенерировать", - "securityConfigRegenDesc": "Создать новую пару ключей (открытый ключ будет получен автоматически)", + "securityConfigRegenDesc": "Создать новую пару ключей (публичный ключ будет получен автоматически)", "securityConfigKeyBackup": "Резервная копия ключа", "securityConfigBackupDesc": "Создайте резервную копию приватного ключа в защищённом хранилище для восстановления. Ключи хранятся в связке ключей устройства с включённой синхронизацией iCloud.", "securityConfigBackupBtn": "Создать копию", "securityConfigRestoreBtn": "Восстановить", "securityConfigDeleteBackupTooltip": "Удалить резервную копию", - "securityConfigAdminKeysDesc": "Открытые ключи, уполномоченные отправлять административные сообщения этой ноде", + "securityConfigAdminKeysDesc": "Публичные ключи, которым разрешено администрировать эту ноду удаленно", "securityConfigPrimaryAdminKey": "Основной ключ администратора", "securityConfigSecondaryAdminKey": "Дополнительный ключ администратора", "securityConfigTertiaryAdminKey": "Третий ключ администратора", - "securityConfigAdminKeyHint": "Открытый ключ в кодировке Base64", + "securityConfigAdminKeyHint": "Публичный ключ в кодировке Base64", "securityConfigManagedMode": "Управляемый режим", "securityConfigManagedModeSubtitle": "Устройство управляется внешней системой", "securityConfigSerialConsole": "Последовательная консоль", @@ -7773,7 +7773,7 @@ "globalLayerCopyReportTooltip": "Копировать отчёт", "globalLayerCheckResultsHeader": "Результаты проверки", "globalLayerConnectionDiagnosticsTitle": "Диагностика подключения", - "globalLayerConnectionDiagnosticsDescription": "Выполнить серию проверок для верификации подключения к брокеру. Каждый шаг тестирует отдельный уровень стека подключения.", + "globalLayerConnectionDiagnosticsDescription": "Выполнить серию проверок для верификации подключения к MQTT-серверу. Каждый шаг тестирует отдельный уровень стека подключения.", "globalLayerRunningChecksProgress": "Выполняются проверки... {passed}/{total}", "globalLayerRunAgain": "Запустить снова", "globalLayerStartDiagnostics": "Начать диагностику", @@ -7789,17 +7789,17 @@ "globalLayerChecking": "Проверка...", "globalLayerSkippedBecauseFailed": "Пропущено, так как {checkName} не прошла.", "globalLayerFixCheckFirst": "Сначала исправьте {checkName}, затем повторно запустите диагностику.", - "globalLayerNoHostnameConfigured": "Имя хоста не настроено.", - "globalLayerEnterBrokerHostname": "Введите имя хоста брокера в мастере настройки.", - "globalLayerHostnameResolved": "Имя хоста «{host}» успешно разрешено.", + "globalLayerNoHostnameConfigured": "Адрес сервера не настроен.", + "globalLayerEnterBrokerHostname": "Введите адрес сервера MQTT в мастере настройки.", + "globalLayerHostnameResolved": "Адрес сервера «{host}» успешно разрешен.", "globalLayerTcpConnectionEstablished": "TCP-соединение с {host}:{port} установлено.", - "globalLayerTlsHandshakeCompleted": "TLS-рукопожатие успешно завершено.", + "globalLayerTlsHandshakeCompleted": "TLS handshake успешно завершен.", "globalLayerAuthenticatedAs": "Выполнен вход как «{username}».", - "globalLayerAnonymousConnection": "Анонимное подключение принято брокером.", + "globalLayerAnonymousConnection": "Анонимное подключение принято сервером.", "globalLayerSubscribedToTopics": "Выполнена подписка на {count} тем успешно.", "globalLayerSubscribeCapabilityVerified": "Возможность подписки подтверждена (темы не включены).", "globalLayerPublishTestPassed": "Тестовое сообщение опубликовано и получено в режиме обратной петли.", - "globalLayerFailedToLoadConfig": "Не удалось загрузить конфигурацию Глобального слоя", + "globalLayerFailedToLoadConfig": "Не удалось загрузить конфигурацию MQTT", "globalLayerRetry": "Повторить", "globalLayerCopyDiagnosticsTooltip": "Копировать диагностику", "globalLayerTopicExplorerTitle": "Обозреватель тем", @@ -7807,11 +7807,11 @@ "globalLayerReconfigureMenuItem": "Перенастроить", "globalLayerReset": "Сбросить", "globalLayerRecentActivityHeader": "Последняя активность", - "globalLayerPausedSnackbar": "Глобальный слой приостановлен", - "globalLayerResumedSnackbar": "Глобальный слой возобновлён", + "globalLayerPausedSnackbar": "Обмен по MQTT приостановлен", + "globalLayerResumedSnackbar": "Обмен по MQTT возобновлён", "globalLayerDiagnosticsCopiedSnackbar": "Диагностика скопирована в буфер обмена", - "globalLayerResetTitle": "Сбросить Глобальный слой", - "globalLayerResetMessage": "Это очистит всю конфигурацию брокера, учётные данные и историю подключений. Вам потребуется повторно запустить мастер настройки.", + "globalLayerResetTitle": "Сбросить настройки MQTT", + "globalLayerResetMessage": "Это очистит всю конфигурацию MQTT-сервера, учётные данные и историю подключений. Вам потребуется повторно запустить мастер настройки.", "globalLayerQuickActionsHeader": "Быстрые действия", "globalLayerDisconnectAction": "Отключиться", "globalLayerConnectAction": "Подключиться", @@ -7819,13 +7819,13 @@ "globalLayerResumeAction": "Возобновить", "globalLayerDiagnoseAction": "Диагностировать", "globalLayerTopicsAction": "Темы", - "globalLayerBrokerHeader": "Брокер", - "globalLayerHostLabel": "Хост", + "globalLayerBrokerHeader": "MQTT-сервер", + "globalLayerHostLabel": "Адрес", "globalLayerPortLabel": "Порт", "globalLayerTlsLabel": "TLS", - "globalLayerTlsEnabled": "Включён", - "globalLayerTlsDisabled": "Отключён", - "globalLayerUserLabel": "Пользователь", + "globalLayerTlsEnabled": "Включено", + "globalLayerTlsDisabled": "Отключено", + "globalLayerUserLabel": "Имя пользователя", "globalLayerLastConnectedLabel": "Последнее подключение", "globalLayerTopicsLabel": "Темы", "globalLayerActiveTopicsCount": "{count} активных", @@ -7849,11 +7849,11 @@ "globalLayerPrivacyHeader": "Конфиденциальность", "globalLayerPrivacyAllOff": "Всё выключено", "globalLayerShareMessagesLabel": "Поделиться сообщениями", - "globalLayerShareMessagesDescription": "Пересылать локальные сообщения на брокер", + "globalLayerShareMessagesDescription": "Пересылать локальные сообщения на сервер", "globalLayerShareTelemetryLabel": "Поделиться телеметрией", "globalLayerShareTelemetryDescription": "Публиковать данные о состоянии устройства", - "globalLayerAcceptInboundLabel": "Принимать входящие", - "globalLayerAcceptInboundDescription": "Получать сообщения от брокера", + "globalLayerAcceptInboundLabel": "Получать данные", + "globalLayerAcceptInboundDescription": "Получать сообщения и данные от сервера", "globalLayerStatusOn": "ВКЛ", "globalLayerStatusOff": "ВЫКЛ", "globalLayerAddFromTemplate": "Добавить из шаблона", @@ -7867,7 +7867,7 @@ "globalLayerUndo": "Отменить", "globalLayerFailedToLoadTopics": "Не удалось загрузить темы: {error}", "globalLayerNoTopicSubscriptions": "Нет подписок на темы", - "globalLayerEmptyTopicsDescription": "Добавьте темы, чтобы управлять тем, какие типы данных сети проходят через Глобальный слой.", + "globalLayerEmptyTopicsDescription": "Добавьте темы, чтобы управлять типами данных сети, проходящих через MQTT.", "globalLayerFromTemplateButton": "Из шаблона", "globalLayerCustomButton": "Пользовательская", "globalLayerTopicPaused": "Приостановлена", @@ -7877,7 +7877,7 @@ "globalLayerStatsActive": "Активные", "globalLayerStatsMessages": "Сообщения", "globalLayerStatsRate": "Скорость", - "globalLayerAddCustomTopicDescription": "Подписаться на пользовательскую тему MQTT. Для тем подписки разрешены символы подстановки (+, #).", + "globalLayerAddCustomTopicDescription": "Подписаться на пользовательскую тему MQTT. Разрешены символы подстановки: + и #", "globalLayerLabelFieldLabel": "Метка", "globalLayerLabelFieldHint": "например, Отчёты о погоде", "globalLayerMqttTopicFieldLabel": "Тема MQTT", @@ -7961,26 +7961,26 @@ "globalLayerAuth": "Аутентификация", "globalLayerAuthentication": "АУТЕНТИФИКАЦИЯ", "globalLayerBack": "Назад", - "globalLayerBrokerAddress": "Адрес брокера", + "globalLayerBrokerAddress": "Адрес сервера", "globalLayerClientId": "ID клиента", "globalLayerClientIdHint": "Генерируется автоматически, если не указан", "globalLayerConnection": "ПОДКЛЮЧЕНИЕ", "globalLayerContinue": "Продолжить", "globalLayerCustomiseConnection": "Настроить параметры подключения", "globalLayerDataTypes": "ТИПЫ ДАННЫХ", - "globalLayerEnable": "Включить Глобальный слой", - "globalLayerMqttNote": "Под капотом используется брокер MQTT. Вам не нужно знать, как работает MQTT, чтобы использовать Глобальный слой.", + "globalLayerEnable": "Включить MQTT", + "globalLayerMqttNote": "Используется для обмена данными с сервером MQTT.", "globalLayerNext": "Далее", "globalLayerOptional": "Необязательно", "globalLayerPassword": "Пароль", "globalLayerPort": "Порт", "globalLayerPreConfiguredAuth": "Предварительно настроено (публичные учётные данные)", "globalLayerServer": "Сервер", - "globalLayerSetupTitle": "Настройка Глобального слоя", + "globalLayerSetupTitle": "Настройка MQTT", "globalLayerStepOf": "Шаг {current} из {total}", - "globalLayerTopicRoot": "КОРЕНЬ ТЕМЫ", - "globalLayerTopicRootDescription": "Корневой префикс для всех тем. Измените его, чтобы отделить трафик вашей сети.", - "globalLayerTopicRootLabel": "Корень темы", + "globalLayerTopicRoot": "КОРНЕВАЯ ТЕМА", + "globalLayerTopicRootDescription": "Префикс для всех тем. Измените его, если необходимо отделить трафик вашей сети.", + "globalLayerTopicRootLabel": "Корневая тема", "globalLayerUsername": "Имя пользователя", "globalLayerWhatItDoes": "Что это делает", "globalLayerWhatItDoesNot": "Чего это НЕ делает", @@ -7990,7 +7990,7 @@ "mapControlsResetNorth": "Сброс севера", "mapNodeDrawerClosePanel": "Закрыть панель", "nodeSelectorSearchHint": "Поиск нод...", - "portalViewBroker": "Брокер", + "portalViewBroker": "MQTT-сервер", "portalViewLocalMesh": "Локальная сеть", "portalViewRemote": "Удалённый", "positionConfigAltitudeHint": "например, 100", @@ -8014,16 +8014,16 @@ "widgetWizardAdd": "Добавить", "dashboardRequestPositions": "Запросить\nположения", "adminPostsDeleteAllCount": "Удалить все ({count})", - "globalLayerAllowInboundChat": "Разрешить входящий глобальный чат", - "globalLayerDiagBrokerEmpty": "Адрес брокера пуст.", + "globalLayerAllowInboundChat": "Разрешить получение сообщений", + "globalLayerDiagBrokerEmpty": "Адрес сервера не заполнен.", "globalLayerDiagUnexpectedError": "Неожиданная ошибка: {error}", - "globalLayerDiagUsernameNoPassword": "Указано имя пользователя, но пароль пуст.", - "globalLayerShareMessages": "Делиться сообщениями через Глобальный слой", + "globalLayerDiagUsernameNoPassword": "Указано имя пользователя, но пароль не заполнен.", + "globalLayerShareMessages": "Делиться сообщениями", "globalLayerShareTelemetry": "Делиться телеметрией", "aetherInFlight": "В полёте", "aetherLiveFlightData": "Данные рейса в реальном времени", "aetherOnGround": "На земле", - "globalLayerNodesSeenVia": "{count} нод обнаружено через Глобальный слой", + "globalLayerNodesSeenVia": "{count} нод обнаружено через MQTT", "helpChannelCreationTitle": "Создание канала", "helpChannelCreationDescription": "Узнайте, как создавать и настраивать mesh-каналы", "helpEncryptionLevelsTitle": "Шифрование канала", @@ -8248,9 +8248,9 @@ "helpPresenceRecentBubble": "**Недавно видимые** ноды (жёлтые) были активны 2–10 минут назад. Скорее всего, ещё в зоне досягаемости!", "helpPresenceInactiveBubble": "**Неактивные** ноды (серые) не выходили на связь более 10 минут. Возможно, они выключены, вышли из зоны или разрядились!", "helpPresenceChartBubble": "**График активности** показывает недавнюю активность нод по времени. Наблюдайте, как ваша сеть оживает в течение дня!", - "helpReachabilityIntroBubble": "**Достижимость** оценивает вероятность связи с каждым нодой на основе истории наблюдений сигнала!", + "helpReachabilityIntroBubble": "**Достижимость** оценивает вероятность связи с каждой нодой на основе истории наблюдений сигнала!", "helpReachabilityBetaBubble": "Это **БЕТА-версия** — тестовые пакеты не отправляются! Всё вычисляется на основе истории наблюдений сигнала.", - "helpReachabilityHighBubble": "**Высокая** достижимость (яркая) означает, что мы наблюдали много коммуникации с этим нодой. Скорее всего, он доступен!", + "helpReachabilityHighBubble": "**Высокая** достижимость (яркая) означает, что мы наблюдали много коммуникации с этой нодой. Скорее всего, он доступен!", "helpReachabilityMediumBubble": "**Средняя** достижимость (менее яркая) означает частичную связь. Возможно, он в зоне досягаемости, но нестабильно!", "helpReachabilityLowBubble": "**Низкая** достижимость (очень тусклая) означает редкую связь. Нода может быть на краю зоны или временно недоступна!", "helpHealthIntroBubble": "**Состояние сети** отслеживает проблемы: перегрузка, потеря пакетов и нестабильные ноды могут влиять на вашу сеть!", @@ -8279,7 +8279,7 @@ "helpNodedexSigilBubble": "Это **Символ** ноды — уникальный процедурный глиф, сгенерированный из его идентификатора. Он не меняется и однозначно идентифицирует нода.", "helpNodedexTraitBubble": "**Черта** — это выведенная личность на основе поведения данной ноды: движение, частота появления, уровень сигнала и режимы активности.", "helpNodedexAutoSummaryBubble": "**Автосводка** вычисляет инсайты из истории встреч — распределение по времени суток, динамику появлений и качество сигнала.", - "helpNodedexObservationTimelineBubble": "**Временная шкала наблюдений** визуализирует плотность встреч с этим нодой с течением времени. Отражает, когда и как часто вы видели эту ноду.", + "helpNodedexObservationTimelineBubble": "**Временная шкала наблюдений** визуализирует плотность встреч с этой нодой с течением времени. Отражает, когда и как часто вы видели эту ноду.", "helpNodedexDiscoveryBubble": "**Статистика обнаружения** показывает, когда вы впервые и последний раз видели эту ноду, количество встреч и общий охват активности.", "helpNodedexSignalBubble": "**Записи сигнала** отслеживают лучшие и последние значения SNR и RSSI. Это помогает понять качество соединения с данным нодой.", "helpNodedexSocialTagBubble": "**Социальный тег** — это метка, которую вы назначаете для категоризации ноды: друг, ретранслятор, инфраструктура и т.д.", @@ -8287,7 +8287,7 @@ "helpNodedexRegionsBubble": "**История регионов** записывает каждый регулятивный регион, в котором наблюдался эта нода. Видно, путешествует ли он!", "helpNodedexEncountersBubble": "**Последние встречи** — история появлений этой ноды в вашей сети. Каждая запись включает время, SNR и контекст.", "helpNodedexActivityTimelineBubble": "**Лента активности** — единая хронологическая лента всего наблюдаемого об этом ноде: встречи, изменения, телеметрия и сигналы.", - "helpNodedexCoseenBubble": "**Совместно наблюдаемые** — ноды, часто замечаемые в одной сессии с данным нодой. Помогает понять топологию и кластеры сети.", + "helpNodedexCoseenBubble": "**Совместно наблюдаемые** — ноды, часто замечаемые в одной сессии с этой нодой. Помогает понять топологию и кластеры сети.", "helpNodedexDeviceBubble": "**Информация об устройстве** показывает актуальную телеметрию — уровень заряда, модель оборудования, версию прошивки и время работы.", "helpAlbumIntroBubble": "Добро пожаловать в **Альбом коллекционера** — вид вашего NodeDex в формате карточек! Каждая нода становится уникальной коллекционной карточкой!", "helpAlbumCoverBubble": "**Обложка альбома** — ваша панель: там показан ваш **Титул исследователя**, общее количество карточек и краткое описание коллекции.", @@ -8300,7 +8300,7 @@ "helpConstellationIntroBubble": "Добро пожаловать в **Созвездие** — звёздную карту вашей mesh-сети! Ноды выглядят как звёзды, а связи — как линии созвездий!", "helpConstellationLayoutBubble": "Расположение **управляется силами** — ноды, которые часто встречаются вместе, группируются. Изолированные ноды дрейфуют на периферию!", "helpConstellationInteractionsBubble": "**Нажмите** на ноду, чтобы выделить его связи. **Двойное нажатие** для приближения к кластеру. **Щипок для масштабирования** панорамирует вид!", - "helpConstellationEdgesBubble": "Используйте кнопку **плотности рёбер** в панели приложения, чтобы управлять количеством отображаемых связей. Меньше шума — чётче структура!", + "helpConstellationEdgesBubble": "Используйте кнопку **плотности связей** в панели приложения, чтобы управлять количеством отображаемых связей. Меньше шума — чётче структура!", "helpConstellationSearchBubble": "Значок **поиска** позволяет найти конкретную ноду по имени или hex-идентификатору. Вид автоматически центрируется на нём!", "helpConstellationAtmosphereBubble": "Созвездие имеет собственную **Стихийную Атмосферу** — тонкий звёздный свет и туманности, отражающие характер вашей коллекции!", "helpConstellationDataBubble": "Данные о совместных наблюдениях формируются **автоматически** из ваших встреч. Чем больше сессий, тем богаче созвездие!", @@ -8315,7 +8315,7 @@ "helpAetherActiveBubble": "**Активные рейсы** показывают актуальные данные о местоположении из API OpenSky Network. Вы увидите свою позицию на карте в реальном времени!", "helpAetherReportsBubble": "**Отчёты о приёме** позволяют наземным станциям сообщать, когда они принимают ваш сигнал. Создавайте карты покрытия на большой высоте!", "helpAetherLeaderboardBubble": "**Таблица лидеров глобальная и постоянная** — хранится в облаке, а не на вашем устройстве. Ваши рекорды сохраняются при смене телефона!", - "helpAetherTipsBubble": "**Советы**: Иллюминаторное место помогает. Ненадолго отключите авиарежим в крейсерском полёте. Используйте антенну с круговой поляризацией для лучших результатов!", + "helpAetherTipsBubble": "**Советы**: Лучше садиться у окна. Ненадолго отключите авиарежим в крейсерском полёте. Используйте антенну с круговой поляризацией для лучших результатов!", "helpTakIntroBubble": "**TAK Gateway** интегрирует вашу mesh-сеть в экосистему Team Awareness Kit (TAK). Импортируйте CoT-объекты с TAK-серверов!", "helpTakConnectBubble": "Нажмите на **значок ссылки** в панели приложения для подключения или отключения. Карточка статуса показывает текущее состояние соединения.", "helpTakAffiliationsBubble": "Каждый объект окрашен по **стандартной принадлежности** — синий для дружественных, красный для враждебных, жёлтый для неизвестных, зелёный для нейтральных.", @@ -8344,11 +8344,11 @@ "helpFtBetaBubble": "Эта функция находится в стадии **БЕТА**. Оба ноды должны работать на Socialmesh в одной и той же mesh-сети.", "helpFtContactsBubble": "Используйте вкладку **Контакты**, чтобы выбрать ноду, затем нажмите **Отправить файл**. Вкладка «Контакты» показывает, кто сейчас в сети.", "helpFtlSharedBubble": "Каналы LoRa **общие и медленные**. Каждый байт, который вы отправляете, — это эфирное время, которое используется совместно с другими. Отправляйте только необходимое!", - "helpFtlToaBubble": "**Время в эфире** на фрагмент зависит от коэффициента расширения (SF). SF7 (быстро, малая дальность): ~30 мс/фрагмент. SF12 (медленно, большая дальность): ~1,5 с/фрагмент!", + "helpFtlToaBubble": "**Время в эфире** на фрагмент зависит от коэффициента распространения (SF). SF7 (быстро, малая дальность): ~30 мс/фрагмент. SF12 (медленно, большая дальность): ~1,5 с/фрагмент!", "helpFtlMathBubble": "8 КБ ÷ 200 байт/фрагмент = **41 фрагмент**. При SF7: ~1,2 с всего. При SF12: **~61 с** — и это только эфирное время, без учёта повторных передач!", - "helpFtlDutyBubble": "Диапазоны EU868 и аналогичные имеют **1% дюти-цикл** — радио может передавать только 1% времени. Файл на 8 КБ при SF12 может занять **несколько часов**!", - "helpFtlCapBubble": "8 КБ — это **самый безопасный максимум**, при котором передача остаётся выполнимой даже при наихудшем коэффициенте расширения.", - "helpFtlUsbBubble": "Передачи через BLE и USB не имеют ограничений радиодюти-цикла. В будущих версиях этот лимит может быть снят для таких подключений.", + "helpFtlDutyBubble": "Диапазоны EU868 и аналогичные имеют **1% рабочий цикл** — радио может передавать только 1% времени. Файл на 8 КБ при SF12 может занять **несколько часов**!", + "helpFtlCapBubble": "8 КБ — это **самый безопасный максимум**, при котором передача остаётся выполнимой даже при наихудшем коэффициенте распространения.", + "helpFtlUsbBubble": "Передачи через BLE и USB не имеют ограничений рабочего цикла. В будущих версиях этот лимит может быть снят для таких подключений.", "helpNodeDexSectionSigil": "Уникальный процедурный глиф, сгенерированный из идентификатора данной ноды.", "helpNodeDexSectionTrait": "Выведенный архетип личности на основе поведенческих сигналов:", "helpNodeDexSectionAutoSummary": "Вычисленные инсайты из истории встреч данной ноды. Распределение по времени суток", @@ -8360,7 +8360,7 @@ "helpNodeDexSectionRegions": "Все регулятивные регионы, в которых наблюдался данная нода. Регион", "helpNodeDexSectionEncounters": "Хронологическая лента появлений данной ноды в вашей сети.", "helpNodeDexSectionActivityTimeline": "Единая хронологическая лента всего наблюдаемого об этом ноде:", - "helpNodeDexSectionCoseen": "Ноды, которые часто наблюдаются в одной сессии с данным нодой.", + "helpNodeDexSectionCoseen": "Ноды, которые часто наблюдаются в одной сессии с этой нодой.", "helpNodeDexSectionDevice": "Актуальная телеметрия с ноды: процент заряда батареи, модель оборудования,", "helpNodeDexSectionAlbumRarity": "Уровни редкости вычисляются на основе количества встреч и выведенной черты.", "helpNodeDexSectionAlbumGrouping": "Карточки можно группировать по Черте (поведенческий архетип), Редкости", @@ -8407,7 +8407,7 @@ "whatsNewNodeDexDescription": "Живой полевой журнал мира радиосетей. Каждый обнаруженная нода автоматически записывается с уникальным процедурным Sigil и чертой характера, полученной из реального поведения.\\n\\nНайдите в меню под разделом «Социальное». Фильтруйте по чертам, ищите по имени или шестнадцатеричному ID, нажимайте на запись для изучения полного профиля — история сигнала, хронология обнаружения и многое другое.", "whatsNewVersion1150Subtitle": "Версия 1.15.0", "whatsNewAetherTitle": "Aether", - "whatsNewAetherDescription": "Отслеживайте ноды Meshtastic на высоте! Запланируйте полёт с вашим нодой и позвольте наземным станциям по всему миру прослушивать ваш сигнал.\\n\\nНа высоте 35 000 футов LoRa может достигать 400+ км. Сообщайте о приёмах, соревнуйтесь в таблице лидеров по дальности и устанавливайте новые рекорды. Найдите в меню под разделом «Социальное».", + "whatsNewAetherDescription": "Отслеживайте ноды Meshtastic на высоте! Запланируйте полёт с вашей нодой и позвольте наземным станциям по всему миру прослушивать ваш сигнал.\\n\\nНа высоте 35 000 футов LoRa может достигать 400+ км. Сообщайте о приёмах, соревнуйтесь в таблице лидеров по дальности и устанавливайте новые рекорды. Найдите в меню под разделом «Социальное».", "whatsNewVersion1160Subtitle": "Версия 1.16.0", "whatsNewTakGatewayTitle": "TAK Шлюз", "whatsNewTakGatewayDescription": "Подключите вашу сеть к экосистеме Team Awareness Kit (TAK). Socialmesh теперь подключается к TAK Gateway через WebSocket и передаёт живые объекты Cursor-on-Target на вашу карту.\\n\\nКаждый объект раскрашен по стандартной принадлежности и снабжён иконкой соответствующего типа. Фильтруйте по принадлежности, ищите позывные, отслеживайте объекты долгим нажатием и нажимайте на маркер для просмотра полных данных CoT. Найдите в меню под разделом «Сеть».", @@ -8455,8 +8455,8 @@ "flowNodeOr": "ИЛИ", "flowNodeNot": "НЕ", "flowNodeDelay": "Задержка", - "flowNodeAllMet": "Все выполнены", - "flowNodeAnyMet": "Любое выполнено", + "flowNodeAllMet": "Все условия", + "flowNodeAnyMet": "Любое условие", "flowNodeInverted": "Инвертировано", "flowNodeDelayed": "Отложено", "automationTemplateLowBatteryTitle": "Оповещение о низком заряде", @@ -8549,21 +8549,21 @@ "onboardingSignalContentSarah": "Только что достигла вершины! Сигнал кристально чистый.", "onboardingSignalAuthorMike": "Mike", "onboardingSignalAuthorAlex": "Alex", - "globalLayerCopyExplainTitle": "Что такое Глобальный слой?", - "globalLayerCopyExplainBody": "Ваше сетевое радио соединяет близлежащие устройства по радиоволнам — без интернета. Глобальный слой расширяет этот охват, соединяя вашу локальную сеть с сервером через интернет.", - "globalLayerCopyExplainWhatItDoes": "Соединяет вашу локальную сеть с удалёнными сетями через интернет-сервер.", - "globalLayerCopyExplainWhatItDoesNot": "НЕ заменяет ваше радио. Локальная сеть работает независимо.", - "globalLayerCopyBrokerTitle": "Выберите брокер", - "globalLayerCopyBrokerBody": "Выберите брокер для подключения. Большинству пользователей следует начать с официального сервера Meshtastic.", + "globalLayerCopyExplainTitle": "Что такое MQTT?", + "globalLayerCopyExplainBody": "Ваш радио-модуль связывается с ближайшими устройствами по радио — без интернета. MQTT позволяет передавать ваши даные на общедоступные карты, а также связываться с другими нодами через интернет.", + "globalLayerCopyExplainWhatItDoes": "Передает ваши сообщения и другие данные через интернет.", + "globalLayerCopyExplainWhatItDoesNot": "НЕ заменяет ваше радио - оно работает независимо.", + "globalLayerCopyBrokerTitle": "Выберите сервер", + "globalLayerCopyBrokerBody": "Выберите MQTT-сервер для подключения. Большинству пользователей можно начать с официального сервера Meshtastic.", "globalLayerCopyTopicsTitle": "Выберите, чем делиться", - "globalLayerCopyTopicsBody": "Темы определяют, какие типы данных проходят через Глобальный слой.", + "globalLayerCopyTopicsBody": "Темы определяют, какие типы данных проходят через MQTT.", "globalLayerCopyPrivacyTitle": "Конфиденциальность и безопасность", - "globalLayerCopyPrivacyBody": "Глобальный слой работает только по вашему желанию. Ничего не передаётся до тех пор, пока вы явно не включите это.", - "globalLayerCopyPrivacyBrokerTrustWarning": "Ваш брокер видит все данные, которые вы через него отправляете. Подключайтесь только к брокерам, которым доверяете.", + "globalLayerCopyPrivacyBody": "Обмен через MQTT работает только по вашему желанию. Ничего не передаётся до тех пор, пока вы явно не включите это.", + "globalLayerCopyPrivacyBrokerTrustWarning": "MQTT-сервер видит все данные, которые вы через него отправляете. Подключайтесь только к тем серверам, которым доверяете.", "globalLayerCopyTestTitle": "Тест подключения", - "globalLayerCopyTestBody": "Проверяется доступность брокера и корректность настроек.", + "globalLayerCopyTestBody": "Проверяется доступность сервера и корректность настроек.", "globalLayerCopySummaryTitle": "Готово к подключению", - "globalLayerCopySummaryBody": "Просмотрите настройки Глобального слоя ниже. Вы можете изменить любую из них позже.", + "globalLayerCopySummaryBody": "Просмотрите настройки MQTT ниже. Вы можете изменить любую из них позже.", "mqttTopicChatLabel": "Чат", "mqttTopicChatDescription": "Текстовые сообщения, которыми обмениваются ноды сети по определённому каналу.", "mqttTopicTelemetryLabel": "Телеметрия", @@ -8571,73 +8571,73 @@ "mqttTopicPositionLabel": "Местоположение", "mqttTopicPositionDescription": "GPS-координаты, передаваемые нодами сети (конфиденциальные данные).", "mqttTopicNodeInfoLabel": "Информация о ноде", - "mqttTopicNodeInfoDescription": "Широковещательные сведения о ноде: длинное имя, короткое имя, модель оборудования.", + "mqttTopicNodeInfoDescription": "Общие сведения о ноде: длинное имя, короткое имя, модель оборудования.", "mqttTopicMapReportsLabel": "Отчёты карты", - "mqttTopicMapReportsDescription": "Периодические отчёты о местоположении для общедоступных сервисов карты сети.", + "mqttTopicMapReportsDescription": "Периодические отчёты о местоположении для общедоступных карт в интернете.", "mqttBrokerMeshtasticName": "Meshtastic (официальный)", - "mqttBrokerMeshtasticDescription": "Стандартный MQTT-сервер Meshtastic. Подключает вас к всемирной сети Meshtastic. Учётная запись не требуется.", + "mqttBrokerMeshtasticDescription": "Стандартный MQTT-сервер Meshtastic. Подключает вас к общемировой сети. Учётная запись не требуется.", "mqttBrokerMeshtasticNote": "Публичные учётные данные используются всеми пользователями Meshtastic.", "mqttBrokerMosquittoName": "Mosquitto Test", - "mqttBrokerMosquittoDescription": "Бесплатный публичный тестовый брокер от проекта Eclipse Mosquitto. Хорош для проверки настроек перед подключением к рабочему брокеру.", - "mqttBrokerMosquittoNote": "Тестовый брокер — не для производственного использования. Возможны перебои.", - "mqttBrokerCustomName": "Пользовательский брокер", - "mqttBrokerCustomDescription": "Введите данные своего брокера вручную.", + "mqttBrokerMosquittoDescription": "Бесплатный тестовый MQTT-сервер от проекта Eclipse Mosquitto. Для проверки настроек перед подключением к рабочему серверу.", + "mqttBrokerMosquittoNote": "Тестовый сервер — не для полноценного использования. Возможны перебои.", + "mqttBrokerCustomName": "Пользовательский MQTT-сервер", + "mqttBrokerCustomDescription": "Введите данные для подключения вручную.", "globalLayerDiagConfigTitle": "Конфигурация", - "globalLayerDiagConfigDescription": "Проверка правильности формата адреса брокера, порта и корня темы.", - "globalLayerDiagDnsTitle": "DNS-разрешение", - "globalLayerDiagDnsDescription": "Поиск имени хоста брокера для определения его сетевого адреса.", + "globalLayerDiagConfigDescription": "Проверка правильности формата адреса сервера, порта и корневой темы.", + "globalLayerDiagDnsTitle": "Разрешение DNS", + "globalLayerDiagDnsDescription": "Поиск имени сервера для определения его сетевого адреса.", "globalLayerDiagTcpTitle": "TCP-подключение", - "globalLayerDiagTcpDescription": "Установка сетевого соединения с брокером.", - "globalLayerDiagTlsTitle": "TLS-рукопожатие", - "globalLayerDiagTlsDescription": "Согласование защищённого соединения с брокером.", + "globalLayerDiagTcpDescription": "Установка сетевого соединения с сервером.", + "globalLayerDiagTlsTitle": "TLS handshake", + "globalLayerDiagTlsDescription": "Согласование защищённого соединения с сервером.", "globalLayerDiagAuthTitle": "Аутентификация", - "globalLayerDiagAuthDescription": "Проверка имени пользователя и пароля с брокером.", + "globalLayerDiagAuthDescription": "Проверка имени пользователя и пароля на сервере.", "globalLayerDiagSubscribeTitle": "Тест подписки", "globalLayerDiagSubscribeDescription": "Подписка на тестовую тему для проверки доступа на чтение.", "globalLayerDiagPublishTitle": "Тест публикации", "globalLayerDiagPublishDescription": "Публикация тестового сообщения для проверки доступа на запись.", "globalLayerDiagSuggestionCorrectFields": "Исправьте выделенные поля и повторите попытку.", - "globalLayerDiagSuggestionUnexpectedBehavior": "Эти проблемы могут не препятствовать подключению, но способны вызвать непредвиденное поведение.", + "globalLayerDiagSuggestionUnexpectedBehavior": "Эти проблемы могут не мешать подключению, но способны вызвать непредвиденное поведение.", "globalLayerDiagConfigValid": "Все поля конфигурации корректны.", - "globalLayerDiagSuggestionValidHostname": "Введите корректное имя хоста брокера.", - "globalLayerDiagSuggestionBothCredentials": "Некоторые брокеры требуют указания как имени пользователя, так и пароля.", - "globalLayerWizardDnsValid": "Имя хоста выглядит корректным: {host}", + "globalLayerDiagSuggestionValidHostname": "Введите корректный адрес сервера.", + "globalLayerDiagSuggestionBothCredentials": "Некоторые MQTT-серверы требуют указания как имени пользователя, так и пароля.", + "globalLayerWizardDnsValid": "Адрес сервера корректный: {host}", "globalLayerWizardTcpReachable": "TCP-подключение к {host}:{port} доступно.", - "globalLayerWizardTlsAccepted": "Параметры TLS-рукопожатия приняты.", + "globalLayerWizardTlsAccepted": "Параметры TLS handshake приняты.", "globalLayerWizardCredentialsAccepted": "Учётные данные предоставлены и приняты.", "globalLayerWizardAnonymousAccess": "Учётные данные не указаны — используется анонимный доступ.", "globalLayerWizardSubscribeVerified": "Права на подписку подтверждены.", "globalLayerWizardPublishVerified": "Права на публикацию подтверждены.", - "globalLayerShareMessagesSubtitle": "Ваши сообщения локального чата сети будут пересылаться на брокер.", - "globalLayerShareTelemetrySubtitle": "Уровень заряда батареи, напряжение и время работы устройства будут публиковаться на брокер.", - "globalLayerAllowInboundSubtitle": "Сообщения от других сетей будут доставляться в ваши локальные каналы.", - "globalLayerBrokerTrust": "Доверие к брокеру", + "globalLayerShareMessagesSubtitle": "Ваши сообщения будут пересылаться в интернет.", + "globalLayerShareTelemetrySubtitle": "Уровень заряда батареи, напряжение и время работы устройства будут пересылаться в интернет.", + "globalLayerAllowInboundSubtitle": "Сообщения из интернета будут доставляться в ваши локальные каналы.", + "globalLayerBrokerTrust": "Доверие к MQTT-серверу", "globalLayerRunConnectionTest": "Запустить тест подключения", "globalLayerSkipTestHint": "Вы можете пропустить этот шаг и протестировать позже.", "globalLayerWizardAllChecksPassed": "Все проверки пройдены", "globalLayerPassedWithWarnings": "Пройдено с предупреждениями", "globalLayerSomeChecksFailed": "Некоторые проверки не пройдены", "globalLayerTestInProgress": "Тест выполняется", - "globalLayerSummaryBrokerSection": "БРОКЕР", + "globalLayerSummaryBrokerSection": "СЕРВЕР", "globalLayerSummaryTopicsSection": "ТЕМЫ", "globalLayerSummaryPrivacySection": "КОНФИДЕНЦИАЛЬНОСТЬ", "globalLayerSummaryAddress": "Адрес", "globalLayerSummaryPort": "Порт", "globalLayerSummaryTls": "TLS", - "globalLayerSummaryTlsEnabled": "Включён", - "globalLayerSummaryTlsDisabled": "Отключён", + "globalLayerSummaryTlsEnabled": "Включено", + "globalLayerSummaryTlsDisabled": "Отключено", "globalLayerSummaryAuth": "Аутентификация", "globalLayerSummaryAuthCredentials": "Учётные данные настроены", "globalLayerSummaryAuthAnonymous": "Анонимно", - "globalLayerSummaryRoot": "Корень", + "globalLayerSummaryRoot": "Корневая тема", "globalLayerSummaryTopicsEnabled": "Включены", "globalLayerSummaryTopicsNone": "Нет", "globalLayerSummaryShareMessages": "Делиться сообщениями", "globalLayerSummaryShareTelemetry": "Делиться телеметрией", - "globalLayerSummaryInboundGlobal": "Входящий глобальный", + "globalLayerSummaryInboundGlobal": "Получать данные", "globalLayerSummaryOn": "ВКЛ", "globalLayerSummaryOff": "ВЫКЛ", - "globalLayerAllSharingOff": "Передача данных полностью ВЫКЛЮЧЕНА. Данные вашей сети остаются локальными.", + "globalLayerAllSharingOff": "Передача данных в интернет полностью выключена. Данные остаются локальными.", "globalLayerNoTlsLabel": "Без TLS", "tapbackPoop": "Какашка", "tapbackQuestion": "Вопрос", @@ -8663,7 +8663,7 @@ "deepLinkInvalidPostLink": "Недействительная ссылка на публикацию", "deepLinkInvalidWidgetLink": "Недействительная ссылка на виджет", "deepLinkInvalidProfileLink": "Недействительная ссылка на профиль", - "deepLinkSignInToJoinChannel": "Войдите, чтобы присоединиться к этому каналу", + "deepLinkSignInToJoinChannel": "Войдите для присоединения к этому каналу", "deepLinkInvalidInviteLink": "Недействительная или неполная ссылка-приглашение", "deepLinkInvalidChannelData": "Недействительные данные канала", "deepLinkConnectToImportChannel": "Подключите устройство для импорта этого канала",