Commit 511b8091 authored by longpanda's avatar longpanda
Browse files

Add muli-languages support for Ventoy menu.

F5 ---> Menu Language Select
Language files are in INSTALL/grub/menu/ directory.
parent 3be4aacd
...@@ -21,6 +21,10 @@ fi ...@@ -21,6 +21,10 @@ fi
ls -1 ../INSTALL/grub/help/ | while read line; do ls -1 ../INSTALL/grub/help/ | while read line; do
echo -n ${line:0:5} >> ./www/helplist echo -n ${line:0:5} >> ./www/helplist
done done
[ -f ./www/menulist ] && rm -f ./www/menulist
ls -1 ../INSTALL/grub/menu/ | while read line; do
echo -n ${line:0:5} >> ./www/menulist
done
echo -n "$plugson_verion" > ./www/buildtime echo -n "$plugson_verion" > ./www/buildtime
tar cf www.tar www tar cf www.tar www
......
...@@ -72,6 +72,7 @@ static const char *g_plugin_name[plugin_type_max] = ...@@ -72,6 +72,7 @@ static const char *g_plugin_name[plugin_type_max] =
}; };
static char g_ventoy_help_lang[MAX_LANGUAGE][8]; static char g_ventoy_help_lang[MAX_LANGUAGE][8];
static char g_ventoy_menu_lang[MAX_LANGUAGE][8];
static char g_pub_path[2 * MAX_PATH]; static char g_pub_path[2 * MAX_PATH];
static data_control g_data_control[bios_max + 1]; static data_control g_data_control[bios_max + 1];
...@@ -522,6 +523,7 @@ void ventoy_data_default_control(data_control *data) ...@@ -522,6 +523,7 @@ void ventoy_data_default_control(data_control *data)
strlcpy(data->default_kbd_layout, "QWERTY_USA"); strlcpy(data->default_kbd_layout, "QWERTY_USA");
strlcpy(data->help_text_language, "en_US"); strlcpy(data->help_text_language, "en_US");
strlcpy(data->menu_language, "en_US");
} }
int ventoy_data_cmp_control(data_control *data1, data_control *data2) int ventoy_data_cmp_control(data_control *data1, data_control *data2)
...@@ -551,7 +553,8 @@ int ventoy_data_cmp_control(data_control *data1, data_control *data2) ...@@ -551,7 +553,8 @@ int ventoy_data_cmp_control(data_control *data1, data_control *data2)
if (strcmp(data1->default_search_root, data2->default_search_root) || if (strcmp(data1->default_search_root, data2->default_search_root) ||
strcmp(data1->default_image, data2->default_image) || strcmp(data1->default_image, data2->default_image) ||
strcmp(data1->default_kbd_layout, data2->default_kbd_layout) || strcmp(data1->default_kbd_layout, data2->default_kbd_layout) ||
strcmp(data1->help_text_language, data2->help_text_language)) strcmp(data1->help_text_language, data2->help_text_language) ||
strcmp(data1->menu_language, data2->menu_language))
{ {
return 1; return 1;
} }
...@@ -595,6 +598,7 @@ int ventoy_data_save_control(data_control *data, const char *title, char *buf, i ...@@ -595,6 +598,7 @@ int ventoy_data_save_control(data_control *data, const char *title, char *buf, i
VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_DEFAULT_KBD_LAYOUT", default_kbd_layout); VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_DEFAULT_KBD_LAYOUT", default_kbd_layout);
VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_HELP_TXT_LANGUAGE", help_text_language); VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_HELP_TXT_LANGUAGE", help_text_language);
VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_MENU_LANGUAGE", menu_language);
if (strcmp(def->default_search_root, data->default_search_root)) if (strcmp(def->default_search_root, data->default_search_root))
{ {
...@@ -642,6 +646,7 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen) ...@@ -642,6 +646,7 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen)
VTOY_JSON_FMT_SINT("secondary_menu_timeout", ctrl->secondary_menu_timeout); VTOY_JSON_FMT_SINT("secondary_menu_timeout", ctrl->secondary_menu_timeout);
VTOY_JSON_FMT_STRN("default_kbd_layout", ctrl->default_kbd_layout); VTOY_JSON_FMT_STRN("default_kbd_layout", ctrl->default_kbd_layout);
VTOY_JSON_FMT_STRN("help_text_language", ctrl->help_text_language); VTOY_JSON_FMT_STRN("help_text_language", ctrl->help_text_language);
VTOY_JSON_FMT_STRN("menu_language", ctrl->menu_language);
valid = 0; valid = 0;
if (ctrl->default_search_root[0] && ventoy_is_directory_exist("%s%s", g_cur_dir, ctrl->default_search_root)) if (ctrl->default_search_root[0] && ventoy_is_directory_exist("%s%s", g_cur_dir, ctrl->default_search_root))
...@@ -669,6 +674,14 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen) ...@@ -669,6 +674,14 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen)
} }
VTOY_JSON_FMT_ARY_ENDEX(); VTOY_JSON_FMT_ARY_ENDEX();
VTOY_JSON_FMT_KEY("menu_list");
VTOY_JSON_FMT_ARY_BEGIN();
for (i = 0; g_ventoy_menu_lang[i][0]; i++)
{
VTOY_JSON_FMT_ITEM(g_ventoy_menu_lang[i]);
}
VTOY_JSON_FMT_ARY_ENDEX();
VTOY_JSON_FMT_OBJ_END(); VTOY_JSON_FMT_OBJ_END();
VTOY_JSON_FMT_END(pos); VTOY_JSON_FMT_END(pos);
...@@ -713,6 +726,7 @@ static int ventoy_api_save_control(struct mg_connection *conn, VTOY_JSON *json) ...@@ -713,6 +726,7 @@ static int ventoy_api_save_control(struct mg_connection *conn, VTOY_JSON *json)
VTOY_JSON_STR("default_image", ctrl->default_image); VTOY_JSON_STR("default_image", ctrl->default_image);
VTOY_JSON_STR("default_search_root", ctrl->default_search_root); VTOY_JSON_STR("default_search_root", ctrl->default_search_root);
VTOY_JSON_STR("help_text_language", ctrl->help_text_language); VTOY_JSON_STR("help_text_language", ctrl->help_text_language);
VTOY_JSON_STR("menu_language", ctrl->menu_language);
VTOY_JSON_STR("default_kbd_layout", ctrl->default_kbd_layout); VTOY_JSON_STR("default_kbd_layout", ctrl->default_kbd_layout);
ret = ventoy_data_save_all(); ret = ventoy_data_save_all();
...@@ -4085,6 +4099,17 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p) ...@@ -4085,6 +4099,17 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p)
} }
} }
} }
else if (strcmp(child->pcName, "VTOY_MENU_LANGUAGE") == 0)
{
for (i = 0; g_ventoy_menu_lang[i][0]; i++)
{
if (strcmp(child->unData.pcStrVal, g_ventoy_menu_lang[i]) == 0)
{
strlcpy(data->menu_language, child->unData.pcStrVal);
break;
}
}
}
else if (strcmp(child->pcName, "VTOY_MENU_TIMEOUT") == 0) else if (strcmp(child->pcName, "VTOY_MENU_TIMEOUT") == 0)
{ {
data->menu_timeout = (int)strtol(child->unData.pcStrVal, NULL, 10); data->menu_timeout = (int)strtol(child->unData.pcStrVal, NULL, 10);
...@@ -5326,6 +5351,19 @@ int ventoy_http_init(void) ...@@ -5326,6 +5351,19 @@ int ventoy_http_init(void)
} }
free(Buffer); free(Buffer);
} }
Buffer = NULL;
BufLen = 0;
ventoy_read_file_to_buf("www/menulist", 4, (void **)&Buffer, &BufLen);
if (Buffer)
{
for (i = 0; i < BufLen / 5; i++)
{
memcpy(g_ventoy_menu_lang[i], Buffer + i * 5, 5);
g_ventoy_menu_lang[i][5] = 0;
}
free(Buffer);
}
#else #else
ventoy_file *file; ventoy_file *file;
file = ventoy_tar_find_file("www/helplist"); file = ventoy_tar_find_file("www/helplist");
...@@ -5337,6 +5375,16 @@ int ventoy_http_init(void) ...@@ -5337,6 +5375,16 @@ int ventoy_http_init(void)
g_ventoy_help_lang[i][5] = 0; g_ventoy_help_lang[i][5] = 0;
} }
} }
file = ventoy_tar_find_file("www/menulist");
if (file)
{
for (i = 0; i < file->size / 5; i++)
{
memcpy(g_ventoy_menu_lang[i], (char *)(file->addr) + i * 5, 5);
g_ventoy_menu_lang[i][5] = 0;
}
}
#endif #endif
if (!g_pub_json_buffer) if (!g_pub_json_buffer)
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include <civetweb.h> #include <civetweb.h>
#define MAX_LANGUAGE 128 #define MAX_LANGUAGE 256
#define L1 " " #define L1 " "
#define L2 " " #define L2 " "
...@@ -84,6 +84,7 @@ typedef struct data_control ...@@ -84,6 +84,7 @@ typedef struct data_control
char default_image[MAX_PATH]; char default_image[MAX_PATH];
char default_kbd_layout[32]; char default_kbd_layout[32];
char help_text_language[32]; char help_text_language[32];
char menu_language[32];
}data_control; }data_control;
#define display_mode_gui 0 #define display_mode_gui 0
......
en_USzh_CN
\ No newline at end of file
...@@ -33,6 +33,42 @@ ...@@ -33,6 +33,42 @@
</div> </div>
<div class="box box-primary box-solid">
<div class="box-header with-border">
<h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_MENU_LANGUAGE
<span id="id_span_desc_cn"> —— 菜单语言</span></h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div><!-- /.box-tools -->
</div><!-- /.box-header -->
<div class="box-body no-padding">
<table class="table table-bordered no-padding">
<tr style="font-weight:bold;">
<td class="td_ctrl_col" id="td_title_setting">选项设置</td>
<td>
<select id="id_ctrl_sel_menu_lang" name="name_ctrl_sel_menu_lang" class="form-control">
</select>
</td>
</tr>
<tr id="tr_title_desc_cn">
<td class="td_ctrl_col">选项说明</td>
<td>
Ventoy 菜单的语言版本。默认是 "en_US"。
</td>
</tr>
<tr id="tr_title_desc_en">
<td class="td_ctrl_col">Option Description</td>
<td>
Ventoy menu language. Default is "en_US",
</td>
</tr>
</table>
</div><!-- /.box-body -->
</div><!-- /.box -->
<div class="box box-primary box-solid"> <div class="box box-primary box-solid">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_DEFAULT_SEARCH_ROOT <h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_DEFAULT_SEARCH_ROOT
...@@ -1092,6 +1128,7 @@ ...@@ -1092,6 +1128,7 @@
data.filter_vtoy = parseInt($('input:radio[name=id_ctrl_radio_filt_vtoy]:checked').val()); data.filter_vtoy = parseInt($('input:radio[name=id_ctrl_radio_filt_vtoy]:checked').val());
data.help_text_language = $('select[id=id_ctrl_sel_help_lang').val(); data.help_text_language = $('select[id=id_ctrl_sel_help_lang').val();
data.menu_language = $('select[id=id_ctrl_sel_menu_lang').val();
} }
function VtoyFillCurrentPageItem(data) { function VtoyFillCurrentPageItem(data) {
...@@ -1192,8 +1229,18 @@ ...@@ -1192,8 +1229,18 @@
$('select[id=id_ctrl_sel_help_lang').append(opt); $('select[id=id_ctrl_sel_help_lang').append(opt);
} }
} }
$('select[id=id_ctrl_sel_help_lang').val(data.help_language);
$('select[id=id_ctrl_sel_help_lang').val(data.help_text_language); //VTOY_MENU_LANGUAGE
if ($("select[id=id_ctrl_sel_menu_lang")[0].options.length === 0)
{
for (var i = 0; i < data.menu_list.length; i++) {
var hlang = data.menu_list[i];
var opt = '<option title="'+hlang+'">'+hlang+'</option>';
$('select[id=id_ctrl_sel_menu_lang').append(opt);
}
}
$('select[id=id_ctrl_sel_menu_lang').val(data.menu_language);
} }
function VtoySaveCurrentPage() { function VtoySaveCurrentPage() {
...@@ -1329,6 +1376,7 @@ ...@@ -1329,6 +1376,7 @@
$('select[id=id_ctrl_sel_max_depth]').change(VtoySaveCurrentPage); $('select[id=id_ctrl_sel_max_depth]').change(VtoySaveCurrentPage);
$('select[id=id_ctrl_sel_kbd]').change(VtoySaveCurrentPage); $('select[id=id_ctrl_sel_kbd]').change(VtoySaveCurrentPage);
$('select[id=id_ctrl_sel_help_lang]').change(VtoySaveCurrentPage); $('select[id=id_ctrl_sel_help_lang]').change(VtoySaveCurrentPage);
$('select[id=id_ctrl_sel_menu_lang]').change(VtoySaveCurrentPage);
$('input[id=id_ctrl_text_timeout]').change(function() { $('input[id=id_ctrl_text_timeout]').change(function() {
var value = $('input:text[id=id_ctrl_text_timeout]').val(); var value = $('input:text[id=id_ctrl_text_timeout]').val();
if (/^[0-9][0-9]*$/.test(value)) { if (/^[0-9][0-9]*$/.test(value)) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment