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

Add graphical language configuration option #492

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
904 changes: 493 additions & 411 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_10.c

Large diffs are not rendered by default.

904 changes: 501 additions & 403 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_12.c

Large diffs are not rendered by default.

943 changes: 533 additions & 410 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_14.c

Large diffs are not rendered by default.

967 changes: 557 additions & 410 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_16.c

Large diffs are not rendered by default.

999 changes: 590 additions & 409 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_18.c

Large diffs are not rendered by default.

1,036 changes: 625 additions & 411 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_20.c

Large diffs are not rendered by default.

1,064 changes: 655 additions & 409 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_22.c

Large diffs are not rendered by default.

1,105 changes: 696 additions & 409 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_24.c

Large diffs are not rendered by default.

1,156 changes: 743 additions & 413 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_26.c

Large diffs are not rendered by default.

1,191 changes: 781 additions & 410 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_28.c

Large diffs are not rendered by default.

1,253 changes: 841 additions & 412 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_30.c

Large diffs are not rendered by default.

1,295 changes: 883 additions & 412 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_32.c

Large diffs are not rendered by default.

1,341 changes: 932 additions & 409 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_34.c

Large diffs are not rendered by default.

1,406 changes: 998 additions & 408 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_36.c

Large diffs are not rendered by default.

1,473 changes: 1,060 additions & 413 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_38.c

Large diffs are not rendered by default.

1,536 changes: 1,123 additions & 413 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_40.c

Large diffs are not rendered by default.

1,609 changes: 1,197 additions & 412 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_42.c

Large diffs are not rendered by default.

1,675 changes: 1,264 additions & 411 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_44.c

Large diffs are not rendered by default.

1,746 changes: 1,333 additions & 413 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_46.c

Large diffs are not rendered by default.

1,835 changes: 1,422 additions & 413 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_48.c

Large diffs are not rendered by default.

829 changes: 445 additions & 384 deletions lib/lvgl/lvgl/src/font/lv_font_montserrat_8.c

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions mkapp/app/language/ru_ru.ini
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
; Languages
Simplified Chinese = "Упрощенный китайский"
English = "Английский"
Russian = "Русский"

SD Card = "SD-карта"
Off = "Выкл."
On = "Вкл."
Expand Down Expand Up @@ -242,8 +247,11 @@ Goggle update completed successfully = "Обновление очков заве
Please repower goggle now = "Пожалуйста, перезагрузите очки."
Settings reset = "Сброс настроек"
All settings have been reset = "Все настройки сброшены."
; Set Language = "Set Language"
; Language has been changed = "Language has been changed"
Empty = "Пусто"
Goggle = "Очки"
Language = "Язык"

; focus chart
Focus Chart = "Фокус"
Expand Down
8 changes: 8 additions & 0 deletions mkapp/app/language/zh_hans.ini
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
; Languages
Simplified Chinese = "简体中文"
English = "英语"
Russian = "俄语"

SD Card = "SD卡"
Off = "关"
On = "开"
Expand Down Expand Up @@ -242,8 +247,11 @@ Goggle update completed successfully = "眼镜更新完成"
Please repower goggle now = "现在请重启眼镜"
Settings reset = "重置设置"
All settings have been reset = "所有设置已被重置"
; Set Language = "Set Language"
; Language has been changed = "Language has been changed"
Empty = "无"
Goggle = "眼镜"
Language = "语言"

; focus chart
Focus Chart = "对焦图"
Expand Down
48 changes: 42 additions & 6 deletions src/lang/language.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "core/common.hh"
#include "language.h"
#include "ui/page_common.h"
#include "util/system.h"

#include <assert.h>
#include <stdlib.h>
Expand Down Expand Up @@ -127,21 +128,56 @@ bool language_config() {
int i = 0;

for (i = 0; i < LANG_END; i++) {
bool languageFound = false;

snprintf(buf, sizeof(buf), "/mnt/extsd/%s", language_config_file[i]);
if (access(buf, F_OK) == 0) {
LOGI("%s found", language_config_file[i]);
ini_putl("language", "lang", i, SETTING_INI);
g_setting.language.lang = i;
return true;
languageFound = true;
} else {
to_lowercase(buf);
if (access(buf, F_OK) == 0) {
LOGI("%s found", language_config_file[i]);
ini_putl("language", "lang", i, SETTING_INI);
g_setting.language.lang = i;
languageFound = true;
}
}

to_lowercase(buf);
if (access(buf, F_OK) == 0) {
LOGI("%s found", language_config_file[i]);
ini_putl("language", "lang", i, SETTING_INI);
g_setting.language.lang = i;
if (languageFound) {
char cmd[259];
snprintf(cmd, sizeof(cmd), "rm %s", buf);
system_exec(cmd);
return true;
}
}
return false;
}

/**
* Build a '\n'-separated list of all available languages
*/
char *languageList(char *buffer, size_t len) {
for (size_t i = 0; i < ARRAY_SIZE(languages) && len > 0; i++) {
const char * const currentLanguageName = _lang(languages[i].name);
const size_t nameLength = strlen(currentLanguageName);

if (nameLength >= len) {
char tmp[256];
snprintf(tmp, len, "%s", currentLanguageName);
strcat(buffer, tmp);
len = 0;
} else {
strcat(buffer, currentLanguageName);
len -= nameLength;
if (i < ARRAY_SIZE(languages) - 1 && len > 1) {
strcat(buffer, "\n");
len--;
}
}
}

return buffer;
}
3 changes: 2 additions & 1 deletion src/lang/language.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#include "core/settings.h"

#define TRANSLATE_STRING_NUM 287
#define TRANSLATE_STRING_NUM 291
#define LANG_FOLDER "/mnt/app/language"

typedef enum {
Expand All @@ -21,6 +21,7 @@ typedef struct {
void language_init();
const char *translate_string(const char *str, lang_e lang);
bool language_config();
char *languageList(char *buffer, size_t len);

#define _str(string, lang) translate_string(string, lang)
#define _(string) _str(string, g_setting.language.lang)
Expand Down
59 changes: 59 additions & 0 deletions src/ui/page_version.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ enum {
ROW_UPDATE_VTX,
ROW_UPDATE_GOGGLE,
ROW_UPDATE_ESP32,
ROW_LANGUAGE,
ROW_BACK,

ROW_COUNT
Expand Down Expand Up @@ -84,6 +85,10 @@ static lv_obj_t *alert_img = NULL;
static fw_select_t fw_select_goggle;
static fw_select_t fw_select_vtx;
static fw_select_t *fw_select_current = &fw_select_vtx;
static lv_obj_t *dropdown_lang;
static lv_obj_t *msgbox_language_changed = NULL;

static bool dropdown_lang_is_opened = false;

#define ADDR_AL 0x65
#define ADDR_FPGA 0x64
Expand Down Expand Up @@ -779,6 +784,7 @@ static void page_version_fw_select_create(const char *device, fw_select_t *fw_se
page_version_fw_select_hide(fw_select);
}

char language_options_str[256];
static lv_obj_t *page_version_create(lv_obj_t *parent, panel_arr_t *arr) {
char buf[128];
static char page_name[32];
Expand Down Expand Up @@ -817,6 +823,22 @@ static lv_obj_t *page_version_create(lv_obj_t *parent, panel_arr_t *arr) {
snprintf(buf, sizeof(buf), "%s ESP32", _lang("Update"));
btn_esp = create_label_item(cont, buf, 1, ROW_UPDATE_ESP32, 2);
label_esp = create_label_item(cont, "", 3, ROW_UPDATE_ESP32, 2);

sprintf(buf, "%s", _lang("Language"));
create_label_item(cont, buf, 1, ROW_LANGUAGE, 1);

dropdown_lang = lv_dropdown_create(cont);
lv_dropdown_set_options(dropdown_lang, languageList(language_options_str, 256));
lv_obj_set_style_text_font(dropdown_lang, &lv_font_montserrat_26, 0);
lv_obj_set_size(dropdown_lang, 360, 60);
lv_obj_set_grid_cell(dropdown_lang, LV_GRID_ALIGN_START, 3, 2, LV_GRID_ALIGN_CENTER, ROW_LANGUAGE, 1);

lv_dropdown_set_selected(dropdown_lang, g_setting.language.lang);

lv_obj_t *list = lv_dropdown_get_list(dropdown_lang);
lv_obj_add_style(list, &style_dropdown, LV_PART_MAIN); // The dropdown consists of a button and a list. You need to add a style to the list separately.
lv_obj_set_style_text_color(list, lv_color_make(0, 0, 0), LV_PART_SELECTED | LV_STATE_CHECKED);

snprintf(buf, sizeof(buf), "< %s", _lang("Back"));
create_label_item(cont, buf, 1, ROW_BACK, 1);

Expand Down Expand Up @@ -850,6 +872,12 @@ static lv_obj_t *page_version_create(lv_obj_t *parent, panel_arr_t *arr) {
msgbox_settings_reset = create_msgbox_item(_lang("Settings reset"), buf);
lv_obj_add_flag(msgbox_settings_reset, LV_OBJ_FLAG_HIDDEN);

snprintf(buf, sizeof(buf), "%s.\n%s.",
_lang("Language has been changed"),
_lang("Please repower goggle now"));
msgbox_language_changed = create_msgbox_item(_lang("Set Language"), buf);
lv_obj_add_flag(msgbox_language_changed, LV_OBJ_FLAG_HIDDEN);

msgbox_release_notes = create_msgbox_item(_lang("Release Notes"), _lang("Empty"));
lv_obj_add_flag(msgbox_release_notes, LV_OBJ_FLAG_HIDDEN);

Expand Down Expand Up @@ -980,6 +1008,16 @@ static void page_version_on_roller(uint8_t key) {

version_update_title();

if (dropdown_lang_is_opened) {
if (key == DIAL_KEY_UP) {
uint32_t evt = LV_KEY_DOWN;
lv_event_send(dropdown_lang, LV_EVENT_KEY, &evt);
} else if (key == DIAL_KEY_DOWN) {
uint32_t evt = LV_KEY_UP;
lv_event_send(dropdown_lang, LV_EVENT_KEY, &evt);
}
}

if (reset_all_settings_confirm == CONFIRMATION_CONFIRMED) {
reset_all_settings_reset_label_text();
reset_all_settings_confirm = CONFIRMATION_UNCONFIRMED;
Expand All @@ -991,6 +1029,27 @@ static void page_version_on_click(uint8_t key, int sel) {
FILE *fp;
int dat[16];

if (sel == ROW_LANGUAGE) {
if (dropdown_lang_is_opened) {
lv_event_send(dropdown_lang, LV_EVENT_RELEASED, NULL);
lv_dropdown_close(dropdown_lang);
lv_obj_remove_style(dropdown_lang, &style_dropdown, LV_PART_MAIN);
dropdown_lang_is_opened = false;
pp_version.p_arr.max = ROW_COUNT; // enable roller operation on input_device.c
uint16_t selected = lv_dropdown_get_selected(dropdown_lang);
if (selected != g_setting.language.lang) {
ini_putl("language", "lang", selected, SETTING_INI);
lv_obj_clear_flag(msgbox_language_changed, LV_OBJ_FLAG_HIDDEN);
app_state_push(APP_STATE_USER_INPUT_DISABLED);
}
} else {
lv_dropdown_open(dropdown_lang);
lv_obj_add_style(dropdown_lang, &style_dropdown, LV_PART_MAIN);
dropdown_lang_is_opened = true;
pp_version.p_arr.max = 0; // disable roller operation on input_device.c
}
}

if (!page_version_release_notes_active()) {
version_update_title();
switch (sel) {
Expand Down