Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Russian language #470

Merged
merged 14 commits into from
Feb 17, 2025
Merged
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ media.tar.gz
/tmp
/.vscode/settings.json
.DS_Store
utilities/font/out
utilities/font/out
3,031 changes: 2,368 additions & 663 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_10.c

Large diffs are not rendered by default.

3,448 changes: 2,778 additions & 670 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_12.c

Large diffs are not rendered by default.

3,760 changes: 3,083 additions & 677 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_14.c

Large diffs are not rendered by default.

4,245 changes: 3,559 additions & 686 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_16.c

Large diffs are not rendered by default.

4,633 changes: 3,939 additions & 694 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_18.c

Large diffs are not rendered by default.

5,075 changes: 4,373 additions & 702 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_20.c

Large diffs are not rendered by default.

5,616 changes: 4,905 additions & 711 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_22.c

Large diffs are not rendered by default.

6,217 changes: 5,497 additions & 720 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_24.c

Large diffs are not rendered by default.

6,819 changes: 6,087 additions & 732 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_26.c

Large diffs are not rendered by default.

7,525 changes: 6,786 additions & 739 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_28.c

Large diffs are not rendered by default.

8,268 changes: 7,509 additions & 759 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_30.c

Large diffs are not rendered by default.

9,015 changes: 8,248 additions & 767 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_32.c

Large diffs are not rendered by default.

9,930 changes: 9,151 additions & 779 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_34.c

Large diffs are not rendered by default.

11,003 changes: 10,080 additions & 923 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_36.c

Large diffs are not rendered by default.

11,782 changes: 10,845 additions & 937 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_38.c

Large diffs are not rendered by default.

13,324 changes: 12,378 additions & 946 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_40.c

Large diffs are not rendered by default.

14,313 changes: 13,332 additions & 981 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_42.c

Large diffs are not rendered by default.

15,341 changes: 14,341 additions & 1,000 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_44.c

Large diffs are not rendered by default.

16,491 changes: 15,475 additions & 1,016 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_46.c

Large diffs are not rendered by default.

17,668 changes: 16,627 additions & 1,041 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_48.c

Large diffs are not rendered by default.

2,760 changes: 2,111 additions & 649 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_8.c

Large diffs are not rendered by default.

326 changes: 326 additions & 0 deletions mkapp/app/language/ru_ru.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,326 @@
SD Card = "SD-карта"
Off = "Выкл."
On = "Вкл."
In = "Вход"
Expansion Module = "Модуль расширения"
Integrity check = "Проверка целостности"
Unsupported = "Не поддерживается"
No SD Card = "Нет SD-карты"
Searching = "WiFi: поиск"
RF = "RF"
clip(s) = "Клип(ы)"
full = "Полный"
available = "Доступно"

; scan now
Scan Now = "Сканировать"
Scan Ready = "Сканирование готово"
When scanning is complete, use the = "Когда скан завершится, используйте"
dial to select a channel and press = "колесо для выбора канала и нажмите"
the Enter button to choose = "Enter для выбора"
Scanning = "Сканирование"
Scanning done = "Сканирование завершено"
Scanning ready = "Сканирование готово"

; source
Source = "Источник"
Expansion Module = "Модуль расширения"
Analog Video = "Аналог"
Analog Ratio = "Аналог"
HDZero Band = "Сетка HDZero"
Raceband = "Raceband"
Lowband = "Lowband"
HDZero BW = "HDZero BW"
Wide = "Широкая"
Narrow = "Узкая"
Back = "Назад"
Connected = "Подключен"
Disconnected = "Не подключен"

; image setting
Image Setting = "Изображение"
Brightness = "Яркость"
Saturation = "Насыщенность"
Contrast = "Контраст"
Auto Off = "Авто выкл."
To change image settings, click the Enter button to enter video mode = "Чтобы изменить настройки изображения, нажмите Enter для входа в видеорежим"
Make sure a HDZero VTX or analog VTX is powered on for live video = "Убедитесь, что есть доступный сигнал HDZero или аналога для просмотра"
Never = "Никогда"
min = "Мин."
Reset All = "Cбросить все"

; osd
OSD = "OSD"
Adjust OSD Elements = "Настр. эл-тов OSD"
Orbit = "Орбита"
Mode = "Режим"
Min = "Мин."
Max = "Макс."
At Startup = "При вкл."
Show = "Показать"
Hide = "Скрыть"
Last = "Последн."
Note: The positioning preview will display all OSD elements. Some elements might = "Заметка: Предпросмотр отобразит все элементы OSD. Некоторые элементы могут"
not show during normal operation, depending on input source and conditions = "не отображаться во время нормальной работы, в зависимости от источника и условий"
OSD Element positioning is based on a 1280x720 canvas = "Позиционирование элементов OSD основано на разрешении 1280x720"
Positions can be set for 4x3 and 16x9 modes separately = "Позиции могут быть установлены для режимов 4x3 и 16x9 отдельно"
the Show Element toggle is shared between both modes = "Переключатель отображения элемента общий для обоих режимов"

; power
Power = "Питание"
Battery = "Аккумулятор"
Cell Mode = "Подсч. ячеек"
Manual = "Ручной"
Cell Count = "Количество ячеек"
Warning Cell Voltage = "Порог напр. ячейки"
Voltage Calibration = "Калибровка напр."
Display Mode = "Отображение"
Total = "Общее"
Cell Avg. = "Среднее"
Warning Type = "Предупреждение"
Beep = "Звук"
Visual = "Визуал"
Both = "Оба"
AnalogRX Power = "Аналог"
Auto = "Авто"

; fans
Fans = "Вентиляторы"
Auto Control = "Авто"
Top Fan = "Верхний вентилятор"
Side Fans = "Боковой вентилятор"

; record
Record Option = "Запись"
Record Mode = "Режим записи"
Record Format = "Формат записи"
Record OSD = "Запись OSD"
Record Audio = "Запись аудио"
Audio Source = "Источник аудио"
Naming Scheme = "Названия"
Yes = "Да"
No = "Нет"
Mic = "Микро"
Line In = "Лин. вход"
A/V In = "A/V вход"
Digits = "Цифры"
Date = "Дата"
MP4 format requires properly closing files or the files will be corrupt = "MP4 требует завершения записи, иначе файл может быть поврежден"
TS format is highly recommended = "Рекомендуется использовать TS"

; auto scan
Auto Scan = "Автоскан"
Default = "По умолчанию"
Expansion = "Модуль"
AV In = "AV вход"
HDMI In = "HDMI"
*if Auto Scan is 'Last', goggles will default to show last tuned channel = "*Если автоскан установлен на 'Последний', будет показан последний настроенный канал"

; elrs
ELRS = "ELRS"
Send = "Отправить"
Bind = "Бинд"
Click to start = "Нажмите для начала"
* Press right button to cancel binding = "* Нажмите правую кнопку для отмены бинда"
Starting = "Запуск..."
FAILED = "ОШИБКА"
Success = "Успешно"
Binding = "Бинд..."
Timeout = "Таймаут"
Cancelled = "Отменено"
Backpack = "Backpack"

; wifi module
WiFi Module = "WiFi модуль"
Invalid Too Short = "Слишком коротко"
Invalid Format = "Неверный формат"
Password Requirements = "Требования к паролю"
Minimum 8 characters = "Минимум 8 символов"
maximum 64 characters = "Максимум 64 символа"
Live stream: = "Трансляция:"
Connect to the WiFi network identified above = "Подключитесь к вышеуказанной сети WiFi"
Use VLC Player to open a Network Stream = "Используйте VLC Player просмотра трансляции"
Apply Settings = "Применить настройки"
Enable = "Включить"
Host = "Хост"
Client = "Клиент"
Password = "Пароль"
Address = "Адрес"
Netmask = "Нетмаск"
Gateway = "Шлюз"
RF Channel = "RF канал"
Root PW = "Root pw"
Page = "Страница"
Basic = "Базовая"
Advanced = "Расшир."
System = "Система"
Updating WiFi = "Обновление WiFi"
Click to confirm or Scroll to cancel = "Нажмите для подтверждения или прокрутите для отмены"

; head tracker
Head Tracker = "Трекер головы"
Set Alarm Angle = "Установить сигнальный угол"
Tracking = "Трекинг"
Tilt Alarm = "Пред. наклона"
Alarm = "Предупрежд."
Video = "Видео"
Arm = "Включить"
Calibrate = "Калибровать"
Set Center = "Установить центр"
Max Angle = "Макс. угол"
Pan = "Панорама"
Tilt = "Наклон"
Roll = "Крен"
Calibrating = "Калибровка"
Re-calibrate = "Перекалибровать"
Updating Angle = "Обновление угла"

; playback
Playback = "Воспроизв"
Long press the Enter button to exit = "Долгое нажатие Enter для выхода"
Long press the Func button to delete = "Долгое нажатие Func для удаления"

; storage
Storage = "Хранилище"
Format SD Card = "Форматировать SD-карту"
Repair SD Card = "Восстановить SD-карту"
Clear DVR Folder = "Очистить папку DVR"
Format was successful = "Форматирование прошло успешно"
Format has failed = "Не удалось форматировать"
Press click to exit = "Нажмите для выхода"
Please insert a SD Card = "Пожалуйста, вставьте SD-карту"
Failed to extract results = "Не удалось извлечь результаты"
Failed to access results = "Не удалось получить доступ к результатам"
Failed to generate results = "Не удалось сгенерировать результаты"
Failed to start format = "Не удалось начать форматирование"
Unsupported status code = "Неподдерживаемый код результата"
SD Card Format Status = "Статус форматирования SD-карты"
Filesystem is OK = "Файловая система в порядке"
Filesystem was modified and fixed = "Файловая система была изменена и исправлена"
Failed to remount SD Card = "Не удалось повторно смонтировать SD-карту"
Failed to start repair = "Не удалось начать восстановление"
SD Card Repair Status = "Статус восстановления SD-карты"
Logging = "Логирование"
Self-Test is enabled = "Самопроверка включена"
All storage options are disabled = "Все варианты хранения отключены"
Detected files being accessed by SD Card = "Обнаружены файлы, к которым обращается SD-карта"
Remove the following files from the SD Card and try again = "Удалите следующие файлы с SD-карты и повторите попытку"
Status = "Статус"
None = "Нет"
Formating = "Форматирование"
Repairing = "Восстановление"
Removing = "Удаление"
Done = "Готово"
SD Card integrity check is active = "Идет проверка целостности SD-карты"
controls are disabled until process has completed = "управление отключено до завершения процесса"

; firmware
Firmware = "Прошивка"
Flashing = "Обновление"
SUCCESS = "УСПЕХ"
Verification failed, try it again = "Не удалось проверить, попробуйте еще раз"
No firmware found = "Прошивка не найдена"
Failed, check connection = "Ошибка, проверьте подключение..."
WAIT = "ОЖИДАНИЕ"
DO NOT POWER OFF = "НЕ ВЫКЛЮЧАТЬ"
Multiple versions been found = "Найдено несколько версий"
Keep only one = "Оставьте только одну"
To view release notes = "Для просмотра релизноута"
select either Update VTX or Update Goggle = "выберите обновление VTX или Очков"
then press the Func button to display or hide the release notes = "Потом нажмите кнопку Func для отображения или скрытия релилизноута"
Remove HDZERO_TX or HDZERO_GOGGLE binary files from the root of = "Удалите файлы HDZERO_TX или HDZERO_GOGGLE из корня"
SD Card in order to install the latest online downloaded firmware files = "SD-карты для установки последних загруженных онлайн файлов прошивки"
Visit https://github.com/hdzero for the complete list of changes = "Посетите https://github.com/hdzero для полного списка изменений"
Release Notes = "Релизноут"
not found = "не найдено"
Update = "Обновить"
Target = "Цель"
Current Version = "Текущая версия"
Reset all settings = "Сбросить все настройки"
Update complete = "Обновление завершено"
Goggle update completed successfully = "Обновление очков завершено."
Please repower goggle now = "Пожалуйста, перезагрузите очки."
Settings reset = "Сброс настроек"
All settings have been reset = "Все настройки сброшены."
Empty = "Пусто"
Goggle = "Очки"

; focus chart
Focus Chart = "Фокус"
Click the Enter Button to display the Back Focusing Chart = "Нажмите Enter для отображения фокусной шкалы"
Click the Enter Button again to exit = "Нажмите Enter чтобы выйти"

; clock
Clock = "Время"
Set Clock = "Установить время"
Format = "Формат"
AM = "AM"
PM = "PM"
24 Hour = "24 часа"
Battery not installed or clock not configured = "Батарея не установлена или время не настроено"

; input
Input = "Кнопки"
Roller = "Колесо"
Left short = "Лев. кор"
Left long = "Лев. дл"
Right short = "Прав кор"
Right long = "Прав дл"
Right double = "Прав x2"
Toggle OSD = "Перекл. OSD"
Main menu = "Осн. меню"
Toggle DVR = "Перекл. DVR"
Center HT = "Центр HT"
Calibrate HT = "Калибр. HT"
Toggle fan speed = "Перекл. скор. вент."
Star DVR = "Старт DVR"
Toggle source = "Перекл. источник"
Cycle source = "След. источник"
Switch channel = "Сменить канал"
Change fan speed = "Изменить скор. вент."
OLED Brightness = "Яркость OLED"
Settings apply to video mode only = "Настройки применяются только для видеорежима"
'Toggle source' will switch between HDZero and Expansion module = "'След. источник' переключает между HDZero и модулем расширения"

; go sleep
Go Sleep = "Иди спать"
Go Sleep! = "Иди спать!"
Click the Enter Button to go sleep = "Нажмите Enter, чтобы уйти в спящий режим"
Click any button to exit sleep mode = "Нажмите любую кнопку для выхода"

; ui osd element pos
Top Fan Speed = "Скорость верхнего вентилятора"
Latency Lock = "Фиксированная задержка"
VTX Temp = "Температура VTX"
VRX, Temp = "температура VRX"
Battery Low = "Низкое напряжение батареи"
Battery Voltage = "Напряжение батареи"
Clock Date = "Дата"
Clock Time = "Время"
Channel = "Канал"
DVR = "DVR"
VLQ = "Качество видеосигнала"
Antenna 1 = "Антенна 1"
Antenna 2 = "Антенна 2"
Antenna 3 = "Антенна 3"
Antenna 4 = "Антенна 4"
Goggle Temp Top = "Температура очков, верх"
Goggle Temp Left = "Температура очков, лево"
Goggle Temp Right = "Температура очков, право"
Reset all elements (both modes) = "Сбросить все элементы (оба режима)"
Save changes = "Сохранить изменения"
Cancel = "Отмена"
click to confirm = "Нажмите для подтверждения"
scroll to cancel = "Прокрутите для отмены"
Elements reset = "Сбросить элементы"
Element = "Индикатор"
Pos-X = "Пол. X"
Pos-Y = "Пол. Y"

; ui_keyboard
Highlight Key = "Выделить клавишу"
Select Key = "Выбрать клавишу"
Click = "Клик"
Close Keyboard = "Закрыть клавиатуру"
Hold = "Удержать"
Erase Text = "Очистить текст"
4 changes: 3 additions & 1 deletion src/lang/language.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@ struct Language {
static struct Language languages[] = {
{LANG_ENGLISH_DEFAULT, "en_us", "English", NULL},
{LANG_SIMPLIFIED_CHINESE, "zh_hans", "Simplified Chinese", NULL},
{LANG_RUSSIAN, "ru_ru", "Russian", NULL},
};

const char *language_config_file[] = {
// uppercase
"ENG.TXT",
"CHN.TXT",
"RUS.TXT",
};

struct CallbackPayload {
Expand Down Expand Up @@ -142,4 +144,4 @@ bool language_config() {
}
}
return false;
}
}
1 change: 1 addition & 0 deletions src/lang/language.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
typedef enum {
LANG_ENGLISH_DEFAULT = 0,
LANG_SIMPLIFIED_CHINESE,
LANG_RUSSIAN,
LANG_END,
} lang_e;

Expand Down
2 changes: 1 addition & 1 deletion src/ui/page_imagesettings.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ static slider_group_t slider_group4;
static slider_group_t slider_group5;

static lv_obj_t *page_imagesettings_create(lv_obj_t *parent, panel_arr_t *arr) {
char buf[256];
char buf[288];
lv_obj_t *page = lv_menu_page_create(parent, NULL);
lv_obj_clear_flag(page, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_size(page, 1053, 900);
Expand Down
6 changes: 3 additions & 3 deletions src/ui/page_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ static bool is_any_dropdown_open() {
* Main allocation routine for this page
*/
static lv_obj_t *page_input_create(lv_obj_t *parent, panel_arr_t *arr) {
char buf[128];
char buf[256];
int contentHeight = 0;
for (size_t i = 0; i < (ARRAY_SIZE(row_dsc) - 1); i++) {
contentHeight += row_dsc[i];
Expand Down Expand Up @@ -271,8 +271,8 @@ static lv_obj_t *page_input_create(lv_obj_t *parent, panel_arr_t *arr) {

lv_obj_t *label = lv_label_create(content);
snprintf(buf, sizeof(buf), "*%s\n%s",
_lang("Settings apply to video mode only"),
_lang("'Toggle source' will switch between HDZero and Expansion module"));
_lang("Settings apply to video mode only"),
_lang("'Toggle source' will switch between HDZero and Expansion module"));
lv_label_set_text(label, buf);
lv_obj_set_style_text_font(label, &lv_font_montserrat_16, 0);
lv_obj_set_style_pad_top(label, 12, 0);
Expand Down
Loading