diff --git a/package.json b/package.json
index fa9f9a7de..0eb02de41 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "esc-configurator",
- "version": "0.31.0",
+ "version": "0.32.0",
"private": false,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/src/Components/FirmwareSelector/__tests__/index.test.jsx b/src/Components/FirmwareSelector/__tests__/index.test.jsx
index e1a68f1e8..f5d76dd28 100644
--- a/src/Components/FirmwareSelector/__tests__/index.test.jsx
+++ b/src/Components/FirmwareSelector/__tests__/index.test.jsx
@@ -314,7 +314,7 @@ describe('FirmwareSelector', () => {
fireEvent.change(screen.getByRole(/combobox/i, { name: 'Version' }), {
target: {
- value: 'https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.94/',
+ value: 'https://github.com/am32-firmware/AM32/releases/download/v1.94/',
name: 'Version',
},
});
@@ -377,7 +377,7 @@ describe('FirmwareSelector', () => {
fireEvent.change(screen.getByRole(/combobox/i, { name: 'Version' }), {
target: {
- value: 'https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.94/',
+ value: 'https://github.com/am32-firmware/AM32/releases/download/v1.94/',
name: 'Version',
},
});
diff --git a/src/Components/Home/index.jsx b/src/Components/Home/index.jsx
index b12917cac..2eb0a8555 100644
--- a/src/Components/Home/index.jsx
+++ b/src/Components/Home/index.jsx
@@ -118,7 +118,7 @@ function HomeColumnCenter() {
- If you are still on 0.20.0, please downgrade to 0.19.2 - there have been issues with stall detection and motor protection which might result in broken ESCs and/or motors.
+ If you are still on 0.20.0, please upgrade to version 0.21.0 - there have been issues with stall detection and motor protection which might result in broken ESCs and/or motors.
@@ -151,7 +151,7 @@ function HomeColumnCenter() {
diff --git a/src/Components/MainContent/style.scss b/src/Components/MainContent/style.scss
index 9d6514093..f711fb852 100644
--- a/src/Components/MainContent/style.scss
+++ b/src/Components/MainContent/style.scss
@@ -148,7 +148,7 @@
}
.input-wrapper {
- flex: 0 0 195px;
+ flex: 0 0 218px;
input:not([type="checkbox"]),
select {
@@ -170,7 +170,7 @@
label {
flex: 1;
- flex: 0 0 195px;
+ flex: 0 0 218px;
}
}
diff --git a/src/changelog.json b/src/changelog.json
index 6e14cdbe1..9b45b2e1e 100644
--- a/src/changelog.json
+++ b/src/changelog.json
@@ -1,4 +1,13 @@
[
+ {
+ "title": "0.32.0",
+ "items": [
+ "Bugfix: Add more space to display ESC information",
+ "Translation: Add Russian translations",
+ "Translation: Fixed typo",
+ "Enhancement: More melodies"
+ ]
+ },
{
"title": "0.31.0",
"items": [
diff --git a/src/melodies.json b/src/melodies.json
index 242698ca5..4abc3a50a 100644
--- a/src/melodies.json
+++ b/src/melodies.json
@@ -125,6 +125,15 @@
"Melody:b=180,o=5,d=8:1p,1p,1p,1p,a4,a#4,b4,c,p,c,b4,c,4p,p,d,p,d,e,f#,4g,g,16g,32g,32p,2g,a,g#,g,f"
]
},
+ {
+ "name": "Deco*27 - Vampire",
+ "tracks": [
+ "bluejay:b=163,o=5,d=8:a5,g5,f5,g5,p,4f5,f6,p,a5,16a5,g5,16p,f5,p,f6,p,1p,1p,1p,1p,1p,1p",
+ "bluejay:b=163,o=5,d=8:1p,1p,1p,1p,4p,a5,d6,e6,4f6,a5,g5,p,f6,p,g6,16g6,32g6,32p,g6,f6,g6,4a6,1p,2p,p",
+ "bluejay:b=163,o=5,d=8:1p,1p,a5,g5,16g5,16f5,p,g5,p,f5,g5,32f5,32p,16f5,a5,16p,16g5,p,d6,16d6,32d6,32p,d6,c#6,d6,e6,1p,1p,1p,2p,4p",
+ "bluejay:b=163,o=5,d=8:1p,1p,1p,1p,1p,1p,4p,p,g6,16f6,32f6,32p,f6,p,4a6,g6,f6,g6,2f6"
+ ]
+ },
{
"name": "Devil's Swing",
"tracks": [
@@ -207,6 +216,15 @@
"FF8Laguna4:d=16,o=4,b=140:a,p,d5,p,c5,p,g,a,p,a,d5,p,c5,8p.,a,p,d5,p,c5,p,g,a,p,a,d5,p,c5,8p.,a,p,d5,p,c5,p,g,a,p,a,d5,p,c5,8p.,a,p,d5,p,c5,p,g,a,p,a,d5,p,c5,8p.,2c,8c"
]
},
+ {
+ "name": "Future - Mask off",
+ "tracks": [
+ "mask_off:d=4,o=5,b=200:2e,8g,8b,8g,1a,8b,8a,8g,4f#,4e,8d,8b4,1e",
+ "mask_off:d=4,o=5,b=200:1e2,8p,1a2,8p,1d2,32p,1e2",
+ "mask_off:d=4,o=5,b=200:1e3,8p,1a3,8p,1d3,32p,1e3",
+ "mask_off:d=4,o=5,b=200:2e6,8g6,8b6,8g6,1a6,8b6,8a6,8g6,4f#6,4e6,8d6,8b,1e6"
+ ]
+ },
{
"name": "Guns n Roses - Sweet Child O Mine",
"tracks": [
@@ -386,6 +404,13 @@
"Kalyna:b=260,o=5,d=4:f,p,f,p,g#,g#,p,f,g,g#,g,f,2e,2c,2f,f,g,2g#,2g,1f,p,p,p"
]
},
+ {
+ "name": "Ой у лузі червона калина (Ukrainian Patriotic Song - Polyphonic)",
+ "tracks": [
+ "kalyna:d=4,o=5,b=260: 4d6,4p, 4d6, 4p, 2f6, 4p, 4d6, 4e6, 4f6, 4e6, 4d6,4c#6, 4p, 4a5,4p, 2d6,4p, 4e6,4f6, 4p, 4e6, 4p, 4d6",
+ "kalyna:d=4,o=5,b=260: 4d4, 4f4,4d4, 4f4,4d4, 4f4,4d4, 4f4, 4e4, 4g4,4e4, 4g4, 4a4,4c#,4a4,4c#, 4d4, 4f4,4d4, 4f4, 4c4, 4e4,4c4, 4e4,4d4, 4f4,4d4, 4f4"
+ ]
+ },
{
"name": "Owl City - Fireflies",
"tracks": [
@@ -404,6 +429,12 @@
"pacman4:d=32,o=5,b=112:c#,p,c#6,p,g#,p,f,p,c#6,g#,16p,16f.,p,d,p,d6,p,a,p,f#,p,d6,a,16p,16f#.,p,c#,p,c#6,p,g#,p,f,p,c#6,g#,16p,16f.,p,e,f,f#,p,f#,g,g#,p,g#,a,a#,p,16c#6"
]
},
+ {
+ "name": "Peppa Pig - Theme",
+ "tracks": [
+ "PeppaPig:b=300,o=5,d=4:g,p,e,c,d,p,g4,p,g4,b4,d,f,e,p,c,p"
+ ]
+ },
{
"name": "Perfume - Glitter",
"tracks": [
@@ -503,6 +534,15 @@
"PushIt:d=8,o=5,b=165:a,p,e,a,p,e,p,g,p,e,p,e,b,c6,b,g,a,p,e,a,p,e,p,g,p,e,p,e,b,c6,b,g,a,p,e6,d6,p,c6,p,b,p,g,p,g,b,c6,b,g,a"
]
},
+ {
+ "name": "Sea of Thieves - Maiden Voyage",
+ "tracks": [
+ "Melody:b=125,o=5,d=4:d,8p,16d,16e,f#,8e,16e,16d,e,a,p,16g,16f#,8e,d,16f#,8p,16a,b,8a,8p,2e,e",
+ "Melody:b=125,o=4,d=4:p,d,8p,32d,32p,32a3,32p,8d,8p,p,16c#,16p,32a3,32p,32c#,32p,a3,2p,d,p,8e,8p,p,16a3,16p,32a3,32p,32a3,32p,8a3,8p",
+ "Melody:b=125,o=6,d=4:d,8p,16d,16e,f#,8e,16e,16d,e,a,p,16g,16f#,8e,d,16f#,8p,16a,b,8a,8p,2e,e",
+ "Melody:b=125,o=4,d=4:p,a3,8p,32a3,32p,32d,32p,a3,p,16a3,16p,32c#,32p,32a3,32p,c#,p,p,a3,p,8a3,8p,p,16c#,16p,32c#,32p,32c#,32p,8c#,8p"
+ ]
+ },
{
"name": "Shaun the Sheep - Theme",
"tracks": [
@@ -633,6 +673,12 @@
"ts_hof_b:b=85,o=3,d=1:8g,8d4,8g4,4d#,8a#,4d#4,8a#,8f4,8a#4,4f,8c4,4f4"
]
},
+ {
+ "name": "T-Motor Default",
+ "tracks": [
+ "tmotor:b=130,o=5,d=8:c,16f,16e,f,e,4c"
+ ]
+ },
{
"name": "Tristam - Till It's Over",
"tracks": [
diff --git a/src/settings.json b/src/settings.json
index 6256eb0b1..7bde8f957 100644
--- a/src/settings.json
+++ b/src/settings.json
@@ -29,6 +29,10 @@
"label": "Polski",
"value": "pl"
},
+ {
+ "label": "Русский",
+ "value": "ru"
+ },
{
"label": "Українська",
"value": "uk"
diff --git a/src/sources/AM32/__tests__/index.test.js b/src/sources/AM32/__tests__/index.test.js
index db49e90df..e5a683959 100644
--- a/src/sources/AM32/__tests__/index.test.js
+++ b/src/sources/AM32/__tests__/index.test.js
@@ -115,40 +115,40 @@ describe('AM32', () => {
expect(name).toEqual('NOT READY - AM32, FLASH FIRMWARE, Bootloader v8 (PB2)');
});
- it('should return valid URL for version 1.94', () => {
+ it('should return valid URL for version 2.08', () => {
const firmwareConfig = {
escKey: 'IFlight_50A',
- version: '1.94',
- url: 'https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.94/',
+ version: '2.08',
+ url: 'https://github.com/am32-firmware/AM32/releases/download/v2.08/',
esc: { meta: {} },
};
const url = source.getFirmwareUrl(firmwareConfig);
- expect(url).toEqual('https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.94/AM32_IFLIGHT_F051_1.94.hex');
+ expect(url).toEqual('https://github.com/am32-firmware/AM32/releases/download/v2.08/AM32_IFLIGHT_F051_2.08.hex');
});
it('should return valid URL for version included in patterns', () => {
const firmwareConfig = {
escKey: 'IFlight_50A',
- version: 'v1.91',
- url: 'https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.91/',
+ version: 'v2.08',
+ url: 'https://github.com/am32-firmware/AM32/releases/download/v2.08/',
esc: { meta: {} },
};
const url = source.getFirmwareUrl(firmwareConfig);
- expect(url).toEqual('https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.91/AM32_IFLIGHT_F051_1.91.hex');
+ expect(url).toEqual('https://github.com/am32-firmware/AM32/releases/download/v2.08/AM32_IFLIGHT_F051_2.08.hex');
});
it('should return valid URL for version with name detected', () => {
const firmwareConfig = {
escKey: 'DOES_NOT_EXIST',
- version: 'v1.95',
- url: 'https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.95/',
+ version: 'v2.08',
+ url: 'https://github.com/am32-firmware/AM32/releases/download/v2.08/',
esc: { meta: { am32: { fileName: 'DETECTED_FILENAME' } } },
};
const url = source.getFirmwareUrl(firmwareConfig, 'DETECTED');
- expect(url).toEqual('https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware/releases/download/v1.95/AM32_DETECTED_FILENAME_1.95.hex');
+ expect(url).toEqual('https://github.com/am32-firmware/AM32/releases/download/v2.08/AM32_DETECTED_FILENAME_2.08.hex');
});
it('should return a list of valid names', () => {
diff --git a/src/sources/AM32/eeprom.js b/src/sources/AM32/eeprom.js
index 782c7ba28..3c5b353f1 100644
--- a/src/sources/AM32/eeprom.js
+++ b/src/sources/AM32/eeprom.js
@@ -1,6 +1,7 @@
const BOOT_LOADER_PINS = {
PA2: 0x02,
PB4: 0x14,
+ PA6: 0x06,
};
const RESET_DELAY_MS = 5000;
diff --git a/src/sources/AM32/index.js b/src/sources/AM32/index.js
index dcb1b4807..4479f0d77 100644
--- a/src/sources/AM32/index.js
+++ b/src/sources/AM32/index.js
@@ -7,7 +7,7 @@ import Arm from '../../utils/Hardware/Arm';
import semver from 'semver';
import { fetchJsonCached } from '../../utils/Fetch';
-const GITHUB_REPO = 'AlkaMotors/AM32-MultiRotor-ESC-firmware';
+const GITHUB_REPO = 'am32-firmware/AM32';
class AM32Source extends GithubSource {
minVersion = "1.94";
@@ -40,7 +40,7 @@ class AM32Source extends GithubSource {
const settings = flash.settings;
let revision = 'Unsupported/Unrecognized';
if(settings.MAIN_REVISION !== undefined && settings.SUB_REVISION !== undefined) {
- revision = `${settings.MAIN_REVISION}.${settings.SUB_REVISION}`;
+ revision = `${settings.MAIN_REVISION}.${settings.SUB_REVISION > 9 ? '' : '0'}${settings.SUB_REVISION}`;
}
if(make === 'NOT READY') {
diff --git a/src/sources/Bluejay/__tests__/index.test.js b/src/sources/Bluejay/__tests__/index.test.js
index 195cd5c64..d6f8948c9 100644
--- a/src/sources/Bluejay/__tests__/index.test.js
+++ b/src/sources/Bluejay/__tests__/index.test.js
@@ -243,13 +243,13 @@ describe('Bluejay', () => {
expect(name).toEqual('MAKE - Bluejay, 0.20.0, Dynamic PWM');
});
- it('should return a list of PWM for versions < v0.21.0', () => {
+ it('should return a list of PWM for versions < v0.22.0', () => {
const frequencies = source.getPwm('v0.10.0');
expect(frequencies.length).toEqual(3);
});
- it('should return an empty list for versions >= v0.21.0', () => {
- const frequencies = source.getPwm('v0.21.0');
+ it('should return an empty list for versions >= v0.22.0', () => {
+ const frequencies = source.getPwm('v0.22.0');
expect(frequencies.length).toEqual(0);
});
diff --git a/src/sources/Bluejay/index.js b/src/sources/Bluejay/index.js
index 67b8c1fb9..0220aebd5 100644
--- a/src/sources/Bluejay/index.js
+++ b/src/sources/Bluejay/index.js
@@ -97,9 +97,9 @@ class BluejaySource extends GithubSource {
}
getPwm(version) {
- // Before v0.21.0 PWM was a build time option and should be selectable
+ // Before v0.22.0 PWM was a build time option and should be selectable
// in the firmware selector.
- if(semver.lt(version, '0.21.0')) {
+ if(semver.lt(version, '0.22.0')) {
return [24, 48, 96];
}
diff --git a/src/sources/Bluejay/settings.js b/src/sources/Bluejay/settings.js
index c8d6f0679..883773b2f 100644
--- a/src/sources/Bluejay/settings.js
+++ b/src/sources/Bluejay/settings.js
@@ -429,30 +429,28 @@ COMMON['209'] = {
}],
},
{
- name: 'THRESHOLD_48to24',
+ name: 'THRESHOLD_96to48',
type: 'number',
min: 0,
max: 255,
step: 1,
- displayFactor: 100 / 255,
- label: '48to24Threshold',
+ label: '96to48Threshold',
visibleIf: (settings) => ('PWM_FREQUENCY' in settings) && (parseInt(settings.PWM_FREQUENCY, 10) === 0),
- sanitize: (value, settings) => {
- if(value > settings.THRESHOLD_96to48) {
- return settings.THRESHOLD_96to48;
+ sanitize: (settings) => {
+ if(settings.THRESHOLD_96to48 > settings.THRESHOLD_48to24) {
+ return { THRESHOLD_96to48: settings.THRESHOLD_48to24 };
}
- return value;
+ return {};
},
},
{
- name: 'THRESHOLD_96to48',
+ name: 'THRESHOLD_48to24',
type: 'number',
min: 0,
max: 255,
step: 1,
- displayFactor: 100 / 255,
- label: '96to48Threshold',
+ label: '48to24Threshold',
visibleIf: (settings) => ('PWM_FREQUENCY' in settings) && (parseInt(settings.PWM_FREQUENCY, 10) === 0),
},
],
@@ -608,6 +606,7 @@ DEFAULTS['209'] = { // v0.22
...DEFAULTS['208'],
PWM_FREQUENCY: 24,
STARTUP_MELODY_WAIT_MS: 0,
+ THRESHOLD_96to48: 85,
THRESHOLD_48to24: 170,
};
diff --git a/src/translations/en/common.json b/src/translations/en/common.json
index 81e6923e3..705100603 100644
--- a/src/translations/en/common.json
+++ b/src/translations/en/common.json
@@ -189,7 +189,7 @@
"disabled": "Disabled",
"selectionAttention": "Attention!",
"selectionHint": "When flashing new (or different) ESC firmware it is best practice to adhere to the following checklist:",
- "selectionLi1": "Read the relese notes to understand what changed and what you might need to adjust",
+ "selectionLi1": "Read the release notes to understand what changed and what you might need to adjust",
"selectionLi2": "Make sure your motors spin up reliably on arm and in the correct direction",
"selectionLi3": "Check motor temperatures after a short test flight and adjust tune if they are too hot",
"selectionLinkText": "Show release notes on Github"
diff --git a/src/translations/ru/common.json b/src/translations/ru/common.json
new file mode 100644
index 000000000..458374147
--- /dev/null
+++ b/src/translations/ru/common.json
@@ -0,0 +1,196 @@
+{
+ "port": "Порт",
+ "baudRate": "Скорость передачи данных",
+ "connect": "Подключить",
+ "disconnect": "Отключить",
+ "serialPermission": "Выбрать последовательный порт",
+ "showLog": "Показать журнал отладки",
+ "hideLog": "Скрыть журнал отладки",
+ "note": "Примечание: ",
+ "warning": "Предупреждение: ",
+ "notePropsOff": "Убедитесь, что пропеллеры **СНЯТЫ** перед тем, как делать что-нибудь на этой вкладке.",
+ "noteConnectPower": "Подключите питание к регуляторам оборотов (ESC).",
+ "warningRadio": "Выключите вашу радиоаппаратуру! Иначе при прошивке могут возникать проблемы, особенно в системах \"Все-в-одном\" (AIO).",
+ "commonParameters": "Общие параметры",
+ "unsupportedFirmware": "Неподдерживаемая прошивка",
+ "commonSettingsDisabled": "Общие настройки отключены",
+ "commonSettingsDisabledText": "Общие настройки отключены в параметрах, каждый регулятор оборотов следует настраивать отдельно.",
+ "escProgrammingByTX": "Программирование через передатчик TX",
+ "escLowRPMPowerProtection": "Защита от перегрузки при низких оборотах",
+ "escBrakeOnStop": "Тормозить при остановке",
+ "escStartupPower": "Стартовая мощность",
+ "escTemperatureProtection": "Защита от перегрева",
+ "escDemagCompensation": "Сдвиг фазы магнитного поля относительно ротора (Demag Compensation)",
+ "escMotorTiming": "Частота изменения магнитного поля (Motor Timing)",
+ "escBeaconDelay": "Задержка сигнала тревоги",
+ "escBeepStrength": "Громкость бипера при воспроизведении",
+ "escBeaconStrength": "Громкость сигнала тревоги",
+ "escStartupBeep": "Звуковой сигнал при запуске",
+ "escDithering": "ШИМ дизеринг (внесение шума в сигнал ШИМ для предотвращения ошибок при дискретизации)",
+ "escMotorDirection": "Направление вращения двигателя",
+ "escLedControl": "Настройка светодиода",
+ "escPPMMinThrottle": "PPM минимальной тяги",
+ "escPPMMaxThrottle": "PPM максимальной тяги",
+ "statusbarPortUtilization": "Загруженность порта:",
+ "statusbarPacketError": "Ошибки в пакетах:",
+ "escRampupPower": "Защита от перегрузки при нарастании мощьности",
+ "escMinStartupPower": "Минимальная стартовая мощность (при ускорении)",
+ "escMaxStartupPower": "Максимальная стартовая мощность (защита)",
+ "escButtonFirmwareDump": "Скачать прошивку",
+ "escButtonFlash": "Установить прошивку этот регулятор оборотов (ESC)",
+ "defaultChangelogHead": "Список изменений",
+ "escButtonRead": "Считать настройки",
+ "escButtonFlashAll": "Прошить все регуляторы оборотов",
+ "escButtonSaveLog": "Сохранить журнал отладки",
+ "escButtonClearLog": "Очистить журнал отладки",
+ "escButtonWrite": "Применить настройки",
+ "buttonCancel": "Отмена",
+ "escButtonSelect": "Прошить",
+ "escPowerRading": "Номинальная мощность",
+ "defaultChangelogTitle": "Список изменений",
+ "changelogClose": "Закрыть",
+ "escDampingMode": "Режим демпфирования (Damping) (Дополнительный PWM)",
+ "escBrakingStrength": "Максимальная сила торможения",
+ "escPowerRating": "Номинальная мощность регулятора (ESC)",
+ "homeExperimental": "Это экспериментальное веб-приложение для онлайн настройки и прошивки регулятора оборотов (ESC).",
+ "homeVersionInfo": "Вы всегда мажете найти последнюю стабильную версию прошивки здесь. В настоящее время поддерживается следующие прошивки:",
+ "homeContributionHeader": "Помощь проекту",
+ "homeContributionText": "Если вы хотите помочь сделать ESC конфигуратор еще лучше, вы можете это сделать несколькими способами, например:",
+ "homeContributionItem1": "Отвечать на вопросы других пользователей на форумах",
+ "homeContributionItem2": "Вносить вклад в [програмный код](https://github.com/stylesuxx/esc-configurator) — новые возможности, исправления, улучшения",
+ "homeContributionItem3": "Делать отчеты о выявленных [проблемах](https://github.com/stylesuxx/esc-configurator/issues/new) с подробным описанием",
+ "homeContributionItem4": "Тестировать приложение на вашем оборудовании",
+ "homeContributionItem5": "Помогать с [переводом](http://crowdin.com/project/esc-configuratorcom) интерфейса на ваш язык",
+ "homeDisclaimerHeader": "Отказ от ответственности",
+ "homeDisclaimerTextLine1": "Это веб-приложение поддерживает регуляторы оборотов (ESC) на которых работают BLHeli для Atmel, BLHeli для SiLabs и BLHeli_S.",
+ "homeDisclaimerTextLine2": "**BLHeli FC-подобный интерфейс** является единственным поддерживаемым в настоящее время интерфейсом.",
+ "homeDisclaimerTextLine3": "Если у вас возникнут какие-либо проблемы, обязательно используйте кнопку **Сохранить журнал отладки** и отправьте новую проблему через [GitHub](https://github.com/stylesuxx/esc-configurator/issues/new).",
+ "homeDisclaimerTextLine4": "Исходный код приложения можно скачать [здесь](https://github.com/stylesuxx/esc-configurator).",
+ "homeDisclaimerTextLine5": "Последние версии [драйверов CP210x](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers) можно скачать [здесь](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers).",
+ "homeDisclaimerTextLine6": "Последние версии [драйверов USB VCP STM](https://www.st.com/en/development-tools/stsw-stm32102.html) можно скачать [здесь](https://www.st.com/en/development-tools/stsw-stm32102.html).",
+ "homeWelcome": "Добро пожаловать в **ESC-Конфигуратор** — утилиту, предназначенную для упрощения обновления и настройки Ваших регуляторов оборотов (ESC).",
+ "betaWarningLine1": "**Этот инструмент пока еще находится на стадии BETA-версии.**",
+ "betaWarningLine2": "Возможно, некоторые вещи могут работать не так, как ожидалось. Если вы обнаружите какие-либо ошибки, пожалуйста, [сообщите нам о них](https://github.com/stylesuxx/esc-configurator/issues/new).",
+ "findHelp": "Чтобы узнать об уже известных проблемах некоторых браузеров, посетите [вики](https://github.com/stylesuxx/esc-configurator/wiki/Known-Browser-issues).",
+ "escButtonSelectLocally": "Установить локальную прошивку",
+ "cookieText": "Этот сайт или посторонние инструменты на этом сайте используют файлы cookies, необходимые для его работы и полезные для целей, указанных в политике использования файлов cookie. Принимая, вы соглашаетесь на использование cookie-файлов.",
+ "resetDefaults": "Восстановить настройки по умолчанию",
+ "forceFlashText": "Игнорировать несоответствие микроконтроллера и компоновки?",
+ "forceFlashHint": "(Установка неподходящей прошивки может повредить ваш регулятор, делайте это на свой страх и риск)",
+ "migrateFlashText": "Мигрировать настройки между разными прошивками?",
+ "migrateFlashHint": "(Сделайте это для попытки переноса настройки между разными прошивками, например, из BLHeli_S в Bluejay)",
+ "migrationNote": "Имейте в виду, что настройки не переносятся между разными прошивками, не забудьте указать направление движения моторов и другие параметры, которые вы захотите перенести. Настройки будут перенесены между разными версиями той же прошивки.",
+ "escDirectionReversed": "Обратное направление",
+ "escBidirectionalMode": "Прямое/обратное (3D режим)",
+ "escSelectProtocol": "Выберите протокол регулятора оборотов (ESC)",
+ "escSinusoidalStartup": "Синусоидальный запуск",
+ "escComplementaryPwm": "Дополнительный ШИМ (PWM)",
+ "escVariablePwmFrequency": "Переменная частота ШИМ (PWM)",
+ "escStuckRotorProtection": "Защита от блокировки ротора",
+ "escStallProtection": "Защита от застревания",
+ "escTimingAdvance": "Расширенный тайминг [градусы]",
+ "escPwmFrequency": "Частота ШИМ (PWM) [kHz]",
+ "escPwmFrequencyBluejay": "Частота ШИМ (PWM)",
+ "escForceEdtArm": "Принудительный арминг с функцией EDT (расширенная телеметрия Dshot)",
+ "escRcpulseFilter": "Фильтр RC pulse",
+ "escPwmThresholdLow": "Нижний порог ШИМ (PWM)",
+ "escPwmThresholdHigh": "Высокий порог ШИМ (PWM)",
+ "escMotorKv": "Количество оборотов двигателя на один вольт [Kv]",
+ "escMotorPoles": "Количество полюсов у мотора",
+ "escBeepVolume": "Громкость сигнала",
+ "escIntervalTelemetry": "Вывод телеметрии 30мс",
+ "escServoLowThreshold": "Нижнее пороговое значение сервопривода",
+ "escServoHighThreshold": "Высокое пороговое значение сервопривода",
+ "escServoNeutral": "Нейтральное положение сервопривода",
+ "escServoDeadBand": "Зона нечувствительности датчиков нейтрали сервопривода",
+ "escLowVoltageCutoff": "Отключение при низком напряжении",
+ "escLowVoltageThreshold": "Порог отключения при низком напряжении",
+ "escRcCarReversing": "Задний ход в стиле радиоуправляемого автомобиля",
+ "escHallSensors": "Датчики Хола",
+ "escSineModeRange": "Диапазон синусоидального режима",
+ "escBrakeStrength": "Сила торможения",
+ "am32RunningBrakeLevel": "Уровень торможения при вращении",
+ "am32TemperatureLimit": "Ограничение температуры",
+ "am32CurrentLimit": "Ограничение силы тока [A]",
+ "am32SineModePower": "Мощность в режиме синусоиды",
+ "bluejayTextLine1": "Bluejay — это прошивка, основанная на BLHeli_S и поддерживающая двунаправленный DShot. Поэтому это отличный выбор, если вы хотите использовать RPM-фильтрацию на своем оборудовании. Также этот проект направлен на причесывание и упрощение исходного кода BLHeli_S.",
+ "bluejayTextLine2": "Немаловажной частью проекта является **редактор мелодий**, проигрываемых при включении регуляторов оборотов.",
+ "bluejaySupportedHardwareLine1": "Пожалуйста, найдите время, чтобы помочь нам задокументировать оборудование, которое вы успешно прошили и на котором протестировали Bluejay, добавив его в [Вики](https://github.com/bird-sanctuary/bluejay/wiki/Tested-Hardware).",
+ "bluejaySupportedHardwareLine2": "Хотя Bluejay должна работать на всём железе, совместимом с BLHeli, мы хотели бы иметь список протестированного оборудования для того, чтобы люди могли быть уверены, что Bluejay будет работать правильно с их оборудованием.",
+ "blheli32ToAM32Line1": "Многообещающая прошивка для регуляторов оборотов на базе платформы ARM. Несмотря на то, что платформа ARM относительно новая на рынке, она вызывает большой интерес как со стороны пользователей, так и со стороны производителей. Регуляторы оборотов AM32 скоро будут доступны от разных производителей.",
+ "blheli32ToAM32Line2": "**AM32 можно установить на регуляторы оборотов (ESC) BLHeli_32** Но сначала вы должны установить AM32-загрузчик с помощью [STM32 Cube Programmer](https://www.st.com/en/development-tools/stm32cubeprog.html#get-software) и программатор/отладчик ST Link V2. Необходимый загрузчик можно найти в [репозитории AM32-загрузчика](https://github.com/AlkaMotors/AM32_Bootloader_F051/releases).",
+ "blhelisTextLine1": "Конечно же, BLHeli_S не нуждается в представлении — так как это чрезвычайно популярная прошивка, используемая практически на каждом регуляторе оборотов на базе EFM8 в нашем хобби.",
+ "blhelisTextLine2": "BLHeli_S — проверенная и протестированная прошивка. Она поддерживает все существующие аналоговые и цифровые протоколы.",
+ "whatsNextHeader": "Что еще?",
+ "whatsNextText": "Если вы хотите узнать, какие функции появятся в будущем, загляните в [github репозиторий](https://github.com/stylesuxx/esc-configurator). Также не стесняйтесь делать запросы на добавление новых функций, если у вас есть идеи, которые вы хотите реализовать.",
+ "openPortSelection": "Выбрать порт",
+ "versionUnsupportedLine1": "Версия {{name}} '{{version}}' (Компоновка {{layout}}) пока еще не поддерживается.",
+ "versionUnsupportedLine2": "Сообщите нам, создав пост о [проблеме](https://github.com/stylesuxx/esc-configurator).",
+ "versionUnsupportedLine3": "Устанавливайте прошивку, только если вы полностью осознаёте, что делаете.",
+ "useDedicatedConfigurator": "{{name}} не поддерживается, пожалуйста, используйте имеющийся конфигуратор.",
+ "motorControl": "Управление мотором",
+ "motorControlTextLine1": "Убедитесь, что регуляторы настроены так, чтобы соответствовать состоянию ползунков.",
+ "motorControlTextLine2": "Например: при включении режима 3D в полетном контроллере убедитесь, что регуляторы оборотов также поставлены в режим 3D, иначе моторы могут раскрутиться на полную мощность.",
+ "motorControlTextLine3": "Также имейте в виду, что двигатели не будут вращаться, если у вас включен двунаправленный Dshot на полетном контроллере, но регулятор оборотов (ESC) его не поддерживает. Это может произойти при установке прошивки с включенным RPM на BLHeli_S.",
+ "enableMotorControl": "Включить управление двигателями",
+ "masterSpeed": "Общая скорость",
+ "motorNr": "Двигатель {{index}}",
+ "homeDiscordHeader": "Присоединяйтесь к нашему Discord-каналу!",
+ "homeDiscordText": "Если у вас есть какие-либо вопросы или вам нужна быстрая помощь, присоединяйтесь к нам на нашем сервере Discord:",
+ "homeChinaHeader": "Для наших китайских гостей",
+ "homeChinaText": "Расскажите вашим друзьям за великим китайским брандмауэром, что они могут связаться с нами через местное [зеркало в Китае](https://esc-configurator.pitronic.top).",
+ "melodyEditorHeader": "Редактор мелодии",
+ "melodyEditorWrite": "Записать мелодии",
+ "melodyEditorSave": "Сохранить",
+ "melodyEditorCustom": "Сохранить мелодии",
+ "melodyEditorName": "Сохранить как...",
+ "melodyDelete": "Удалить",
+ "melodyEditorPlay": "Проиграть",
+ "melodyEditorStop": "Остановить",
+ "melodyEditorAccept": "Разрешить",
+ "melodyEditorPlayAll": "Проиграть все",
+ "melodyEditorStopAll": "Остановить все",
+ "melodyPresetsLabel": "Выбрать мелодию",
+ "homeAttributionHeader": "Авторы",
+ "homeAttributionText": "Этот проект был во многом вдохновлен [BLHeli Configurator](https://github.com/blheli-configurator/blheli-configurator). Большая часть пользовательского интерфейса была переписана с нуля, но некоторые низкоуровневые вещи, связанные с прошивкой и ее установкой были использованы в нативном виде, так что большой привет всем, кто участвовал в оригинальном BLHeli Configurator.",
+ "syncMelodies": "Синхронизировать мелодии",
+ "syncMelodiesHint": "Если включено, то эта мелодия будет использоваться на всех регуляторах.",
+ "allEscs": "Все регуляторы оборотов",
+ "escButtonOpenMelodyEditor": "Открыть редактор мелодии",
+ "multiOnly": "В настоящее время поддерживается только режим MULTI",
+ "selectFirmware": "Выберите прошивку",
+ "selectEsc": "Выберите регулятор оборотов",
+ "selectMode": "Выберите Режим",
+ "selectVersion": "Выберите Версию",
+ "selectPwmFrequency": "Выберите частоту ШИМ (PWM)",
+ "selectTarget": "Выберите Цель",
+ "battery": "Батарея:",
+ "settings": "Настройки",
+ "openMelodyEditor": "Открыть редактор мелодии",
+ "addToHomeScreen": "Добавить на домашний экран",
+ "homeInstallLine1": "ESC-Конфигуратор **также можно использовать и в автономном режиме, если установите соответствующий виджет в вашу систему**. В этом случае после установки конфигуратора файлы прошивки будут доступны в автономном режиме.",
+ "homeInstallLine2": "Настройки всегда могут быть изменены в автономном режиме.",
+ "escMissingHeader": "Регулятор отсутствует?",
+ "escMissingText": "Количество доступных регуляторов не совпадает с тем, что сообщает полетный контроллер. Это может быть по нескольким причинам:",
+ "escMissingHint": "Если результат считывания не тот, что вы ожидали, попробуйте нажать повторно **'Прочитать Настройки'**.",
+ "escMissing1": "Регулятор оборотов (ESC) еще не готов. К примеру, это может случится, если сейчас **воспроизводится мелодия**. Также предыдущая прошивка могла быть с ошибкой и поэтому загрузка происходит медленнее, чем обычно.",
+ "escMissing2": "Просто **не осталось подключенных регуляторов.**",
+ "escMissing3": "**Микроконтроллер регулятора оборотов неисправен.**",
+ "escMissing4": "Попробуйте другой USB-кабель — не экранированые должным образом кабели могут приводить к таким ошибкам.",
+ "escMissing5": "Убедитесь, что ваша радиоаппаратура отключена во время работы с конфигуратором. Известны случаи, когда включенный пульт вызывал электромагнитную интерференцию и таким образом негативно влиял на чтение/запись настроек.",
+ "mistaggedLine1": "**Предупреждение:** Кажется, что при установке прошивки на данный момент произошла ошибка!",
+ "mistaggedLine2": "Продолжайте только если вы знаете, что вы делаете. Есть риск перегрева регулятора оборотов, и в худшем случае это может привести к полному разрушению регулятора. Если вы хотите продолжить, советуем прошивать версию с нивысшим временем простоя (dead-time) - вам нужно будет поставить галочку в *\"Игнорировать несоответствие микроконтроллера и компоновки\"?* вверху страницы.",
+ "mistaggedLine3": "Если вы видите это сообщение, пожалуйста, [рассмотрите возможность добавления записи в Wiki](https://github.com/stylesuxx/esc-configurator/wiki/Wrongly-Tagged-AIO's). Это поможет нам задокументировать проблемное оборудование.",
+ "mistaggedLine4": "**Если вы не понимаете рисков, связанных с продолжением, не стесняйтесь, [присоединяйтесь к нам на discord](https://discord.gg/QvSS5dk23C).**",
+ "mistaggedTagged": "Метка",
+ "mistaggedDetected": "Обнаружен",
+ "update": "Доступно обновление! Чтобы загрузить обновление, обновите или перезапустите приложение.",
+ "resettingDevice": "Сбросить устройство...",
+ "disabled": "Отключить",
+ "selectionAttention": "Внимание!",
+ "selectionHint": "При установке новых (или других) прошивок регулятора оборотов (ESC) рекомендуется выполнить следующие действия:",
+ "selectionLi1": "Прочтите примечания к выпуску, чтобы понять, что изменилось и что, возможно, вам потребуется откорректировать",
+ "selectionLi2": "Убедитесь, что при арминге двигатели вращаются надежно и в правильном направлении",
+ "selectionLi3": "Проверьте температуру двигателя после небольшого полета и измените настройки, если он слишком горячий",
+ "selectionLinkText": "Показать примечания к выпуску на Github"
+}
diff --git a/src/translations/ru/groups.json b/src/translations/ru/groups.json
new file mode 100644
index 000000000..a6c1a82ab
--- /dev/null
+++ b/src/translations/ru/groups.json
@@ -0,0 +1,13 @@
+{
+ "general": "",
+ "am32motor": "Спецификации моторов",
+ "am32sine": "Синусоидальные настройки",
+ "am32servo": "Настройки сервы",
+ "am32brake": "Настройки торможения",
+ "am32pwm": "Настройки ШИМ (PWM)",
+ "am32safety": "Настройки безопасности",
+ "bluejaySafety": "Настройки безопасности",
+ "bluejayBrake": "Настройки торможения",
+ "bluejayBeacon": "Настройки сигнала тревоги",
+ "bluejayExperimental": "Экспериментальные настройки"
+}
\ No newline at end of file
diff --git a/src/translations/ru/hints.json b/src/translations/ru/hints.json
new file mode 100644
index 000000000..49e36c18f
--- /dev/null
+++ b/src/translations/ru/hints.json
@@ -0,0 +1,49 @@
+{
+ "STARTUP_BEEP": "Проигрывает мелодию при включении регулятора оборотов (ESC).",
+ "BRAKE_ON_STOP": "Препятствует авторотации при снижении оборотов двигателя.",
+ "BEACON_DELAY": "Время бездействия перед включением сигнала тревоги.",
+ "TEMPERATURE_PROTECTION": "Температура, при которой будет отключаться регулятор оборотов.",
+ "BEEP_STRENGTH": "Громкость звукового сигнала при запуске. Установка высокой громкости может повредить двигатели.",
+ "BEACON_STRENGTH": "Громкость сигнала тревоги. Установка высокой громкости может повредить двигатели.",
+ "STARTUP_POWER_MIN": "Минимальнаяя мощность, применяемая при запуске двигателей. Необходимо увеличить, если двигатели не раскручиваются после арминга.",
+ "DITHERING": "Увеличивает эффективное разрешение ШИМ (PWM) до 2000 шагов. Рекомендуется оставлять включенным при частоте ШИМ выше 24кГц.",
+ "STARTUP_POWER_MAX": "Ограничивает мощность двигателей при запуске или изменении направления оборотов.",
+ "RPM_POWER_SLOPE": "Ограничивает увеличение мощности при ускорении вращения двигателя. Меньшие значения позволят избежать скачков мощности, а также снизят ускорение и максимально-возможную скорость.",
+ "MOTOR_DIRECTION": "Направление вращения двигателя может быть прямым или обратным. В двунаправленном режиме центральное положение тяги соответствует нулевому газу.",
+ "COMMUTATION_TIMING": "Угол опережения коммутации оботок двигателя. Больший тайминг делает регулятор оборотов менее склонным к десинхронизации и может обеспечить больше мощности за счет эффективности.",
+ "DEMAG_COMPENSATION": "Степень уменьшения мощности, для предотвращения остановки двигателя, вызванной продолжительной демагнетизацией после коммутации обмоток двигателя.",
+ "SINUSOIDAL_STARTUP": "В течение первых 10% тяги - двигатель переводится в синусоидальный режим с разомкнутым контуром (без обратной связи).",
+ "COMPLEMENTARY_PWM": "Обеспечивает активное торможение в свзяи с уменьшением силы тока за счет использования нижнего плеча MOSFET-транзисторов.",
+ "VARIABLE_PWM_FREQUENCY": "Увеличивает частоту ШИМ пропорционально оборотам двигателя от 24-48кГц во избежание колебаний тяги.",
+ "STUCK_ROTOR_PROTECTION": "Выключает питание двигателя и прекращает попытки перезапуска после 10 неудачных попыток запуска.",
+ "STALL_PROTECTION": "Автоматическое увеличение тяги при снижении оборотов меньше порогового значения, чтобы избежать остановки мотора. Не рекомендуется для мультикоптеров.",
+ "TIMING_ADVANCE": "Угол опережения коммутации оботок двигателя. Больший тайминг делает регулятор оборотов менее склонным к десинхронизации и может обеспечить больше мощности за счет эффективности.",
+ "MOTOR_KV": "Рейтинг KV мотора, заявленный изготовителем. Это значение используется для установления ограничения оборотов для защиты двигателя при низких оборотах.",
+ "MOTOR_POLES": "Количество полюсов двигателя. Это значение используется для корректировки синусоидальной скорости запуска.",
+ "STARTUP_POWER": "Регулирует мощность, отдаваемую мотору при запуске и минимальном уровне тяги.",
+ "PWM_FREQUENCY": "Когда переменная частота ШИМ выключена, эта опция вручную задает частоту переключения (ШИМ) на выбранный диапазон.",
+ "BEEP_VOLUME": "Уровень громкости звучания двигателя. Высокие значения могут повредить моторы.",
+ "INTERVAL_TELEMETRY": "Вывод данных телеметрии с интервалом 30 мс.",
+ "SERVO_LOW_THRESHOLD": "Любой сигнал ниже этой точки будет считаться нулевой тягой.",
+ "SERVO_HIGH_THRESHOLD": "Любой сигнал выше этой точки будет считаться максимальной тягой.",
+ "SERVO_NEUTRAL": "В двунаправленных режимах это позиция будет считаться нулевой тягой.",
+ "SERVO_DEAD_BAND": "Применяется с обеих сторон от нейтрали сервопривода. Все что в этом диапазоне – будет считаться нулевой тягой.",
+ "LOW_VOLTAGE_CUTOFF": "Если это опция включена, то питание двигателя будет выключаться при падении напряжения ниже порогового значения.",
+ "LOW_VOLTAGE_THRESHOLD": "Уровень напряжений для каждого элемента батареи для ограничения питания. Единица измерения – Вольт * 100. К примеру, чтобы отключить питание при 3.3V, введите значение 330.",
+ "RC_CAR_REVERSING": "Только для наземного транспорта. Переписывает пользовательские настройки и устанавливает регулятор оборотов в двунаправленный режим, двойное нажатие меняет направление на противоположное.",
+ "USE_HALL_SENSORS": "Для регуляторов скорости с датчиками эффекта Холла. Входные данные датчика Холла используются сенсорами двигателей.",
+ "SINE_MODE_RANGE": "Количество тяги в процентах для синусоидального запуска.",
+ "BRAKE_STRENGTH": "Сила торможения, при включенном торможении при остановке.",
+ "BRAKING_STRENGTH": "Максимальное значение торможения, которое применимо (требуется дополнительный цикл ШИМ).",
+ "POWER_RATING": "В зависимости от номинального напряжения вашей платы эта опция должно быть установлена на *1S*, если плата предназначена только для 1S батарей. На всех платах, имеющих номинальное напряжение от 2S и выше (включая 1-2S) или в случае когда для питания микроконтроллера регулятора используется DC/DC преобразователь, эта опция должна быть установлена на *2S+*.",
+ "PWM_THRESHOLD_LOW": "Ниже этого уровня тяги будет использоваться сигнал ШИМ с частотой 96 кГц. Между низким и высоким уровнем тяги будет использоваться сигнал ШИМ с частотой 48 кГц.",
+ "PWM_THRESHOLD_HIGH": "Выше этого уровня будет использована ШИМ с частотой 24кГц.",
+ "FORCE_EDT_ARM": "Армить только после успешношо взаимодействия полетного контролера с EDT (расширенная телеметрия Dshot). Прошивка полетного контроллера должна поддерживать данную функцию.",
+ "ESC_PROTOCOL": "Выберите протокол регулятора, который хотите использовать. Это сделано в целях безопасности, заранее установленный протокол регулятора помогает избежать ошибочного обнаружения сигналов тяги!",
+ "RCPULSE_FILTER": "Значения больше 0 включают фильтр импульсов (RC pulse). Чем больше значение, тем агрессивнее фильтрация. Использовать только для компенсации реально плохих настроек.",
+ "RUNNING_BRAKE_LEVEL": "Объем торможения, используемый при работе двигателя.",
+ "TEMPERATURE_LIMIT": "Значительное снижение максимальной мощности при достижении порога.",
+ "CURRENT_LIMIT": "Удерживать максимально возможные обороты при разрешенном уровне тока.",
+ "SINE_MODE_POWER": "Фиксированный уровень мощности будет задействован в синусоидальном режиме. ОСТОРОЖНО! Значения свыше 6 могут повредить двигатель и регулятор оборотов.",
+ "BIDIRECTIONAL_MODE": "Нейтральная позиция в центре – это нулевая тяга. Смещение выше центральной позиции – вращение в одном направлении, смещение ниже центральной позиции – вращение в другом направлении."
+}
diff --git a/src/translations/ru/log.json b/src/translations/ru/log.json
new file mode 100644
index 000000000..d7deaace0
--- /dev/null
+++ b/src/translations/ru/log.json
@@ -0,0 +1,47 @@
+{
+ "closedPort": "Порт закрыт",
+ "pluggedIn": "Подключено",
+ "unplugged": "Отключено",
+ "portSelected": "Порт выбран",
+ "portChanged": "Порт изменен",
+ "portOpened": "Последовательный порт открыт",
+ "mspApiVersion": "Получена версия API MultiWii: {{version}}",
+ "mspBuildInfo": "Была выпущена рабочая прошивка: {{info}}",
+ "mspBoardInfo": "Плата: {{identifier}}, версия: {{version}}",
+ "mspUid": "Получен уникальный ID устройства - 0x{{id}}",
+ "radioOn": "Ваша радиоаппаратура включена! Чтение и прошивка отключены. Выключите радиоаппаратуру и повторите попытку.",
+ "mspFcInfo": "Информация о полетном контроллере: идентификатор: {{id}} версия: {{version}}",
+ "portUsed": "Порт уже используется другим приложением - попробуйте переподключиться",
+ "fourWayFailed": "Не удалось включить четырехсторонний интерфейс - переподключить полетный контроллер",
+ "readEscs": "Попытка прочитать {{connected}} регулятор оборотов",
+ "readEscsSuccess": "Считывание регулятора оборотов закончено",
+ "readEscsFailed": "Сбой считывания регулятора оборотов",
+ "readEsc": "Считывание с {{index}}: {{name}} регулятора оборотов",
+ "flashingEsc": "Прошивка регулятора оборотов № {{index}}",
+ "flashingEscMissmatchFileNameMissing": "Ошибка при прошивке регулятора оборотов № {{index}} - Имя файла не найдено в файле прошивки, пожалуйста, проверьте версию файла прошивки!",
+ "flashingEscMissmatchMcuType": "Ошибка прошивки ESC {{index}} - Не соответствует типу микроконтроллера, пожалуйста, проверьте ваш файл прошивки!",
+ "flashingEscMissmatchFileName": "Ошибка при прошивке регулятора оборотов № {{index}} - Файл прошивки регулятора отличается от текущей прошивки регулятора!",
+ "flashingEscFailed": "Ошибка при прошивке регулятора оборотов № {{index}} - проверьте тип файла",
+ "fetchingFilesFailed": "Ошибка загрузки файлов для {{name}}",
+ "readEscFailed": "Не удалось прочитать регулятор оборотов № {{index}}",
+ "resetEscFailed": "Не удалось сбросить регулятор оборотов № {{index}}",
+ "resetEscFailedPowerCycle": "Не удалось сбросить регулятор оборотов № {{index}} - отключите/включите питание и повторите попытку",
+ "writeSettingsFailed": "Не удалось записать настройки в регуляторе оборотов № {{index}}",
+ "restoreSettingsFailed": "Не удалось восстановить настройки по умолчанию в регуляторе оборотов № {{index}}",
+ "getFileFailed": "Не удалось получить файл для прошивки.",
+ "layoutNotSupported": "Версия компоновки {{revision}} еще не поддерживается",
+ "escSettingsNoChange": "Нет изменений – обновление для регулятора оборотов № {{index}} не требуется",
+ "escUpdateSuccess": "Обновление регулятора оборотов № {{index}} - завершено",
+ "escLocked": "Регулятор оборотов № {{index}}, кажется, заблокирован ({{codeLockByte}}) - обновление может закончиться ошибкой",
+ "escUpdateFailed": "Обновление регулятора оборотов № {{index}} - закончилось ошибкой",
+ "escSettingsLayoutMismatch": "Несоответствующая компоновка, ручной выбор не активирован - действие отменено",
+ "escSettingsMcuMismatch": "Несоответствующий микроконтроллер, ручной выбор не активирован - действие отменено",
+ "escFlashedInTime": "Идет прошивка регулятора оборотов № {{index}} - {{seconds}} секунд",
+ "passthroughNotSupported": "Сквозная прошивка BLHELI passthrough не поддерживается",
+ "firmwareMismatch": "Несоответствие прошивки! Прошивка: {{flash}} против EEPROM: {{eeprom}}",
+ "bootloaderMismatch": "Несоответствие загрузчика! Прошивка: {{flash}} против EEPROM: {{eeprom}}",
+ "timingMismatch": "Прошивка промаркирована как {{tagged}}, но на самом деле {{actual}}",
+ "browser": "{{name}} ({{version}}) на {{os}}",
+ "dumpingEsc": "Выгружаем прошивку из регулятора оборотов № {{index}}",
+ "flashingVerificationFailed": "Верификация не прошла. Возможно, данные записаны с ошибками"
+}
diff --git a/src/translations/ru/settings.json b/src/translations/ru/settings.json
new file mode 100644
index 000000000..945407090
--- /dev/null
+++ b/src/translations/ru/settings.json
@@ -0,0 +1,18 @@
+{
+ "settingsHeader": "Настройки",
+ "closeText": "Закрыть",
+ "directInput": "Числовой ввод",
+ "directInputHint": "Использовать ввод чисел вместо ползунков.",
+ "printLogs": "Выводить логи",
+ "printLogsHint": "При включении выводить логи в консоль.",
+ "extendedDebug": "Расширенная информация для отладки",
+ "extendedDebugHint": "Дополнительно выводить считываемые/записываемые адреса и отправленную/полученную информацию.",
+ "disableCommon": "Отключить общую настройку ESC",
+ "disableCommonHint": "Каждый регулятор оборотов (ESC) будет иметь свой собственный набор настроек, вместо одного общего раздела для всех ESC.",
+ "enableAdvanced": "Включить расширенные настройки",
+ "enableAdvancedHint": "Добавляет дополнительные настройки, такие как выгрузка прошивки.",
+ "unstableVersions": "Показывать предварительные релизы прошивки",
+ "unstableVersionsHint": "Показывать предварительные релизы и нестабильные версии прошивки",
+ "skipCache": "Не использовать кэш",
+ "skipCacheHint": "Включите этот параметр, если при выборе прошивки не отображается последняя её версия."
+}