diff --git a/assets/windows/installer.nsi b/assets/windows/installer.nsi index 43e1caf0..1198ffc9 100644 --- a/assets/windows/installer.nsi +++ b/assets/windows/installer.nsi @@ -54,6 +54,7 @@ OutFile "..\..\${DEST_FOLDER}\${FILE_NAME_INSTALLER}" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Portuguese" +!insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "Swedish" diff --git a/locales/en/messages.json b/locales/en/messages.json index 7d1be923..5a1fb045 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -105,6 +105,9 @@ "language_pt": { "message": "Portugu\u00EAs (pt)" }, + "language_ru": { + "message": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A (ru)" + }, "language_sv": { "message": "Svenska (sv)" }, diff --git a/locales/ru/messages.json b/locales/ru/messages.json new file mode 100644 index 00000000..e0e84974 --- /dev/null +++ b/locales/ru/messages.json @@ -0,0 +1,3732 @@ +{ + "error": { + "message": "Ошибка: {{errorMessage}}" + }, + "errorTitle": { + "message": "Ошибка" + }, + "warningTitle": { + "message": "Внимание!" + }, + "noticeTitle": { + "message": "Сообщение" + }, + "operationNotSupported": { + "message": "Операция не поддерживается устройством." + }, + "storageDeviceNotReady": { + "message": "Запоминающее устройство не готово. В случае использования microSD карты, убедитесь, что она правильно распознана вашим полетным контроллером." + }, + "options_title": { + "message": "Настройка приложения" + }, + "connect": { + "message": "Подключится" + }, + "connecting": { + "message": "Подключение" + }, + "disconnect": { + "message": "Отключить" + }, + "portsSelectManual": { + "message": "Выбрать вручную" + }, + "portOverrideText": { + "message": "Порт:" + }, + "autoConnect": { + "message": "Подключаться автоматически" + }, + "close": { + "message": "Закрыть" + }, + "autoConnectEnabled": { + "message": "Подключаться автоматически - конфигуратор будет подключаться при обнаружении нового порта" + }, + "autoConnectDisabled": { + "message": "Подключаться автоматически: если выключен, то вручную выбираем нужный порт и кликаем \"Подключить\"" + }, + "expertMode": { + "message": "Включить режим эксперта" + }, + "expertModeDescription": { + "message": "Показать невыпущенные и потенциально нестабильные сборки" + }, + "permanentExpertMode": { + "message": "Всегда включать режим эксперта" + }, + "rememberLastTab": { + "message": "Повторно открыть последнюю вкладку при подключении" + }, + "analyticsOptOut": { + "message": "Отказ от анонимной коллекции статистических данных" + }, + "userLanguageSelect": { + "message": "Язык (необходимо перезапустить приложение, чтобы изменения вступили в силу)" + }, + "language_default": { + "message": "По умолчанию" + }, + "sensorDataFlashNotFound": { + "message": "Отсутствует
модуль памяти", + "description": "Text of the dataflash image in the header of the page." + }, + "sensorDataFlashFreeSpace": { + "message": "Данные: доступное место", + "description": "Text of the dataflash image in the header of the page." + }, + "sensorStatusGyro": { + "message": "Гироскоп" + }, + "sensorStatusGyroShort": { + "message": "Гироскоп", + "description": "Text of the image in the top sensors icons. Please keep it short." + }, + "sensorStatusAccel": { + "message": "Акселерометр" + }, + "sensorStatusAccelShort": { + "message": "Акселерометр", + "description": "Text of the image in the top sensors icons. Please keep it short." + }, + "sensorStatusMag": { + "message": "Магнитометр" + }, + "sensorStatusMagShort": { + "message": "Компас", + "description": "Text of the image in the top sensors icons. Please keep it short." + }, + "sensorStatusBaro": { + "message": "Барометр" + }, + "sensorStatusBaroShort": { + "message": "Барометр", + "description": "Text of the image in the top sensors icons. Please keep it short." + }, + "sensorStatusGPS": { + "message": "GPS" + }, + "sensorStatusGPSShort": { + "message": "GPS", + "description": "Text of the image in the top sensors icons. Please keep it short." + }, + "sensorStatusSonar": { + "message": "Сонар\/Дальномер" + }, + "sensorStatusSonarShort": { + "message": "Сонар", + "description": "Text of the image in the top sensors icons. Please keep it short." + }, + "checkForConfiguratorUnstableVersions": { + "message": "Показывать уведомления о появлении нестабильных версий конфигуратора" + }, + "configuratorUpdateNotice": { + "message": "Вы используете устаревшую версию Betaflight конфигуратора<\/b>.
Новая версия $1<\/b> доступна для скачивания, пожалуйста, посетите страницу с релизами<\/a> для загрузки и установки самой последней версии с исправлениями и улучшениями.
Пожалуйста, закройте окно конфигуратора перед обновлением." + }, + "configuratorUpdateWebsite": { + "message": "Перейти на сайт с релизами" + }, + "deviceRebooting": { + "message": "Device - Перезагружается<\/span>" + }, + "deviceReady": { + "message": "Устройство - Готово<\/span>" + }, + "backupFileIncompatible": { + "message": "Файл резервной копии был сгенерирован для предыдущей версии и несовместимым с этой версией конфигуратора. Извините" + }, + "backupFileUnmigratable": { + "message": "Файл резервной копии был сгенерирован старой версией конфигуратора и не является мигрируемым для этой версии конфигуратора. Сожалеем." + }, + "configMigrationFrom": { + "message": "Миграция файла конфигурации была сгенерирована конфигуратором версии: $1" + }, + "configMigratedTo": { + "message": "Конфигурация мигрирована для конфигуратора версии: $1" + }, + "configMigrationSuccessful": { + "message": "Миграция конфигурации завершена, применено миграций: $1" + }, + "tabFirmwareFlasher": { + "message": "Программатор" + }, + "tabLanding": { + "message": "Приветствие" + }, + "tabHelp": { + "message": "Документация и поддержка" + }, + "tabSetup": { + "message": "Система" + }, + "tabSetupOSD": { + "message": "Установки OSD" + }, + "tabConfiguration": { + "message": "Конфигурация" + }, + "tabPorts": { + "message": "Порты" + }, + "tabPidTuning": { + "message": "PID настройки" + }, + "tabReceiver": { + "message": "Приёмник" + }, + "tabModeSelection": { + "message": "Переключение режимов" + }, + "tabServos": { + "message": "Сервоприводы" + }, + "tabFailsafe": { + "message": "Failsafe" + }, + "tabTransponder": { + "message": "Транспондер гонки" + }, + "tabOsd": { + "message": "OSD" + }, + "tabPower": { + "message": "Питание и Батарея" + }, + "tabGPS": { + "message": "GPS" + }, + "tabMotorTesting": { + "message": "Моторы" + }, + "tabLedStrip": { + "message": "LED лента" + }, + "tabRawSensorData": { + "message": "Датчики" + }, + "tabCLI": { + "message": "Командная строка" + }, + "tabLogging": { + "message": "Логирование через кабель" + }, + "tabOnboardLogging": { + "message": "Чёрный ящик" + }, + "tabAdjustments": { + "message": "Корректирование в полёте" + }, + "tabAuxiliary": { + "message": "Режимы" + }, + "logActionHide": { + "message": "Скрыть недавние действия" + }, + "logActionShow": { + "message": "Показать недавние действия" + }, + "serialPortOpened": { + "message": "Сериний порт успешно<\/span> открыт. ID порта: $1" + }, + "serialPortOpenFail": { + "message": "Не удалось<\/span> открыть сериний порт" + }, + "serialPortClosedOk": { + "message": "Сериний порт успешно<\/span> закрыт" + }, + "serialPortClosedFail": { + "message": "Не удалось<\/span> закрыть сериний порт" + }, + "serialUnrecoverable": { + "message": "Невосстановимый сбой<\/span> последовательного подключения, разъединяюсь..." + }, + "usbDeviceOpened": { + "message": "USB устройство успешно<\/span> подключено. ID подключения: $1" + }, + "usbDeviceOpenFail": { + "message": "Сбой<\/span> подключения к USB устройству!" + }, + "usbDeviceClosed": { + "message": "USB устройство успешно<\/span> отключено" + }, + "usbDeviceCloseFail": { + "message": "Сбой<\/span> при отключении USB устройства" + }, + "usbDeviceUdevNotice": { + "message": "Правильно ли установлены udev права<\/strong>? Смотрите инструкцию в документации" + }, + "stm32UsbDfuNotFound": { + "message": "USB DFU не найден" + }, + "stm32TimedOut": { + "message": "STM32 - не отвечает, процесс прошивки: СБОЙ" + }, + "stm32WrongResponse": { + "message": "STM32 Сбой связи, неправильный ответ, ожидалось: $1 (0x$2), а принято: $3 (0x$4)" + }, + "stm32ContactingBootloader": { + "message": "Подключение к загрузчику ..." + }, + "stm32ContactingBootloaderFailed": { + "message": "Сбой подключения к загрузчику" + }, + "stm32ResponseBootloaderFailed": { + "message": "Загрузчик не отвечает, процесс прошивки: СБОЙ" + }, + "stm32GlobalEraseExtended": { + "message": "Выполняется глобальная очистка чипа (путём расширенного стирания) ..." + }, + "stm32LocalEraseExtended": { + "message": "Выполняется локальная очистка (путём расширенного стирания) ..." + }, + "stm32GlobalErase": { + "message": "Выполняется глобальное стирание чипа ..." + }, + "stm32LocalErase": { + "message": "Выполняется локальное стирание ..." + }, + "stm32Erase": { + "message": "Очистка ..." + }, + "stm32Flashing": { + "message": "Прошивка ..." + }, + "stm32Verifying": { + "message": "Проверка ..." + }, + "stm32ProgrammingSuccessful": { + "message": "Прошивка: УСПЕШНО" + }, + "stm32ProgrammingFailed": { + "message": "Прошивка: СБОЙ" + }, + "stm32AddressLoadFailed": { + "message": "Сбой чтения адреса для option bytes. Скорее всего установлена защита от чтения." + }, + "stm32AddressLoadSuccess": { + "message": "Чтение адреса для option bytes успешно." + }, + "stm32AddressLoadUnknown": { + "message": "Сбой чтения адреса для option bytes с неизвестной ошибкой. Отмена ..." + }, + "stm32NotReadProtected": { + "message": "Защита чтения не установлена" + }, + "stm32ReadProtected": { + "message": "Видимо плата защищена от чтения. Снимаю защиту от чтения. Не отключайте устройство!" + }, + "stm32UnprotectSuccessful": { + "message": "Защита от чтения успешно снята." + }, + "stm32UnprotectUnplug": { + "message": "ТРЕБУЕТСЯ ДЕЙСТВИЕ: Отключите и снова подключите полётный контроллер в DFU-режиме, чтобы его можно было прошить." + }, + "stm32UnprotectFailed": { + "message": "Не удалось снять защиту от чтения с платы" + }, + "stm32UnprotectInitFailed": { + "message": "Не удалось начать процесс снятия защиты от чтения" + }, + "noConfigurationReceived": { + "message": "No configuration received within 10 seconds<\/span>, communication failed<\/span>" + }, + "firmwareVersionNotSupported": { + "message": "Версия этой прошивки не поддерживается<\/span> данным конфигуратором. Пожалуйста, обновите прошивку, которая поддерживает версию конфигуратора $1<\/strong> или выше. Используйте командную строку, чтобы сделать резервную копию прошивки перед тем, как обновлять прошивку. Процедура создания\/восстановления резервной копии описана в документации.
Если вы не хотите обновлять прошивку, то используйте более старую версию конфигуратора." + }, + "firmwareTypeNotSupported": { + "message": "Прошивки, кроме Cleanflight\/Betaflight не поддерживаются<\/span>, но для них доступен режим командной строки." + }, + "firmwareUpgradeRequired": { + "message": "Прошивка в этом устройстве нуждается в обновлении до новой версии. Используйте командную строку, чтобы сделать резервную копию перед обновлением прошивки. Процедура создания\/восстановления резервной копии описана в документации.
Если вы не хотите обновлять прошивку, то используйте более старую версию конфигуратора." + }, + "infoVersions": { + "message": "Запуск - ОС: {{operatingSystem}}<\/strong>, Chrome: {{chromeVersion}}<\/strong>, Конфигуратор: {{configuratorVersion}}<\/strong>", + "description": "Message that appears in the GUI log panel indicating operating system, Chrome version and Configurator version" + }, + "buildServerLoaded": { + "message": "Загружена информация о сборках для $1 от сервера сборки." + }, + "buildServerLoadFailed": { + "message": "Не удалось запросить информацию о выпуске $1 из GitHub, используется информация из кэша. Причина: $2<\/code><\/b>" + }, + "buildServerUsingCached": { + "message": "Использование кэшированной информации о сборках для $1." + }, + "releaseCheckLoaded": { + "message": "Из GitHub загружена информация о выпуске для $1." + }, + "releaseCheckFailed": { + "message": "Не удалось запросить информацию о выпуске $1 из GitHub, используется информация из кэша. Причина: $2<\/code><\/b>" + }, + "releaseCheckCached": { + "message": "Использована информация из кэша о выпусках $1." + }, + "releaseCheckNoInfo": { + "message": "Для $1 отсутствует информация о выпуске." + }, + "tabSwitchConnectionRequired": { + "message": "Вам нужно подключиться<\/strong> прежде чем увидеть любую из этих вкладок." + }, + "tabSwitchWaitForOperation": { + "message": "Вы не можете<\/span> сделать это прямо сейчас, пожалуйста, дождитесь завершения текущей операции ..." + }, + "tabSwitchUpgradeRequired": { + "message": "Вам нужно обновить<\/strong> прошивку до последней версии Betaflight прежде чем использовать вкладку $1." + }, + "firmwareVersion": { + "message": "Версия прошивки: $1<\/strong>" + }, + "apiVersionReceived": { + "message": "MultiWii API версия: $1<\/strong>" + }, + "uniqueDeviceIdReceived": { + "message": "Уникальный ID устройства: 0x$1<\/strong>" + }, + "craftNameReceived": { + "message": "Позывной пилота: $1<\/strong>" + }, + "armingDisabled": { + "message": "Arming выключен<\/strong>" + }, + "armingEnabled": { + "message": "Arming включён<\/strong>" + }, + "runawayTakeoffPreventionDisabled": { + "message": "Временное отключение функции Runaway Takeoff Prevention<\/strong>" + }, + "runawayTakeoffPreventionEnabled": { + "message": "Функция Runaway Takeoff Prevention включена<\/strong>" + }, + "boardInfoReceived": { + "message": "Плата: $1<\/strong>, версия: $2<\/strong>" + }, + "buildInfoReceived": { + "message": "Используется прошивка, выпущенная в: $1<\/strong>" + }, + "fcInfoReceived": { + "message": "Информация о полётном контроллере, идентификатор: $1<\/strong>, версия: $2<\/strong>" + }, + "versionLabelTarget": { + "message": "Цель" + }, + "versionLabelFirmware": { + "message": "Прошивка" + }, + "versionLabelConfigurator": { + "message": "Конфигуратор" + }, + "notifications_app_just_updated_to_version": { + "message": "Приложение обновлено до версии: $1" + }, + "notifications_click_here_to_start_app": { + "message": "Кликните сюда, чтобы запустить приложение" + }, + "statusbar_port_utilization": { + "message": "Загруженность порта:" + }, + "statusbar_usage_download": { + "message": "D: $1%" + }, + "statusbar_usage_upload": { + "message": "U: $1%" + }, + "statusbar_packet_error": { + "message": "Ошибки пакетов:" + }, + "statusbar_i2c_error": { + "message": "I2C ошибки:" + }, + "statusbar_cycle_time": { + "message": "Время цикла:" + }, + "statusbar_cpu_load": { + "message": "Загрузка CPU: $1%" + }, + "dfu_connect_message": { + "message": "Пожалуйста, используйте \"Программатор\" для доступа к DFU устройств" + }, + "dfu_erased_kilobytes": { + "message": "Успешно<\/span> стёрто $1 kB flash-памяти" + }, + "dfu_device_flash_info": { + "message": "Обнаружено устройство с суммарным размером flash-памяти $1 KiB" + }, + "dfu_error_image_size": { + "message": "Ошибка<\/span>: Этот образ прошивки больше, чем flash-память, доступная в этом чипе! Размер образа: $1 kiB, предельный размер: $2 kiB" + }, + "eeprom_saved_ok": { + "message": "EEPROM сохранён<\/span>" + }, + "defaultWelcomeIntro": { + "message": "Вас приветствует Betaflight конфигуратор<\/strong> - утилита разработанная для лёгкого обновления, конфигурации и настройки вашего полётного контроллера." + }, + "defaultWelcomeHead": { + "message": "Железо" + }, + "defaultWelcomeText": { + "message": "Это приложение поддерживает все устройства, которые могут запускаться в Betaflight конфигураторе. Вы также можете посмотреть весь список поддерживаемых устройств во вкладке \"Программатор\".

Скачать Betaflight Blackbox Log Viewer<\/a>

Исходный код прошивки можно скачать
здесь<\/a>

Последнюю версию
CP210x драйвера<\/a> можно скачать здесь<\/a>
Последнюю версию
STM USB VCP драйвера<\/a> можно скачать здесь<\/a>
Последнюю версию
Zadig<\/a> для установки USB драйвера под Windows можно скачать здесь<\/a>
" + }, + "defaultContributingHead": { + "message": "Содействие" + }, + "defaultContributingText": { + "message": "Если вы хотите сделать Betaflight лучше, вы можете помочь нам несколькими способами: