1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-23 16:25:19 +03:00

Merge branch 'master' into ToshihiroMakuuchi/ja-fix01

This commit is contained in:
Sensei 2024-12-13 17:44:16 -06:00 committed by GitHub
commit 5f25766fbc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 6549 additions and 73 deletions

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html i18n_lang="currentLanguage">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@ -88,13 +88,7 @@
</div> </div>
</div> </div>
<div class="header-wrapper"> <div class="header-wrapper">
<div id="dataflash_wrapper_global"> <div id="profiles_wrapper_global">
<div class="noflash_global" align="center" i18n="sensorDataFlashNotFound"></div>
<ul class="dataflash-contents_global">
<li class="dataflash-free_global">
<div class="legend" i18n="sensorDataFlashFreeSpace"></div>
</li>
</ul>
<div id="profile_change"> <div id="profile_change">
<div class="dropdown dropdown-dark"> <div class="dropdown dropdown-dark">
<form name="profile-change" id="profile-change"> <form name="profile-change" id="profile-change">
@ -130,6 +124,14 @@
</div> </div>
</div> </div>
</div> </div>
<div id="dataflash_wrapper_global">
<div class="noflash_global" align="center" i18n="sensorDataFlashNotFound"></div>
<ul class="dataflash-contents_global">
<li class="dataflash-free_global">
<div class="legend" i18n="sensorDataFlashFreeSpace"></div>
</li>
</ul>
</div>
<div id="sensor-status" class="sensor_state mode-connected"> <div id="sensor-status" class="sensor_state mode-connected">
<ul> <ul>
<li class="gyro" i18n_title="sensorStatusGyro"> <li class="gyro" i18n_title="sensorStatusGyro">

View file

@ -2,7 +2,7 @@
var CONFIGURATOR = { var CONFIGURATOR = {
// all versions are specified and compared using semantic versioning http://semver.org/ // all versions are specified and compared using semantic versioning http://semver.org/
'minfirmwareVersionAccepted': '7.0.0', 'minfirmwareVersionAccepted': '8.0.0',
'maxFirmwareVersionAccepted': '9.0.0', // Condition is < (lt) so we accept all in 8.x branch 'maxFirmwareVersionAccepted': '9.0.0', // Condition is < (lt) so we accept all in 8.x branch
'connectionValid': false, 'connectionValid': false,
'connectionValidCliOnly': false, 'connectionValidCliOnly': false,

View file

@ -529,7 +529,7 @@ GUI_control.prototype.update_dataflash_global = function () {
width: (100-(FC.DATAFLASH.totalSize - FC.DATAFLASH.usedSize) / FC.DATAFLASH.totalSize * 100) + "%", width: (100-(FC.DATAFLASH.totalSize - FC.DATAFLASH.usedSize) / FC.DATAFLASH.totalSize * 100) + "%",
display: 'block' display: 'block'
}); });
$(".dataflash-free_global div").text('Dataflash: free ' + formatFilesize(FC.DATAFLASH.totalSize - FC.DATAFLASH.usedSize)); $(".dataflash-free_global div").html(i18n.getMessage('sensorDataFlashFreeSpace') + formatFilesize(FC.DATAFLASH.totalSize - FC.DATAFLASH.usedSize));
} else { } else {
$(".noflash_global").css({ $(".noflash_global").css({
display: 'block' display: 'block'

View file

@ -10,7 +10,8 @@ const i18nextXHRBackend = require('i18next-xhr-backend');
const Store = require('electron-store'); const Store = require('electron-store');
const store = new Store(); const store = new Store();
const availableLanguages = ['en', 'ja', 'uk'];
const availableLanguages = ['en', 'ja', 'uk','zh_CN'];
const i18n = {}; const i18n = {};
@ -173,6 +174,11 @@ i18n.localize = function (reTranslate = false) {
const element = $(this); const element = $(this);
element.attr('placeholder', translate(element.attr('i18n_placeholder'))); element.attr('placeholder', translate(element.attr('i18n_placeholder')));
}); });
$('[i18n_lang]').each(function() {
const element = $(this);
element.attr('lang', translate(element.attr('i18n_lang')));
});
} else { } else {
$('[i18n]:not(.i18n-replaced)').each(function() { $('[i18n]:not(.i18n-replaced)').each(function() {
@ -234,6 +240,13 @@ i18n.localize = function (reTranslate = false) {
element.attr('placeholder', translate(element.attr('i18n_placeholder'))); element.attr('placeholder', translate(element.attr('i18n_placeholder')));
element.addClass('i18n_placeholder-replaced'); element.addClass('i18n_placeholder-replaced');
}); });
$('[i18n_lang]:not(.i18n_lang-replaced)').each(function() {
const element = $(this);
element.attr('lang', translate(element.attr('i18n_lang')));
element.addClass('i18n_lang-replaced');
});
} }
return localized; return localized;

View file

@ -462,6 +462,7 @@ var SerialBackend = (function () {
$('#sensor-status').show(); $('#sensor-status').show();
$('#portsinput').hide(); $('#portsinput').hide();
$('#dataflash_wrapper_global').show(); $('#dataflash_wrapper_global').show();
$('#profiles_wrapper_global').show();
/* /*
* Init PIDs bank with a length that depends on the version * Init PIDs bank with a length that depends on the version
@ -481,7 +482,6 @@ var SerialBackend = (function () {
interval.add('global_data_refresh', periodicStatusUpdater.run, periodicStatusUpdater.getUpdateInterval(CONFIGURATOR.connection.bitrate), false); interval.add('global_data_refresh', periodicStatusUpdater.run, periodicStatusUpdater.getUpdateInterval(CONFIGURATOR.connection.bitrate), false);
}); });
} }
privateScope.onClosed = function (result) { privateScope.onClosed = function (result) {
@ -497,6 +497,7 @@ var SerialBackend = (function () {
$('#sensor-status').hide(); $('#sensor-status').hide();
$('#portsinput').show(); $('#portsinput').show();
$('#dataflash_wrapper_global').hide(); $('#dataflash_wrapper_global').hide();
$('#profiles_wrapper_global').hide();
$('#quad-status_wrapper').hide(); $('#quad-status_wrapper').hide();
//updateFirmwareVersion(); //updateFirmwareVersion();

View file

@ -154,7 +154,11 @@ var ublox = (function () {
if (successCallback != null) { if (successCallback != null) {
req.onload = (event) => { req.onload = (event) => {
if(req.status == 200) {
successCallback(req.response); successCallback(req.response);
} else {
failCallback(event);
}
}; };
} }
@ -164,13 +168,17 @@ var ublox = (function () {
} }
} }
try {
req.send(null); req.send(null);
} catch(error) {
GUI.alert(i18n.getMessage("gpsAssistnowLoadDataError"));
console.log(i18n.getMessage("gpsAssistnowLoadDataError") + ':' + error.toString());
}
} }
function loadError(event) { function loadError(event) {
GUI.alert(i18n.getMessage("gpsAssistnowLoadDataError")); GUI.alert(i18n.getMessage("gpsAssistnowLoadDataError"));
console.log(i18n.getMessage("gpsAssistnowLoadDataError") + ':' + event.toString());
} }
// For more info on assistnow, check: // For more info on assistnow, check:

View file

@ -18,6 +18,10 @@
"message": "日本語", "message": "日本語",
"_comment": "Don't translate!" "_comment": "Don't translate!"
}, },
"language_zh_CN": {
"message": "简体中文",
"_comment": "Don't translate!"
},
"language": { "language": {
"message": "Language" "message": "Language"
}, },
@ -5704,7 +5708,7 @@
"message": "No dataflash <br>chip found" "message": "No dataflash <br>chip found"
}, },
"sensorDataFlashFreeSpace": { "sensorDataFlashFreeSpace": {
"message": "Dataflash: free space" "message": "Dataflash: <br />free "
}, },
"mixerProfile1": { "mixerProfile1": {
"message": "Mixer Profile 1" "message": "Mixer Profile 1"
@ -6156,5 +6160,8 @@
}, },
"adsbHeartbeatTotalMessages": { "adsbHeartbeatTotalMessages": {
"message": "Heartbeat msgs" "message": "Heartbeat msgs"
},
"currentLanguage": {
"message": "en"
} }
} }

View file

@ -18,6 +18,10 @@
"message": "日本語", "message": "日本語",
"_comment": "Don't translate!" "_comment": "Don't translate!"
}, },
"language_zh_CN": {
"message": "简体中文",
"_comment": "Don't translate!"
},
"language": { "language": {
"message": "Мова" "message": "Мова"
}, },
@ -565,7 +569,7 @@
"message": "Калібрувати Магнітометр" "message": "Калібрувати Магнітометр"
}, },
"initialSetupCalibrateMagText": { "initialSetupCalibrateMagText": {
"message": "Покрутіть мультиротор принаймні <strong>360</strong> градусів по всіх 3-х осях обертання, у вас є 30 секунд, щоб виконати це завдання" "message": "Покрутіть мультикоптер принаймні <strong>360</strong> градусів по всіх 3-х осях обертання, у вас є 30 секунд, щоб виконати це завдання"
}, },
"initialSetupButtonReset": { "initialSetupButtonReset": {
"message": "Скинути налаштування" "message": "Скинути налаштування"
@ -1755,6 +1759,9 @@
"receiverRssiChannel": { "receiverRssiChannel": {
"message": "Канал RSSI" "message": "Канал RSSI"
}, },
"receiverRssiSource": {
"message": "Джерело RSSI"
},
"receiverRefreshRateTitle": { "receiverRefreshRateTitle": {
"message": "Частота оновлення графіків" "message": "Частота оновлення графіків"
}, },
@ -2365,10 +2372,10 @@
"message": "У вашому польотному контролері відсутній сумісний чіп пам'яті для зберігання даних." "message": "У вашому польотному контролері відсутній сумісний чіп пам'яті для зберігання даних."
}, },
"dataflashFirmwareUpgradeRequired": { "dataflashFirmwareUpgradeRequired": {
"message": "Для використання флеш-пам'яті польотника необхідна прошивка &gt;= 1.8.0." "message": "Для використання флешпам'яті польотника необхідна прошивка &gt;= 1.8.0."
}, },
"dataflashButtonSaveFile": { "dataflashButtonSaveFile": {
"message": "Зберегти флеш-пам'ять в файл..." "message": "Зберегти флешпам'ять в файл..."
}, },
"dataflashButtonErase": { "dataflashButtonErase": {
"message": "Стерти флешпамять" "message": "Стерти флешпамять"
@ -2551,7 +2558,7 @@
"message": "<strong>Відновлення / Втрата зв'язку<strong>" "message": "<strong>Відновлення / Втрата зв'язку<strong>"
}, },
"firmwareFlasherRecoveryText": { "firmwareFlasherRecoveryText": {
"message": "Якщо ви втратили зв'язок з вашою платою, дотримуйтесь цих кроків, щоб відновити зв'язок: <ul><li>Вимкніть живлення</li><li>Увімкніть 'Польотник уже в режимі завантажувача', увімкніть 'Повне стирання чипа'.</li><li>З'єднайте контакти BOOT або утримуйте кнопку BOOT.</li><li>Увімкніть живлення (індикатор активності НЕ буде блимати, якщо все зроблено правильно).</li><li>Встановіть усі драйвери STM32 і Zadig, якщо це необхідно (див. розділ <a href=\"https://github.com/iNavFlight/inav/blob/master/docs/USB%20Flashing.md\"target=\"_blank\">Прошивка через USB</a> в документації INAV).</li><li>Закрийте конфігуратор, закрийте всі запущені екземпляри Chrome, закрийте всі програми Chrome, перезапустіть конфігуратор.</li><li>Відпустіть кнопку BOOT, якщо вона є на вашому польотному контролері.</li><li>Прошивайте правильною прошивкою (використовуючи ручну швидкість передачі даних, якщо це вказано в керівництві до вашого польотного контролера).</li><li>Вимкніть живлення.</li><li>Видаліть перемичку BOOT.</li><li>Увімкніть живлення (індикатор активності має блимати).</li><li>Під'єднайте як зазвичай.</li></ul>" "message": "Якщо ви втратили зв'язок з вашою платою, дотримуйтесь цих кроків, щоб відновити його: <ul><li>Вимкніть живлення</li><li>Увімкніть 'Польотник уже в режимі завантажувача', увімкніть 'Повністю очистити мікроконтролер'.</li><li>З'єднайте контакти BOOT або утримуйте кнопку BOOT.</li><li>Увімкніть живлення (індикатор активності НЕ буде блимати, якщо все зроблено правильно).</li><li>Встановіть усі драйвери STM32 і Zadig, якщо це необхідно (див. розділ <a href=\"https://github.com/iNavFlight/inav/blob/master/docs/USB%20Flashing.md\"target=\"_blank\">Прошивка через USB</a> в документації INAV).</li><li>Закрийте конфігуратор, закрийте всі запущені екземпляри Chrome, закрийте всі програми Chrome, перезапустіть конфігуратор.</li><li>Відпустіть кнопку BOOT, якщо вона є на вашому польотному контролері.</li><li>Прошивайте правильною прошивкою (використовуючи ручну швидкість передачі даних, якщо це вказано в керівництві до вашого польотного контролера).</li><li>Вимкніть живлення.</li><li>Видаліть перемичку BOOT.</li><li>Увімкніть живлення (індикатор активності має блимати).</li><li>Під'єднайте як зазвичай.</li></ul>"
}, },
"firmwareFlasherButtonLeave": { "firmwareFlasherButtonLeave": {
"message": "Вийти з програматора" "message": "Вийти з програматора"
@ -3067,7 +3074,7 @@
"message": "Визначає смугу фільтра. <br><br>Повинно бути нижче частоти режекторного фільтра." "message": "Визначає смугу фільтра. <br><br>Повинно бути нижче частоти режекторного фільтра."
}, },
"multiRotorNavigationConfiguration": { "multiRotorNavigationConfiguration": {
"message": "Налаштування навігації мультиротора" "message": "Налаштування навігації мультикоптера"
}, },
"userControlMode": { "userControlMode": {
"message": "Режим керування користувачем" "message": "Режим керування користувачем"
@ -3567,6 +3574,12 @@
"osd_main_voltage_decimals": { "osd_main_voltage_decimals": {
"message": "Десяткові розряди напруги" "message": "Десяткові розряди напруги"
}, },
"osd_decimals_altitude": {
"message": "Десяткові знаки висоти"
},
"osd_decimals_distance": {
"message": "Десяткові знаки відстані"
},
"osd_mah_precision": { "osd_mah_precision": {
"message": "Точність мАг" "message": "Точність мАг"
}, },
@ -3652,7 +3665,7 @@
"message": "Нахил камери догори" "message": "Нахил камери догори"
}, },
"osd_camera_uptilt_help": { "osd_camera_uptilt_help": {
"message": "Встановіть кут підйому FPV камери в градусах, позитивний - вгору, негативний - вниз, відносно горизонталі. Використовується для коректного відображення елементів HUD та індикатора штучного горизонту (коли увімкнено)." "message": "Встановіть кут підйому FPV камери в градусах відносно горизонталі, позитивний - вгору, негативний - вниз. Використовується для коректного відображення елементів HUD та індикатора штучного горизонту (коли увімкнено osd_ahi_camera_uptilt_comp=ON)."
}, },
"osd_camera_fov_h": { "osd_camera_fov_h": {
"message": "Кут горизонтального поля зору камери" "message": "Кут горизонтального поля зору камери"
@ -3787,19 +3800,19 @@
"message": "Максимальна температура регулятора обертів" "message": "Максимальна температура регулятора обертів"
}, },
"osd_snr_alarm": { "osd_snr_alarm": {
"message": "Рівень сигналізації CRSF SNR" "message": "Рівень сигналізації SNR"
}, },
"osdalarmSNR_HELP": { "osdalarmSNR_HELP": {
"message": "SNR відображається лише нижче цього значення. 0dB (співвідношення 1:1) означає, що отриманий сигнал дорівнює рівню шумів." "message": "SNR відображається лише нижче цього значення. 0dB (співвідношення 1:1) означає, що отриманий сигнал дорівнює рівню шумів."
}, },
"osd_link_quality_alarm": { "osd_link_quality_alarm": {
"message": "Сигналізація якості зв'язку CRSF" "message": "Сигналізація якості зв'язку"
}, },
"osdalarmLQ_HELP": { "osdalarmLQ_HELP": {
"message": "Для Crossfire використовуйте 70%. Для Tracer використовуйте 50%." "message": "Для Crossfire використовуйте 70%. Для Tracer використовуйте 50%."
}, },
"osd_rssi_dbm_alarm": { "osd_rssi_dbm_alarm": {
"message": "Cигналізація CRSF RSSI dBm" "message": "Cигналізація RSSI в дБм"
}, },
"osd_adsb_distance_warning": { "osd_adsb_distance_warning": {
"message": "Попередження про відстань ADSB" "message": "Попередження про відстань ADSB"
@ -3846,8 +3859,8 @@
"osdGroupVTX": { "osdGroupVTX": {
"message": "Відеопередавач" "message": "Відеопередавач"
}, },
"osdGroupCRSF": { "osdGroupRx": {
"message": "Статистика приймача CRSF" "message": "Статистика приймача RX"
}, },
"osdGroupMapsAndRadars": { "osdGroupMapsAndRadars": {
"message": "Карти та радарні системи" "message": "Карти та радарні системи"
@ -4074,23 +4087,29 @@
"osdElement_VTX_CHANNEL_HELP": { "osdElement_VTX_CHANNEL_HELP": {
"message": "Показує поточний діапазон і канал відеопередавача. Потребує або відеопередавач зі SmartAudio чи Tramp, або відеопередавач, інтегрований у польотний контролер." "message": "Показує поточний діапазон і канал відеопередавача. Потребує або відеопередавач зі SmartAudio чи Tramp, або відеопередавач, інтегрований у польотний контролер."
}, },
"osdElement_CRSF_RSSI_DBM": { "osdElement_RSSI_DBM": {
"message": "RX RSSI у дБм" "message": "Значення RX RSSI в дБм"
}, },
"osdElement_CRSF_LQ": { "osdElement_LQ_UPLINK": {
"message": "RX Якість з'єднання %" "message": "Якість з'єднання від RX до TX %"
}, },
"osdElement_CRSF_LQ_HELP": { "osdElement_LQ_UPLINK_HELP": {
"message": "Використовуйте налаштування Формату Crossfire LQ для вибору типу формату." "message": "Якщо використовується CRSF, використовуйте налаштування формату LQ Crossfire для вибору типу формату."
}, },
"osdElement_CRSF_SNR_DB": { "osdElement_LQ_DOWNLINK": {
"message": "RX Uplink SNR в дБ" "message": "Якість каналу від TX до RX %"
}, },
"osdElement_CRSF_SNR_DB_HELP": { "osdElement_SNR_DB": {
"message": "Показується лише при зниженні SNR нижче рівня попередження. При 0 дБ рівень прийнятого сигналу дорівнює рівню шуму." "message": "SNR каналу від RX до TX у дБ"
}, },
"osdElement_CRSF_TX_POWER": { "osdElement_SNR_DB_HELP": {
"message": "Потужність TX у мВт" "message": "Показується лише коли SNR (співвідношення сигнал/шум) опускається нижче рівня попередження. При 0 дБ рівень прийнятого сигналу дорівнює рівню шуму."
},
"osdElement_TX_POWER_UPLINK": {
"message": "Потужність передавача в мВт"
},
"osdElement_OSD_RX_POWER_DOWNLINK": {
"message": "Потужність приймача в мВт"
}, },
"osdElement_MAP_NORTH": { "osdElement_MAP_NORTH": {
"message": "Карта (північ вгорі)" "message": "Карта (північ вгорі)"
@ -4156,16 +4175,16 @@
"message": "Результати ПІД регулятора положення FW" "message": "Результати ПІД регулятора положення FW"
}, },
"osdElement_MC_VEL_X_PID_OUTPUTS": { "osdElement_MC_VEL_X_PID_OUTPUTS": {
"message": "Результати ПІД регулятора швидкості мультиротора по осі X" "message": "Результати ПІД регулятора швидкості мультикоптера по осі X"
}, },
"osdElement_MC_VEL_Y_PID_OUTPUTS": { "osdElement_MC_VEL_Y_PID_OUTPUTS": {
"message": "Результати ПІД регулятора швидкості мультиротора по осі Y" "message": "Результати ПІД регулятора швидкості мультикоптера по осі Y"
}, },
"osdElement_MC_VEL_Z_PID_OUTPUTS": { "osdElement_MC_VEL_Z_PID_OUTPUTS": {
"message": "Результати ПІД регулятора швидкості мультиротора по осі Z" "message": "Результати ПІД регулятора швидкості мультикоптера по осі Z"
}, },
"osdElement_MC_POS_XYZ_P_OUTPUTS": { "osdElement_MC_POS_XYZ_P_OUTPUTS": {
"message": "Результати П регулятора положення XYZ мультиротора" "message": "Результати П регулятора положення XYZ мультикоптера"
}, },
"osdElement_IMU_TEMPERATURE": { "osdElement_IMU_TEMPERATURE": {
"message": "Температура ІВП" "message": "Температура ІВП"
@ -4275,6 +4294,15 @@
"osdElement_OSD_RANGEFINDER": { "osdElement_OSD_RANGEFINDER": {
"message": "Відстань далекоміра" "message": "Відстань далекоміра"
}, },
"osdElement_COURSE_NEXT_GEOZONE": {
"message": "Курс до наступної геозони"
},
"osdElement_HOR_DIST_TO_NEXT_GEOZONE": {
"message": "Горизонтальна відстань до наступної геозони"
},
"osdElement_VERT_DIST_TO_NEXT_GEOZONE": {
"message": "Вертикальна відстань до наступної геозони"
},
"osdSettingPLUS_CODE_DIGITS_HELP": { "osdSettingPLUS_CODE_DIGITS_HELP": {
"message": "Точність на екваторі: 10=13,9x13,9м; 11=2,8x3,5м; 12=56x87см; 13=11x22см." "message": "Точність на екваторі: 10=13,9x13,9м; 11=2,8x3,5м; 12=56x87см; 13=11x22см."
}, },
@ -4635,6 +4663,171 @@
"missionSafehomeMaxSafehomesReached": { "missionSafehomeMaxSafehomesReached": {
"message": "Максимальна кількість безпечних точок досягнута." "message": "Максимальна кількість безпечних точок досягнута."
}, },
"missionGeozoneHead": {
"message": "Геозони"
},
"missionGeozoneEdit": {
"message": "Редагувати геозону $1"
},
"missionGeozoneSaveAndReboot": {
"message": "Записати Геозони в Eeprom та перезавантажити"
},
"missionGeozoneLoad": {
"message": "Завантажити геозони з Eeprom"
},
"missionGeozone": {
"message": "-Геозона "
},
"missionGezoneType": {
"message": "Тип"
},
"missionGezoneShape": {
"message": "Форма"
},
"missionGeozoneTypePolygon": {
"message": "Багатокутна"
},
"missionGeozoneTypeCircular": {
"message": "Кругова"
},
"missionGeozoneMaxZonesReached": {
"message": "Досягнуто максимальної кількості геозон."
},
"missionGeozoneMaxVerticesReached": {
"message": "Досягнуто максимальної кількості вершин геозони."
},
"missionGeozoneWarning": {
"message": "Щонайменше одна місія та одна геозона налаштовані, будь ласка, переконайтеся, що місія не порушує межі геозони."
},
"geozoneEdit": {
"message": "Редагувати геозону "
},
"geozoneShape": {
"message": "Форма"
},
"geozoneInclusive": {
"message": "Інклюзивна"
},
"geozoneExcusive": {
"message": "Ексклюзивна"
},
"geozoneMinAlt": {
"message": "Мін. вис. (см):"
},
"geozoneMaxAlt": {
"message": "Макс. вис. (см):"
},
"geozoneInfiniteAlt": {
"message": "0 = висота не обмежена"
},
"geozoneAction": {
"message": "Дія:"
},
"geozoneActionNone": {
"message": "Відсутня"
},
"geozoneActionAvoid": {
"message": "Уникати"
},
"geozoneActionPosHold": {
"message": "Утримувати позицію"
},
"geozoneActionRTH": {
"message": "Повернення додому"
},
"geozoneRadius": {
"message": "Радіус (см):"
},
"geozoneVerices": {
"message": "Вершини:"
},
"": {
"message": ""
},
"featureGEOZONE": {
"message": "Геозона"
},
"geozone": {
"message": "Геозона"
},
"featureGEOZONETip": {
"message": "Віртуальні периметри для географічних зон (також називаються гео-огорожами) з автоматичною активацією дій у разі порушення цих периметрів."
},
"GeozoneSettings": {
"message": "Налаштування геозони"
},
"geozoneDetectionDistance": {
"message": "Відстань виявлення"
},
"geozoneDetectionDistanceHelp": {
"message": "Відстань, з якої виявляється геозона"
},
"geozoneAvoidAltitudeRange": {
"message": "Уникати діапазон висот"
},
"geozoneAvoidAltitudeRangeHelp": {
"message": "Діапазон висот, в межах якого здійснюється спроба обійти геозону зверху"
},
"geozoneSafeAltitudeDistance": {
"message": "Безпечна відстань по висоті"
},
"geozoneSafeAltitudeDistanceHelp": {
"message": "Вертикальна відстань, яку необхідно утримувати до верхньої та нижньої межі зони."
},
"geozoneSafehomeAsInclusive": {
"message": "Безпечна зона повернення інклюзивна"
},
"geozoneSafehomeAsInclusiveHelp": {
"message": "Сприймати найближчу безпечну точку повернення як інклюзивну геозону"
},
"geozoneSafehomeZoneAction": {
"message": "Дія зони безпечного повернення"
},
"geozoneSafehomeZoneActionHelp": {
"message": "Межа дії для зони безпечної точки повернення"
},
"geozoneMrStopDistance": {
"message": "Відстань зупинки мультикоптера"
},
"geozoneMrStopDistanceHelp": {
"message": "Відстань до межі, на якій мультикоптер зупиняється"
},
"geozoneNoWayHomeAction": {
"message": "Дія в разі відсутності можливості повернення додому"
},
"geozoneNoWayHomeActionHelp": {
"message": "Дія, якщо Повернення додому RTH з активними геозонами не може розрахувати маршрут додому: \nRTH: Повернутися додому і ігнорувати всі геозони."
},
"missionGeozoneReboot": {
"message": "Бажаєте зберегти та перезавантажити?"
},
"missionGeozoneAvailableZones": {
"message": "Доступні геозони:"
},
"missionGeozoneAvailableVertices": {
"message": "Доступні вершини:"
},
"geozoneInvalidzone": {
"message": "Виявлено недійсні геозони:"
},
"geozoneInvalidLat": {
"message": "Неприпустима широта"
},
"geozoneInvalidLon": {
"message": "Неприпустима довгота"
},
"gezoneInvalidReasonNotCC": {
"message": "Не проти годинникової стрілки"
},
"gezoneInvalidReasonComplex": {
"message": "Складна"
},
"gezoneInvalidReasonMinMaxAlt": {
"message": "Макс. вис. <= Мін. вис."
},
"geozoneUnableToSave": {
"message": "Неможливо зберегти геозони: недійсні зони"
},
"missionMultiMissionHead": { "missionMultiMissionHead": {
"message": "Мультимісії" "message": "Мультимісії"
}, },
@ -4743,6 +4936,9 @@
"settings": { "settings": {
"message": "Налаштування" "message": "Налаштування"
}, },
"decimals": {
"message": "Десяткові знаки"
},
"motorMixer": { "motorMixer": {
"message": "Мікшер моторів" "message": "Мікшер моторів"
}, },
@ -4897,7 +5093,7 @@
"message": "Цикл ПІД може бути нестабільним, якщо використовуються GPS" "message": "Цикл ПІД може бути нестабільним, якщо використовуються GPS"
}, },
"gyroLpfSuggestedMessage": { "gyroLpfSuggestedMessage": {
"message": "Це рекомендоване налаштування для всіх мультироторів із розміром пропелерів менше 8 дюймів. Завжди перевіряйте температуру мотора після першого польоту" "message": "Це рекомендоване налаштування для всіх мультикоптерів із розміром пропелерів менше 8 дюймів. Завжди перевіряйте температуру мотора після першого польоту"
}, },
"gyroLpfNotAdvisedMessage": { "gyroLpfNotAdvisedMessage": {
"message": "Рекомендується вибрати вищу частоту зрізу" "message": "Рекомендується вибрати вищу частоту зрізу"
@ -5050,7 +5246,7 @@
"message": "Швидкість I2C" "message": "Швидкість I2C"
}, },
"configurationI2cSpeedHelp": { "configurationI2cSpeedHelp": {
"message": "Швидкість I2C слід підтримувати на найвищому рівні, який дозволяє всім підключеним пристроям працювати. Значення за замовчуванням 400 кГц є безпечним, і рекомендується перемикати на 800 кГц у випадку з мультироторами." "message": "Швидкість I2C слід підтримувати на найвищому рівні, який дозволяє всім підключеним пристроям працювати. Значення за замовчуванням 400 кГц є безпечним, і рекомендується перемикати на 800 кГц у випадку з мультикоптерами."
}, },
"i2cSpeedSuggested800khz": { "i2cSpeedSuggested800khz": {
"message": "Будь ласка, перемкніть на 800 кГц, якщо підключене апаратне забезпечення це дозволяє" "message": "Будь ласка, перемкніть на 800 кГц, якщо підключене апаратне забезпечення це дозволяє"
@ -5479,7 +5675,7 @@
"message": "Чіп пам'яті <br>не знайдено" "message": "Чіп пам'яті <br>не знайдено"
}, },
"sensorDataFlashFreeSpace": { "sensorDataFlashFreeSpace": {
"message": "Доступна пам'ять" "message": "Флешпам'ять: <br />вільно "
}, },
"mixerProfile1": { "mixerProfile1": {
"message": "Профіль мікшера 1" "message": "Профіль мікшера 1"
@ -5930,5 +6126,8 @@
}, },
"adsbHeartbeatTotalMessages": { "adsbHeartbeatTotalMessages": {
"message": "Повід. сигналів перевірки" "message": "Повід. сигналів перевірки"
},
"currentLanguage": {
"message": "uk"
} }
} }

6163
locale/zh_CN/messages.json Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1696,11 +1696,11 @@ dialog {
color: white; color: white;
font-size: 10px; font-size: 10px;
margin-top: 20px; margin-top: 20px;
width: 410px; width: 100px;
float: right; float: right;
margin-right: 10px; margin-right: 20px;
line-height: 12px; line-height: 12px;
height: 33px; height: 64px;
border-radius: 5px; border-radius: 5px;
border: 1px solid #272727; border: 1px solid #272727;
box-shadow: 0 1px 0 rgba(92, 92, 92, 0.5); box-shadow: 0 1px 0 rgba(92, 92, 92, 0.5);
@ -1708,38 +1708,68 @@ dialog {
padding-top: 5px; padding-top: 5px;
display: none; display: none;
text-shadow: 0 1px rgba(0, 0, 0, 1.0); text-shadow: 0 1px rgba(0, 0, 0, 1.0);
}
@media screen and (max-width: 1060px) {
#dataflash_wrapper_global {
display: none !important;
}
}
/* Profile selector styling*/
#profiles_wrapper_global {
color: white;
font-size: 10px;
margin-top: 20px;
width: 130px;
float: right;
margin-right: 10px;
line-height: 12px;
height: 64px;
padding: 0px;
display: none;
text-shadow: 0 1px rgba(0, 0, 0, 1.0);
} }
#profile_change { #profile_change {
color: white; color: white;
margin-top: 16px; margin: 0px;
width: 130px; width: 130px;
float: left; float: left;
margin-right: 10px;
line-height: 12px; line-height: 12px;
} }
#profile_change > .dropdown {
margin: 0px;
}
#mixer_profile_change { #mixer_profile_change {
color: white; color: white;
margin-top: 16px; margin: 0px;
width: 130px; width: 130px;
float: left; float: left;
margin-right: 0;
line-height: 12px; line-height: 12px;
} }
#mixer_profile_change > .dropdown {
margin: 0px;
}
#battery_profile_change { #battery_profile_change {
color: white; color: white;
margin-top: 16px; margin: 0px;
width: 130px; width: 130px;
float: right; float: right;
margin-right: 0;
line-height: 12px; line-height: 12px;
} }
#battery_profile_change > .dropdown {
margin: 0px;
}
.dataflash-contents_global { .dataflash-contents_global {
margin-top: 18px; margin-top: 30px;
border: 1px solid #4A4A4A; border: 1px solid #4A4A4A;
background-color: #4A4A4A; background-color: #4A4A4A;
display: flex; display: flex;
@ -1770,7 +1800,7 @@ dialog {
.dataflash-contents_global li div { .dataflash-contents_global li div {
position: absolute; position: absolute;
top: -18px; top: -30px;
margin-top: 0; margin-top: 0;
left: 0; left: 0;
right: 0; right: 0;

View file

@ -464,3 +464,17 @@
.tab-motors .config-section .number input { .tab-motors .config-section .number input {
margin-right: 4px; margin-right: 4px;
} }
.tab-motors .mixerPreview {
position: relative;
}
.tab-motors .motorNumber {
position: absolute;
font-size: 1.4em;
visibility: hidden;
}
.tab-motors .mixer-preview-image-numbers {
width: fit-content;
}

View file

@ -476,6 +476,7 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
$("#motorNumber"+index).css("left", left_px + "px"); $("#motorNumber"+index).css("left", left_px + "px");
$("#motorNumber"+index).css("top", top_px + "px"); $("#motorNumber"+index).css("top", top_px + "px");
$("#motorNumber"+index).removeClass("is-hidden"); $("#motorNumber"+index).removeClass("is-hidden");
$("#motorNumber"+index).css("visibility", "visible");
} }
} }
} }
@ -610,7 +611,6 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
} }
} }
return (errorCount == 0); return (errorCount == 0);
} }
@ -661,7 +661,6 @@ TABS.mixer.initialize = function (callback, scrollPosition) {
const path = './resources/motor_order/' const path = './resources/motor_order/'
+ currentMixerPreset.image + (isReversed ? "_reverse" : "") + '.svg'; + currentMixerPreset.image + (isReversed ? "_reverse" : "") + '.svg';
$('.mixerPreview img').attr('src', path); $('.mixerPreview img').attr('src', path);
renderServoOutputImage(); renderServoOutputImage();
}; };

View file

@ -152,7 +152,6 @@
<div class="legend"></div> <div class="legend"></div>
</li> </li>
</ul><bbr /> </ul><bbr />
<a class="require-msc-ready regular-button onboardLoggingRebootMsc" href="#" i18n="cliMscBtn"></a>
</div> </div>
</div> </div>
</div> </div>

View file

@ -2799,7 +2799,7 @@ OSD.GUI.updateUnits = function() {
}); });
}; };
OSD.GUI.updateFields = function() { OSD.GUI.updateFields = function(event) {
// display fields on/off and position // display fields on/off and position
var $tmpl = $('#osd_group_template').hide(); var $tmpl = $('#osd_group_template').hide();
// Clear previous groups, if any // Clear previous groups, if any
@ -2840,6 +2840,7 @@ OSD.GUI.updateFields = function() {
}); });
} }
var $displayFields = groupContainer.find('.display-fields'); var $displayFields = groupContainer.find('.display-fields');
var osdSearch = $('.osd_search');
for (var jj = 0; jj < groupItems.length; jj++) { for (var jj = 0; jj < groupItems.length; jj++) {
var item = groupItems[jj]; var item = groupItems[jj];
var itemData = OSD.data.items[item.id]; var itemData = OSD.data.items[item.id];
@ -2853,7 +2854,7 @@ OSD.GUI.updateFields = function() {
} else { } else {
name = inflection.titleize(name); name = inflection.titleize(name);
} }
var searchTerm = $('.osd_search').val(); var searchTerm = osdSearch.val();
if (searchTerm.length > 0 && !name.toLowerCase().includes(searchTerm.toLowerCase())) { if (searchTerm.length > 0 && !name.toLowerCase().includes(searchTerm.toLowerCase())) {
continue; continue;
} }
@ -2949,10 +2950,13 @@ OSD.GUI.updateFields = function() {
// needs to be called after all of them have been set up // needs to be called after all of them have been set up
GUI.switchery(); GUI.switchery();
if(event != null && event.currentTarget !== osdSearch[0])
{
// Update the OSD preview // Update the OSD preview
refreshOSDSwitchIndicators(); refreshOSDSwitchIndicators();
updatePilotAndCraftNames(); updatePilotAndCraftNames();
updatePanServoPreview(); updatePanServoPreview();
}
}; };
OSD.GUI.removeBottomLines = function(){ OSD.GUI.removeBottomLines = function(){
@ -3367,8 +3371,8 @@ OSD.GUI.updateAll = function() {
clear.off('change'); clear.off('change');
} }
$('.osd_search').on('input', function() { $('.osd_search').on('input', function(event) {
OSD.GUI.updateFields(); OSD.GUI.updateFields(event);
}); });
$('.supported').fadeIn(); $('.supported').fadeIn();
OSD.GUI.updateVideoMode(); OSD.GUI.updateVideoMode();

View file

@ -117,7 +117,11 @@
<div class="motors right"> <div class="motors right">
<div class="half"> <div class="half">
<div class="mixerPreview"> <div class="mixerPreview">
<img src="./resources/motor_order/custom.svg" /> <img src="./resources/motor_order/custom.svg" id="motor-mixer-preview-img" />
<div class="motorNumber" id="motorNumber1">1</div>
<div class="motorNumber" id="motorNumber2">2</div>
<div class="motorNumber" id="motorNumber3">3</div>
<div class="motorNumber" id="motorNumber4">4</div>
</div> </div>
</div> </div>
<div class="half"> <div class="half">

View file

@ -257,6 +257,7 @@ TABS.outputs.initialize = function (callback) {
const path = './resources/motor_order/' const path = './resources/motor_order/'
+ mixer.getById(val).image + (isReversed ? "_reverse" : "") + '.svg'; + mixer.getById(val).image + (isReversed ? "_reverse" : "") + '.svg';
$('.mixerPreview img').attr('src', path); $('.mixerPreview img').attr('src', path);
labelMotorNumbers();
} }
function process_servos() { function process_servos() {
@ -717,6 +718,38 @@ TABS.outputs.initialize = function (callback) {
GUI.content_ready(callback); GUI.content_ready(callback);
} }
function labelMotorNumbers() {
if (mixer.getById(FC.MIXER_CONFIG.appliedMixerPreset).image != 'quad_x') {
return;
}
let index = 0;
var rules = FC.MOTOR_RULES.get();
for (const i in rules) {
if (rules.hasOwnProperty(i)) {
const rule = rules[i];
index++;
let top_px = 30;
let left_px = 28;
if (rule.getRoll() < -0.5) {
left_px = $("#motor-mixer-preview-img").width() - 20;
}
if (rule.getPitch() > 0.5) {
top_px = $("#motor-mixer-preview-img").height() - 20;
}
$("#motorNumber"+index).css("left", left_px + "px");
$("#motorNumber"+index).css("top", top_px + "px");
$("#motorNumber"+index).css("visibility", "visible");
}
}
}
}; };
TABS.outputs.cleanup = function (callback) { TABS.outputs.cleanup = function (callback) {