mirror of https://github.com/ventoy/Ventoy.git
Add muli-languages support for Ventoy menu.
F5 ---> Menu Language Select Language files are in INSTALL/grub/menu/ directory.
This commit is contained in:
parent
3be4aacd78
commit
511b8091eb
|
@ -25,6 +25,10 @@
|
|||
#include <grub/i18n.h>
|
||||
#include <grub/normal.h>
|
||||
|
||||
typedef const char * (*get_vmenu_title_pf)(const char *vMenu);
|
||||
static get_vmenu_title_pf g_pfvmenu_title = NULL;
|
||||
|
||||
|
||||
static const struct grub_arg_option options[] =
|
||||
{
|
||||
{"class", 1, GRUB_ARG_OPTION_REPEATABLE,
|
||||
|
@ -86,6 +90,8 @@ grub_normal_add_menu_entry (int argc, const char **args,
|
|||
char *menu_title = NULL;
|
||||
char *menu_sourcecode = NULL;
|
||||
char *menu_id = NULL;
|
||||
const char *vmenu = NULL;
|
||||
const char *vaddr = NULL;
|
||||
struct grub_menu_entry_class *menu_classes = NULL;
|
||||
|
||||
grub_menu_t menu;
|
||||
|
@ -145,7 +151,17 @@ grub_normal_add_menu_entry (int argc, const char **args,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
menu_title = grub_strdup (args[0]);
|
||||
if (!g_pfvmenu_title) {
|
||||
vaddr = grub_env_get("VTOY_VMENU_FUNC_ADDR");
|
||||
if (vaddr)
|
||||
g_pfvmenu_title = (get_vmenu_title_pf)(unsigned long)grub_strtoul(vaddr, NULL, 16);
|
||||
}
|
||||
|
||||
if (g_pfvmenu_title && grub_strncmp(args[0], "@VTMENU_", 8) == 0)
|
||||
vmenu = g_pfvmenu_title(args[0] + 1);
|
||||
|
||||
menu_title = grub_strdup (vmenu ? vmenu : args[0]);
|
||||
|
||||
if (! menu_title)
|
||||
goto fail;
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ extern int g_ventoy_iso_raw;
|
|||
extern int g_ventoy_grub2_mode;
|
||||
extern int g_ventoy_wimboot_mode;
|
||||
extern int g_ventoy_iso_uefi_drv;
|
||||
extern char g_ventoy_hotkey_tip[256];
|
||||
|
||||
static const char *align_options[] =
|
||||
{
|
||||
|
@ -230,10 +231,7 @@ label_set_property (void *vself, const char *name, const char *value)
|
|||
value = g_ventoy_iso_uefi_drv ? grub_env_get("VTOY_ISO_UEFI_DRV_STR") : " ";
|
||||
}
|
||||
else if (grub_strcmp (value, "@VTOY_HOTKEY_TIP@") == 0) {
|
||||
value = grub_env_get("VTOY_HOTKEY_TIP");
|
||||
if (value == NULL) {
|
||||
value = _(" ");
|
||||
}
|
||||
value = g_ventoy_hotkey_tip;
|
||||
}
|
||||
|
||||
self->template = grub_strdup (value);
|
||||
|
|
|
@ -50,6 +50,8 @@ int g_ventoy_menu_esc = 0;
|
|||
int g_ventoy_fn_mutex = 0;
|
||||
int g_ventoy_secondary_menu_on = 0;
|
||||
int g_ventoy_terminal_output = 0;
|
||||
char g_ventoy_hotkey_tip[256];
|
||||
int g_ventoy_virt_esc = 0;
|
||||
|
||||
#define VTOY_COMM_HOTKEY(cmdkey) \
|
||||
if (0 == g_ventoy_fn_mutex && 0 == g_ventoy_secondary_menu_on) { \
|
||||
|
@ -796,7 +798,12 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
|
|||
return default_entry;
|
||||
}
|
||||
|
||||
c = grub_getkey_noblock ();
|
||||
if (g_ventoy_virt_esc > 0) {
|
||||
c = GRUB_TERM_ESC;
|
||||
g_ventoy_virt_esc--;
|
||||
} else {
|
||||
c = grub_getkey_noblock ();
|
||||
}
|
||||
|
||||
/* Negative values are returned on error. */
|
||||
if ((c != GRUB_TERM_NO_KEY) && (c > 0))
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
static grub_uint8_t grub_color_menu_normal;
|
||||
static grub_uint8_t grub_color_menu_highlight;
|
||||
|
||||
extern char g_ventoy_hotkey_tip[256];
|
||||
|
||||
struct menu_viewer_data
|
||||
{
|
||||
int first, offset;
|
||||
|
@ -204,7 +206,7 @@ command-line or ESC to discard edits and return to the GRUB menu."),
|
|||
ret += grub_print_message_indented_real(szLine, STANDARD_MARGIN, STANDARD_MARGIN, term, dry_run);
|
||||
|
||||
ret += grub_print_message_indented_real("\n", STANDARD_MARGIN, STANDARD_MARGIN, term, dry_run);
|
||||
ret += grub_print_message_indented_real(grub_env_get("VTOY_HOTKEY_TIP"),
|
||||
ret += grub_print_message_indented_real(g_ventoy_hotkey_tip,
|
||||
3, 6, term, dry_run);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -616,13 +616,15 @@ grub_err_t ventoy_cmd_browser_disk(grub_extcmd_context_t ctxt, int argc, char **
|
|||
|
||||
if (g_tree_view_menu_style == 0)
|
||||
{
|
||||
browser_ssprintf(&mbuf, "menuentry \"%-10s [Return]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
" echo 'return ...' \n}\n", "<--");
|
||||
browser_ssprintf(&mbuf, "menuentry \"%-10s [%s]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
" echo 'return ...' \n}\n", "<--",
|
||||
ventoy_get_vmenu_title("VTMENU_BROWER_RETURN"));
|
||||
}
|
||||
else
|
||||
{
|
||||
browser_ssprintf(&mbuf, "menuentry \"[Return]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
" echo 'return ...' \n}\n");
|
||||
browser_ssprintf(&mbuf, "menuentry \"[%s]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
" echo 'return ...' \n}\n",
|
||||
ventoy_get_vmenu_title("VTMENU_BROWER_RETURN"));
|
||||
}
|
||||
|
||||
grub_disk_dev_iterate(ventoy_browser_iterate_disk, &mbuf);
|
||||
|
|
|
@ -2346,16 +2346,16 @@ static int ventoy_dynamic_tree_menu(img_iterator_node *node)
|
|||
if (g_tree_view_menu_style == 0)
|
||||
{
|
||||
vtoy_ssprintf(g_tree_script_buf, g_tree_script_pos,
|
||||
"menuentry \"%-10s [Return to ListView]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
"menuentry \"%-10s [%s]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
" echo 'return ...' \n"
|
||||
"}\n", "<--");
|
||||
"}\n", "<--", ventoy_get_vmenu_title("VTMENU_RET_TO_LISTVIEW"));
|
||||
}
|
||||
else
|
||||
{
|
||||
vtoy_ssprintf(g_tree_script_buf, g_tree_script_pos,
|
||||
"menuentry \"[Return to ListView]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
"menuentry \"[%s]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
" echo 'return ...' \n"
|
||||
"}\n");
|
||||
"}\n", ventoy_get_vmenu_title("VTMENU_RET_TO_LISTVIEW"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2934,9 +2934,9 @@ static grub_err_t ventoy_cmd_list_img(grub_extcmd_context_t ctxt, int argc, char
|
|||
if (g_default_menu_mode == 1)
|
||||
{
|
||||
vtoy_ssprintf(g_list_script_buf, g_list_script_pos,
|
||||
"menuentry \"%s [Return to TreeView]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
"menuentry \"%s [%s]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||
" echo 'return ...' \n"
|
||||
"}\n", "<--");
|
||||
"}\n", "<--", ventoy_get_vmenu_title("VTMENU_RET_TO_TREEVIEW"));
|
||||
}
|
||||
|
||||
for (cur = g_ventoy_img_list; cur; cur = cur->next)
|
||||
|
@ -3705,13 +3705,14 @@ static grub_err_t ventoy_cmd_sel_auto_install(grub_extcmd_context_t ctxt, int ar
|
|||
vtoy_ssprintf(buf, pos, "set timeout=%d\n", node->timeout);
|
||||
}
|
||||
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"Boot without auto installation template\" --class=\"sel_auto_install\" {\n"
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"@VTMENU_NO_AUTOINS_SCRIPT\" --class=\"sel_auto_install\" {\n"
|
||||
" echo %s\n}\n", "");
|
||||
|
||||
for (i = 0; i < node->templatenum; i++)
|
||||
{
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"Boot with %s\" --class=\"sel_auto_install\" {\n"
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"%s %s\" --class=\"sel_auto_install\" {\n"
|
||||
" echo \"\"\n}\n",
|
||||
ventoy_get_vmenu_title("VTMENU_AUTOINS_USE"),
|
||||
node->templatepath[i].path);
|
||||
}
|
||||
|
||||
|
@ -3811,13 +3812,14 @@ static grub_err_t ventoy_cmd_sel_persistence(grub_extcmd_context_t ctxt, int arg
|
|||
vtoy_ssprintf(buf, pos, "set timeout=%d\n", node->timeout);
|
||||
}
|
||||
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"Boot without persistence\" --class=\"sel_persistence\" {\n"
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"@VTMENU_NO_PERSISTENCE\" --class=\"sel_persistence\" {\n"
|
||||
" echo %s\n}\n", "");
|
||||
|
||||
for (i = 0; i < node->backendnum; i++)
|
||||
{
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"Boot with %s\" --class=\"sel_persistence\" {\n"
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"%s %s\" --class=\"sel_persistence\" {\n"
|
||||
" echo \"\"\n}\n",
|
||||
ventoy_get_vmenu_title("VTMENU_PERSIST_USE"),
|
||||
node->backendpath[i].path);
|
||||
|
||||
}
|
||||
|
@ -6073,26 +6075,26 @@ static grub_err_t ventoy_cmd_show_secondary_menu(grub_extcmd_context_t ctxt, int
|
|||
|
||||
fsize = grub_strtoull(args[2], NULL, 10);
|
||||
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "Boot in normal mode", "second_normal"); seldata[n++] = 1;
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "@VTMENU_NORMAL_MODE", "second_normal"); seldata[n++] = 1;
|
||||
|
||||
if (grub_strcmp(args[1], "Unix") != 0)
|
||||
{
|
||||
if (grub_strcmp(args[1], "Windows") == 0)
|
||||
{
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "Boot in wimboot mode", "second_wimboot"); seldata[n++] = 2;
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "@VTMENU_WIMBOOT_MODE", "second_wimboot"); seldata[n++] = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "Boot in grub2 mode", "second_grub2"); seldata[n++] = 3;
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "@VTMENU_GRUB2_MODE", "second_grub2"); seldata[n++] = 3;
|
||||
}
|
||||
|
||||
if (fsize <= VTOY_SIZE_1GB)
|
||||
{
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "Boot in memdisk mode", "second_memdisk"); seldata[n++] = 4;
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "@VTMENU_MEMDISK_MODE", "second_memdisk"); seldata[n++] = 4;
|
||||
}
|
||||
}
|
||||
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "File checksum", "second_checksum"); seldata[n++] = 5;
|
||||
vtoy_dummy_menuentry(cmd, pos, len, "@VTMENU_FILE_CHKSUM", "second_checksum"); seldata[n++] = 5;
|
||||
|
||||
do {
|
||||
g_ventoy_menu_esc = 1;
|
||||
|
@ -6175,6 +6177,15 @@ static grub_err_t ventoy_cmd_fs_ignore_case(grub_extcmd_context_t ctxt, int argc
|
|||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_load_menu_lang(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
(void)ctxt;
|
||||
(void)argc;
|
||||
|
||||
ventoy_plugin_load_menu_lang(args[0]);
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
int ventoy_env_init(void)
|
||||
{
|
||||
int i;
|
||||
|
@ -6216,6 +6227,10 @@ int ventoy_env_init(void)
|
|||
grub_snprintf(buf, sizeof(buf), "0x%lx", (ulong)ventoy_chain_file_read);
|
||||
grub_env_set("vtoy_chain_file_read", buf);
|
||||
grub_env_export("vtoy_chain_file_read");
|
||||
|
||||
grub_snprintf(buf, sizeof(buf), "0x%lx", (ulong)ventoy_get_vmenu_title);
|
||||
grub_env_set("VTOY_VMENU_FUNC_ADDR", buf);
|
||||
grub_env_export("VTOY_VMENU_FUNC_ADDR");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -6383,6 +6398,8 @@ static cmd_para ventoy_cmds[] =
|
|||
{ "vt_systemd_menu", ventoy_cmd_linux_systemd_menu, 0, NULL, "", "", NULL },
|
||||
{ "vt_limine_menu", ventoy_cmd_linux_limine_menu, 0, NULL, "", "", NULL },
|
||||
{ "vt_secondary_recover_mode", ventoy_cmd_secondary_recover_mode, 0, NULL, "", "", NULL },
|
||||
{ "vt_load_menu_lang", ventoy_cmd_load_menu_lang, 0, NULL, "", "", NULL },
|
||||
{ "vt_cur_menu_lang", ventoy_cmd_cur_menu_lang, 0, NULL, "", "", NULL },
|
||||
};
|
||||
|
||||
int ventoy_register_all_cmd(void)
|
||||
|
|
|
@ -1053,6 +1053,10 @@ extern int g_ventoy_case_insensitive;
|
|||
extern int g_ventoy_fn_mutex;
|
||||
extern grub_uint8_t g_ventoy_chain_type;
|
||||
extern int g_vhdboot_enable;
|
||||
extern int g_default_menu_mode;
|
||||
extern char g_ventoy_hotkey_tip[256];
|
||||
extern int g_ventoy_menu_refresh;
|
||||
extern int g_ventoy_virt_esc;
|
||||
|
||||
#define VENTOY_IMG_WHITE_LIST 1
|
||||
#define VENTOY_IMG_BLACK_LIST 2
|
||||
|
@ -1258,6 +1262,9 @@ grub_err_t ventoy_cmd_browser_disk(grub_extcmd_context_t ctxt, int argc, char **
|
|||
int ventoy_get_fs_type(const char *fs);
|
||||
int ventoy_img_name_valid(const char *filename, grub_size_t namelen);
|
||||
void * ventoy_alloc_chain(grub_size_t size);
|
||||
int ventoy_plugin_load_menu_lang(const char *lang);
|
||||
const char *ventoy_get_vmenu_title(const char *vMenu);
|
||||
grub_err_t ventoy_cmd_cur_menu_lang(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||
|
||||
#endif /* __VENTOY_DEF_H__ */
|
||||
|
||||
|
|
|
@ -56,12 +56,14 @@ static injection_config *g_injection_head = NULL;
|
|||
static auto_memdisk *g_auto_memdisk_head = NULL;
|
||||
static image_list *g_image_list_head = NULL;
|
||||
static conf_replace *g_conf_replace_head = NULL;
|
||||
static VTOY_JSON *g_menu_lang_json = NULL;
|
||||
|
||||
static int g_theme_id = 0;
|
||||
static int g_theme_num = 0;
|
||||
static theme_list *g_theme_head = NULL;
|
||||
static int g_theme_random = vtoy_theme_random_boot_second;
|
||||
static char g_theme_single_file[256];
|
||||
static char g_cur_menu_language[32] = {0};
|
||||
|
||||
static int ventoy_plugin_is_parent(const char *pat, int patlen, const char *isopath)
|
||||
{
|
||||
|
@ -2446,6 +2448,7 @@ grub_err_t ventoy_cmd_load_plugin(grub_extcmd_context_t ctxt, int argc, char **a
|
|||
int ret = 0;
|
||||
int offset = 0;
|
||||
char *buf = NULL;
|
||||
const char *env = NULL;
|
||||
grub_uint8_t *code = NULL;
|
||||
grub_file_t file;
|
||||
VTOY_JSON *json = NULL;
|
||||
|
@ -2539,6 +2542,9 @@ grub_err_t ventoy_cmd_load_plugin(grub_extcmd_context_t ctxt, int argc, char **a
|
|||
grub_env_unset("VTOY_MENU_TIP_ENABLE");
|
||||
}
|
||||
|
||||
env = grub_env_get("VTOY_MENU_LANGUAGE");
|
||||
ventoy_plugin_load_menu_lang(env ? env : "en_US");
|
||||
|
||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||
}
|
||||
|
||||
|
@ -3369,7 +3375,7 @@ grub_err_t ventoy_cmd_select_theme_cfg(grub_extcmd_context_t ctxt, int argc, cha
|
|||
}
|
||||
|
||||
pos += grub_snprintf(buf + pos, bufsize - pos,
|
||||
"menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {\n"
|
||||
"menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {\n"
|
||||
"echo 'Return ...'\n"
|
||||
"}\n");
|
||||
|
||||
|
@ -3467,3 +3473,87 @@ grub_err_t ventoy_cmd_set_theme_path(grub_extcmd_context_t ctxt, int argc, char
|
|||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||
}
|
||||
|
||||
const char *ventoy_get_vmenu_title(const char *vMenu)
|
||||
{
|
||||
return vtoy_json_get_string_ex(g_menu_lang_json->pstChild, vMenu);
|
||||
}
|
||||
|
||||
int ventoy_plugin_load_menu_lang(const char *lang)
|
||||
{
|
||||
int ret = 1;
|
||||
grub_file_t file = NULL;
|
||||
char *buf = NULL;
|
||||
|
||||
if (grub_strcmp(lang, g_cur_menu_language) == 0)
|
||||
{
|
||||
debug("Same menu lang %s\n", lang);
|
||||
return 0;
|
||||
}
|
||||
grub_snprintf(g_cur_menu_language, sizeof(g_cur_menu_language), "%s", lang);
|
||||
|
||||
debug("Load menu lang %s\n", g_cur_menu_language);
|
||||
|
||||
if (g_menu_lang_json)
|
||||
{
|
||||
vtoy_json_destroy(g_menu_lang_json);
|
||||
g_menu_lang_json = NULL;
|
||||
}
|
||||
|
||||
g_menu_lang_json = vtoy_json_create();
|
||||
if (!g_menu_lang_json)
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
|
||||
file = ventoy_grub_file_open(GRUB_FILE_TYPE_LINUX_INITRD, "(vt_menu_tarfs)/menu/%s.json", lang);
|
||||
if (!file)
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
|
||||
buf = grub_malloc(file->size + 1);
|
||||
if (!buf)
|
||||
{
|
||||
grub_printf("Failed to malloc memory %lu.\n", (ulong)(file->size + 1));
|
||||
goto end;
|
||||
}
|
||||
|
||||
buf[file->size] = 0;
|
||||
grub_file_read(file, buf, file->size);
|
||||
|
||||
vtoy_json_parse(g_menu_lang_json, buf);
|
||||
|
||||
if (g_default_menu_mode == 0)
|
||||
{
|
||||
grub_snprintf(g_ventoy_hotkey_tip, sizeof(g_ventoy_hotkey_tip), "%s", ventoy_get_vmenu_title("VTMENU_STR_HOTKEY_TREE"));
|
||||
}
|
||||
else
|
||||
{
|
||||
grub_snprintf(g_ventoy_hotkey_tip, sizeof(g_ventoy_hotkey_tip), "%s", ventoy_get_vmenu_title("VTMENU_STR_HOTKEY_LIST"));
|
||||
}
|
||||
|
||||
g_ventoy_virt_esc = 2;
|
||||
g_ventoy_menu_refresh = 1;
|
||||
ret = 0;
|
||||
|
||||
end:
|
||||
|
||||
check_free(file, grub_file_close);
|
||||
grub_check_free(buf);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
grub_err_t ventoy_cmd_cur_menu_lang(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
(void)ctxt;
|
||||
(void)argc;
|
||||
(void)args;
|
||||
|
||||
grub_printf("%s\n", g_cur_menu_language);
|
||||
grub_printf("%s\n", g_ventoy_hotkey_tip);
|
||||
grub_refresh();
|
||||
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" ]; then
|
||||
set default=0
|
||||
menuentry "Calculate and check md5sum" --class=checksum_md5 {
|
||||
menuentry "@VTMENU_CHKSUM_MD5_CALC_CHK" --class=checksum_md5 {
|
||||
md5sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" vtReadChecksum
|
||||
|
@ -18,7 +18,7 @@ if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" ]; then
|
|||
read vtInputKey
|
||||
}
|
||||
else
|
||||
menuentry "Calculate md5sum" --class=checksum_md5 {
|
||||
menuentry "@VTMENU_CHKSUM_MD5_CALC" --class=checksum_md5 {
|
||||
md5sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -e "\n\npress ENTER to exit ..."
|
||||
|
@ -28,7 +28,7 @@ fi
|
|||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" ]; then
|
||||
set default=1
|
||||
menuentry "Calculate and check sha1sum" --class=checksum_sha1 {
|
||||
menuentry "@VTMENU_CHKSUM_SHA1_CALC_CHK" --class=checksum_sha1 {
|
||||
sha1sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" vtReadChecksum
|
||||
|
@ -45,7 +45,7 @@ if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" ]; then
|
|||
read vtInputKey
|
||||
}
|
||||
else
|
||||
menuentry "Calculate sha1sum" --class=checksum_sha1 {
|
||||
menuentry "@VTMENU_CHKSUM_SHA1_CALC" --class=checksum_sha1 {
|
||||
sha1sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -e "\n\npress ENTER to exit ..."
|
||||
|
@ -57,7 +57,7 @@ fi
|
|||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" ]; then
|
||||
set default=2
|
||||
menuentry "Calculate and check sha256sum" --class=checksum_sha256 {
|
||||
menuentry "@VTMENU_CHKSUM_SHA256_CALC_CHK" --class=checksum_sha256 {
|
||||
sha256sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" vtReadChecksum
|
||||
|
@ -74,7 +74,7 @@ if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" ]; then
|
|||
read vtInputKey
|
||||
}
|
||||
else
|
||||
menuentry "Calculate sha256sum" --class=checksum_sha256 {
|
||||
menuentry "@VTMENU_CHKSUM_SHA256_CALC" --class=checksum_sha256 {
|
||||
sha256sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -e "\n\npress ENTER to exit ..."
|
||||
|
@ -86,7 +86,7 @@ fi
|
|||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" ]; then
|
||||
set default=3
|
||||
menuentry "Calculate and check sha512sum" --class=checksum_sha512{
|
||||
menuentry "@VTMENU_CHKSUM_SHA512_CALC_CHK" --class=checksum_sha512{
|
||||
sha512sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" vtReadChecksum
|
||||
|
@ -103,7 +103,7 @@ if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" ]; then
|
|||
read vtInputKey
|
||||
}
|
||||
else
|
||||
menuentry "Calculate sha512sum" --class=checksum_sha512{
|
||||
menuentry "@VTMENU_CHKSUM_SHA512_CALC" --class=checksum_sha512{
|
||||
sha512sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -e "\n\npress ENTER to exit ..."
|
||||
|
@ -112,6 +112,6 @@ else
|
|||
fi
|
||||
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
|
||||
source $prefix/menulang.cfg
|
||||
source $prefix/power.cfg
|
||||
source $prefix/hwinfo.cfg
|
||||
source $prefix/keyboard.cfg
|
||||
|
||||
submenu "Resolution Configuration" --class=debug_resolution --class=F5tool {
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
submenu "@VTMENU_RESOLUTION_CFG" --class=debug_resolution --class=F5tool {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
|
||||
|
@ -28,27 +29,27 @@ submenu "Resolution Configuration" --class=debug_resolution --class=F5tool {
|
|||
done
|
||||
}
|
||||
|
||||
submenu "Screen Display Mode" --class=debug_screen_mode --class=F5tool {
|
||||
menuentry 'Force Text Mode' --class=debug_text_mode --class=debug_screen_mode --class=F5tool {
|
||||
submenu "@VTMENU_SCREEN_MODE" --class=debug_screen_mode --class=F5tool {
|
||||
menuentry '@VTMENU_SCREEN_TEXT_MODE' --class=debug_text_mode --class=debug_screen_mode --class=F5tool {
|
||||
terminal_output console
|
||||
}
|
||||
menuentry 'Force Graphics Mode' --class=debug_gui_mode --class=debug_screen_mode --class=F5tool {
|
||||
menuentry '@VTMENU_SCREEN_GUI_MODE' --class=debug_gui_mode --class=debug_screen_mode --class=F5tool {
|
||||
terminal_output gfxterm
|
||||
}
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
|
||||
if [ $VTOY_THEME_COUNT -gt 1 ]; then
|
||||
submenu "Theme Select" --class=debug_theme_select --class=F5tool {
|
||||
if [ -n "$VTOY_THEME_COUNT" -a $VTOY_THEME_COUNT -gt 1 ]; then
|
||||
submenu "@VTMENU_THEME_SELECT" --class=debug_theme_select --class=F5tool {
|
||||
vt_select_theme_cfg
|
||||
}
|
||||
fi
|
||||
|
||||
if [ "$grub_platform" != "pc" ]; then
|
||||
submenu 'Ventoy UEFI Utilities' --class=debug_util --class=F5tool {
|
||||
menuentry 'Show EFI Drivers' --class=debug_util_efidrv --class=debug_util --class=F5tool {
|
||||
menuentry '@VTMENU_UTIL_SHOW_EFI_DRV' --class=debug_util_efidrv --class=debug_util --class=F5tool {
|
||||
vt_push_pager
|
||||
chainloader ${vtoy_path}/vtoyutil_${VTOY_EFI_ARCH}.efi env_param=${env_param} ${vtdebug_flag} feature=show_efi_drivers
|
||||
boot
|
||||
|
@ -57,22 +58,22 @@ if [ "$grub_platform" != "pc" ]; then
|
|||
read vtInputKey
|
||||
}
|
||||
|
||||
menuentry 'Fixup Windows BlinitializeLibrary Failure' --class=debug_util_blinit --class=debug_util --class=F5tool {
|
||||
menuentry '@VTMENU_UTIL_FIX_BLINIT_FAIL' --class=debug_util_blinit --class=debug_util --class=F5tool {
|
||||
chainloader ${vtoy_path}/vtoyutil_${VTOY_EFI_ARCH}.efi env_param=${env_param} ${vtdebug_flag} feature=fix_windows_mmap
|
||||
boot
|
||||
echo -e "\npress ENTER to exit ..."
|
||||
read vtInputKey
|
||||
}
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --class=F5tool {
|
||||
menuentry 'Check global control plugin configuration' --class=debug_control --class=debug_json --class=F5tool {
|
||||
submenu '@VTMENU_JSON_CHK_JSON' --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_CONTROL' --class=debug_control --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path control $vtoy_iso_part
|
||||
|
||||
|
@ -81,7 +82,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check theme plugin configuration' --class=debug_theme --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_THEME' --class=debug_theme --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path theme $vtoy_iso_part
|
||||
|
||||
|
@ -90,7 +91,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check auto install plugin configuration' --class=debug_autoinstall --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_AUTOINS' --class=debug_autoinstall --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path auto_install $vtoy_iso_part
|
||||
|
||||
|
@ -99,7 +100,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check persistence plugin configuration' --class=debug_persistence --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_PERSIST' --class=debug_persistence --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path persistence $vtoy_iso_part
|
||||
|
||||
|
@ -111,7 +112,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check menu alias plugin configuration' --class=debug_menualias --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_MENU_ALIAS' --class=debug_menualias --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path menu_alias $vtoy_iso_part
|
||||
|
||||
|
@ -120,7 +121,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check menu tip plugin configuration' --class=debug_menutip --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_MENU_TIP' --class=debug_menutip --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path menu_tip $vtoy_iso_part
|
||||
|
||||
|
@ -129,7 +130,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check menu class plugin configuration' --class=debug_menuclass --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_MENU_CLASS' --class=debug_menuclass --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path menu_class $vtoy_iso_part
|
||||
|
||||
|
@ -138,7 +139,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check injection plugin configuration' --class=debug_injection --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_INJECTION' --class=debug_injection --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path injection $vtoy_iso_part
|
||||
|
||||
|
@ -147,7 +148,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check auto memdisk plugin configuration' --class=debug_automemdisk --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_AUTO_MEMDISK' --class=debug_automemdisk --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path auto_memdisk $vtoy_iso_part
|
||||
|
||||
|
@ -156,7 +157,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check image list plugin configuration' --class=debug_imagelist --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_IMG_LIST' --class=debug_imagelist --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path image_list $vtoy_iso_part
|
||||
|
||||
|
@ -165,7 +166,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check image blacklist plugin configuration' --class=debug_imageblacklist --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_IMG_BLIST' --class=debug_imageblacklist --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path image_blacklist $vtoy_iso_part
|
||||
|
||||
|
@ -174,7 +175,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check boot conf replace plugin configuration' --class=debug_bootconf_replace --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_CONF_REPLACE' --class=debug_bootconf_replace --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path conf_replace $vtoy_iso_part
|
||||
|
||||
|
@ -183,7 +184,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check dud plugin configuration' --class=debug_dud --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_DUD' --class=debug_dud --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path dud $vtoy_iso_part
|
||||
|
||||
|
@ -192,7 +193,7 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check password plugin configuration' --class=debug_pwd --class=debug_json --class=F5tool {
|
||||
menuentry '@VTMENU_JSON_CHK_PASSWORD' --class=debug_pwd --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path password $vtoy_iso_part
|
||||
|
||||
|
@ -201,21 +202,12 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json --cla
|
|||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check custom boot plugin configuration' --class=debug_custom_boot --class=debug_json --class=F5tool {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path custom_boot $vtoy_iso_part
|
||||
|
||||
echo -e "\npress ENTER to exit ..."
|
||||
read vtInputKey
|
||||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
|
|
|
@ -108,6 +108,11 @@ function ventoy_show_help {
|
|||
fi
|
||||
}
|
||||
|
||||
function ventoy_load_menu_lang_file {
|
||||
vt_load_file_to_mem "auto" $vtoy_efi_part/grub/menu.tar.gz vtoy_menu_lang_mem
|
||||
loopback vt_menu_tarfs mem:${vtoy_menu_lang_mem_addr}:size:${vtoy_menu_lang_mem_size}
|
||||
}
|
||||
|
||||
function get_os_type {
|
||||
set vtoy_os=Linux
|
||||
|
||||
|
@ -2344,7 +2349,7 @@ function img_unsupport_menuentry {
|
|||
#############################################################
|
||||
#############################################################
|
||||
|
||||
set VENTOY_VERSION="1.0.82"
|
||||
set VENTOY_VERSION="1.0.83"
|
||||
|
||||
#ACPI not compatible with Window7/8, so disable by default
|
||||
set VTOY_PARAM_NO_ACPI=1
|
||||
|
@ -2433,6 +2438,9 @@ fi
|
|||
#Load Partition Table
|
||||
vt_load_part_table $vtoydev
|
||||
|
||||
#Load menu lang file
|
||||
ventoy_load_menu_lang_file
|
||||
|
||||
#Load Plugin
|
||||
if [ -f $vtoy_iso_part/ventoy/ventoy.json ]; then
|
||||
clear
|
||||
|
@ -2442,6 +2450,7 @@ else
|
|||
vt_check_json_path_case $vtoy_iso_part
|
||||
fi
|
||||
|
||||
|
||||
if [ -n "$VTOY_MENU_TIMEOUT" ]; then
|
||||
set timeout=$VTOY_MENU_TIMEOUT
|
||||
else
|
||||
|
@ -2463,10 +2472,8 @@ fi
|
|||
|
||||
if [ $VTOY_DEFAULT_MENU_MODE -eq 0 ]; then
|
||||
set VTOY_F3_CMD="vt_dynamic_menu 1 1"
|
||||
set VTOY_HOTKEY_TIP="h:Help F1:Memdisk F2:Browser F3:TreeView F4:Localboot F5:Tools F6:ExMenu"
|
||||
else
|
||||
set VTOY_F3_CMD="vt_dynamic_menu 1 0"
|
||||
set VTOY_HOTKEY_TIP="h:Help F1:Memdisk F2:Browser F3:ListView F4:Localboot F5:Tools F6:ExMenu"
|
||||
fi
|
||||
|
||||
terminal_output console
|
||||
|
@ -2575,7 +2582,6 @@ export VTOY_HELP_CMD
|
|||
export VTOY_CHKSUM_CMD
|
||||
export VTOY_HELP_TXT_LANGUAGE
|
||||
export VTOY_CHKSUM_FILE_PATH
|
||||
export VTOY_HOTKEY_TIP
|
||||
|
||||
|
||||
#colect all image files (iso files)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
menuentry 'Hardware Information' --class=debug_hwinfo --class=F5tool {
|
||||
menuentry '@VTMENU_HWINFO' --class=debug_hwinfo --class=F5tool {
|
||||
smbios -t 4 -s 0x10 --set=cpu_brand
|
||||
|
||||
set system_vendor="-";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
submenu "Keyboard Layouts" --class=debug_krdlayout --class=F5tool {
|
||||
submenu "@VTMENU_KEYBRD_LAYOUT" --class=debug_krdlayout --class=F5tool {
|
||||
menuentry QWERTY_USA --class=debug_kbd --class=debug_krdlayout --class=F5tool {
|
||||
set_keyboard_layout QWERTY_USA
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
if [ "$grub_platform" = "pc" ]; then
|
||||
menuentry 'Search and boot Windows' --class=boot_windows --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_WINDOWS' --class=boot_windows --class=F4boot {
|
||||
|
||||
set partid=3
|
||||
while [ $partid -le 128 ]; do
|
||||
|
@ -38,7 +38,7 @@ if [ "$grub_platform" = "pc" ]; then
|
|||
fi
|
||||
}
|
||||
|
||||
menuentry 'Search and boot Grub4dos' --class=boot_g4d --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_G4D' --class=boot_g4d --class=F4boot {
|
||||
if search -n -s -f /grldr; then
|
||||
ntldr /grldr
|
||||
else
|
||||
|
@ -46,19 +46,19 @@ if [ "$grub_platform" = "pc" ]; then
|
|||
fi
|
||||
}
|
||||
|
||||
menuentry 'Boot the 1st local disk' --class=boot_disk --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_HDD1' --class=boot_disk --class=F4boot {
|
||||
set root=(hd0,1)
|
||||
chainloader +1
|
||||
boot
|
||||
}
|
||||
|
||||
menuentry 'Boot the 2nd local disk' --class=boot_disk --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_HDD2' --class=boot_disk --class=F4boot {
|
||||
set root=(hd1,1)
|
||||
chainloader +1
|
||||
boot
|
||||
}
|
||||
|
||||
menuentry 'Boot the 3rd local disk' --class=boot_disk --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_HDD3' --class=boot_disk --class=F4boot {
|
||||
set root=(hd2,1)
|
||||
chainloader +1
|
||||
boot
|
||||
|
@ -66,7 +66,7 @@ if [ "$grub_platform" = "pc" ]; then
|
|||
|
||||
else
|
||||
|
||||
menuentry 'Search and boot Windows' --class=boot_windows --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_WINDOWS' --class=boot_windows --class=F4boot {
|
||||
|
||||
set partid=3
|
||||
while [ $partid -le 128 ]; do
|
||||
|
@ -102,7 +102,7 @@ else
|
|||
}
|
||||
|
||||
if [ "$grub_cpu" = "i386" ]; then
|
||||
menuentry 'Search and boot BOOTIA32.EFI' --class=boot_uefi --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_IA32EFI' --class=boot_uefi --class=F4boot {
|
||||
set VTOY_SEARCH_NO_VTOYEFI=1
|
||||
if search -n -s -f /efi/boot/bootia32.efi; then
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
|
@ -115,7 +115,7 @@ else
|
|||
fi
|
||||
}
|
||||
|
||||
menuentry 'Search and boot xorboot' --class=boot_xorboot --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_XORBOOT' --class=boot_xorboot --class=F4boot {
|
||||
set VTOY_SEARCH_NO_VTOYEFI=1
|
||||
if search -n -s -f /efi/xorboot/xorboot32.xor; then
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
|
@ -132,7 +132,7 @@ else
|
|||
fi
|
||||
}
|
||||
elif [ "$grub_cpu" = "arm64" ]; then
|
||||
menuentry 'Search and boot BOOTAA64.EFI' --class=boot_uefi --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_AA64EFI' --class=boot_uefi --class=F4boot {
|
||||
set VTOY_SEARCH_NO_VTOYEFI=1
|
||||
if search -n -s -f /efi/boot/bootaa64.efi; then
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
|
@ -145,7 +145,7 @@ else
|
|||
fi
|
||||
}
|
||||
else
|
||||
menuentry 'Search and boot BOOTX64.EFI' --class=boot_uefi --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_X64EFI' --class=boot_uefi --class=F4boot {
|
||||
set VTOY_SEARCH_NO_VTOYEFI=1
|
||||
if search -n -s -f /efi/boot/bootx64.efi; then
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
|
@ -158,7 +158,7 @@ else
|
|||
fi
|
||||
}
|
||||
|
||||
menuentry 'Search and boot xorboot' --class=boot_xorboot --class=F4boot {
|
||||
menuentry '@VTMENU_LB_SBOOT_XORBOOT' --class=boot_xorboot --class=F4boot {
|
||||
set VTOY_SEARCH_NO_VTOYEFI=1
|
||||
if search -n -s -f /efi/xorboot/xorboot.xor; then
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
|
@ -179,6 +179,6 @@ else
|
|||
|
||||
fi
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
"VTMENU_LANGUAGE_NAME": "en_US (English)",
|
||||
|
||||
"VTMENU_STR_HOTKEY_LIST": "h:Help F1:Memdisk F2:Browser F3:ListView F4:Localboot F5:Tools F6:ExMenu",
|
||||
"VTMENU_STR_HOTKEY_TREE": "h:Help F1:Memdisk F2:Browser F3:TreeView F4:Localboot F5:Tools F6:ExMenu",
|
||||
"VTMENU_RETURN_PREVIOUS": "Return to previous menu [Esc]",
|
||||
|
||||
"VTMENU_MENU_LANG": "Menu Language Select",
|
||||
|
||||
"VTMENU_LB_SBOOT_WINDOWS": "Search and boot Windows",
|
||||
"VTMENU_LB_SBOOT_G4D": "Search and boot Grub4dos",
|
||||
"VTMENU_LB_SBOOT_HDD1": "Boot the 1st local disk",
|
||||
"VTMENU_LB_SBOOT_HDD2": "Boot the 2nd local disk",
|
||||
"VTMENU_LB_SBOOT_HDD3": "Boot the 3rd local disk",
|
||||
"VTMENU_LB_SBOOT_X64EFI": "Search and boot BOOTX64.EFI",
|
||||
"VTMENU_LB_SBOOT_IA32EFI": "Search and boot BOOTIA32.EFI",
|
||||
"VTMENU_LB_SBOOT_AA64EFI": "Search and boot BOOTAA64.EFI",
|
||||
"VTMENU_LB_SBOOT_XORBOOT": "Search and boot xorboot",
|
||||
|
||||
"VTMENU_FILE_CHKSUM": "File checksum",
|
||||
"VTMENU_CHKSUM_MD5_CALC": "Calculate md5sum",
|
||||
"VTMENU_CHKSUM_SHA1_CALC": "Calculate sha1sum",
|
||||
"VTMENU_CHKSUM_SHA256_CALC": "Calculate sha256sum",
|
||||
"VTMENU_CHKSUM_SHA512_CALC": "Calculate sha512sum",
|
||||
"VTMENU_CHKSUM_MD5_CALC_CHK": "Calculate and check md5sum",
|
||||
"VTMENU_CHKSUM_SHA1_CALC_CHK": "Calculate and check sha1sum",
|
||||
"VTMENU_CHKSUM_SHA256_CALC_CHK": "Calculate and check sha256sum",
|
||||
"VTMENU_CHKSUM_SHA512_CALC_CHK": "Calculate and check sha512sum",
|
||||
|
||||
"VTMENU_POWER": "Power",
|
||||
"VTMENU_POWER_REBOOT": "Reboot",
|
||||
"VTMENU_POWER_HALT": "Halt",
|
||||
"VTMENU_POWER_BOOT_EFIFW": "Reboot to EFI setup",
|
||||
|
||||
"VTMENU_KEYBRD_LAYOUT": "Keyboard Layouts",
|
||||
"VTMENU_HWINFO": "Hardware Information",
|
||||
|
||||
"VTMENU_RESOLUTION_CFG": "Resolution Configuration",
|
||||
"VTMENU_SCREEN_MODE": "Screen Display Mode",
|
||||
"VTMENU_SCREEN_TEXT_MODE": "Force Text Mode",
|
||||
"VTMENU_SCREEN_GUI_MODE": "Force Graphics Mode",
|
||||
|
||||
"VTMENU_THEME_SELECT": "Theme Select",
|
||||
|
||||
"VTMENU_UTIL_SHOW_EFI_DRV": "Show EFI Drivers",
|
||||
"VTMENU_UTIL_FIX_BLINIT_FAIL": "Fixup Windows BlinitializeLibrary Failure",
|
||||
|
||||
"VTMENU_JSON_CHK_JSON": "Check plugin json configuration (ventoy.json)",
|
||||
"VTMENU_JSON_CHK_CONTROL": "Check global control plugin configuration",
|
||||
"VTMENU_JSON_CHK_THEME": "Check theme plugin configuration",
|
||||
"VTMENU_JSON_CHK_AUTOINS": "Check auto install plugin configuration",
|
||||
"VTMENU_JSON_CHK_PERSIST": "Check persistence plugin configuration",
|
||||
"VTMENU_JSON_CHK_MENU_ALIAS": "Check menu alias plugin configuration",
|
||||
"VTMENU_JSON_CHK_MENU_TIP": "Check menu tip plugin configuration",
|
||||
"VTMENU_JSON_CHK_MENU_CLASS": "Check menu class plugin configuration",
|
||||
"VTMENU_JSON_CHK_INJECTION": "Check injection plugin configuration",
|
||||
"VTMENU_JSON_CHK_AUTO_MEMDISK": "Check auto memdisk plugin configuration",
|
||||
"VTMENU_JSON_CHK_IMG_LIST": "Check image list plugin configuration",
|
||||
"VTMENU_JSON_CHK_IMG_BLIST": "Check image blacklist plugin configuration",
|
||||
"VTMENU_JSON_CHK_CONF_REPLACE": "Check boot conf replace plugin configuration",
|
||||
"VTMENU_JSON_CHK_DUD": "Check dud plugin configuration",
|
||||
"VTMENU_JSON_CHK_PASSWORD": "Check password plugin configuration",
|
||||
|
||||
"VTMENU_NORMAL_MODE": "Boot in normal mode",
|
||||
"VTMENU_WIMBOOT_MODE": "Boot in wimboot mode",
|
||||
"VTMENU_GRUB2_MODE": "Boot in grub2 mode",
|
||||
"VTMENU_MEMDISK_MODE": "Boot in memdisk mode",
|
||||
|
||||
"VTMENU_RET_TO_LISTVIEW": "Return to ListView",
|
||||
"VTMENU_RET_TO_TREEVIEW": "Return to TreeView",
|
||||
|
||||
"VTMENU_NO_AUTOINS_SCRIPT": "Boot without auto installation template",
|
||||
"VTMENU_AUTOINS_USE": "Boot with",
|
||||
|
||||
"VTMENU_NO_PERSIST": "Boot without persistence",
|
||||
"VTMENU_PERSIST_USE": "Boot with",
|
||||
|
||||
"VTMENU_BROWER_RETURN": "Return",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
"VTMENU_LANGUAGE_NAME": "zh_CN (简体中文)",
|
||||
|
||||
"VTMENU_STR_HOTKEY_LIST": "h:帮助 F1:内存模式 F2:本地浏览 F3:列表模式 F4:本地启动 F5:工具 F6:扩展菜单",
|
||||
"VTMENU_STR_HOTKEY_TREE": "h:帮助 F1:内存模式 F2:本地浏览 F3:树形模式 F4:本地启动 F5:工具 F6:扩展菜单",
|
||||
"VTMENU_RETURN_PREVIOUS": "返回上一级菜单 [Esc]",
|
||||
|
||||
"VTMENU_MENU_LANG": "菜单语言",
|
||||
|
||||
"VTMENU_LB_SBOOT_WINDOWS": "搜索并启动 Windows",
|
||||
"VTMENU_LB_SBOOT_G4D": "搜索并启动 Grub4dos",
|
||||
"VTMENU_LB_SBOOT_HDD1": "启动本地硬盘1中的系统",
|
||||
"VTMENU_LB_SBOOT_HDD2": "启动本地硬盘2中的系统",
|
||||
"VTMENU_LB_SBOOT_HDD3": "启动本地硬盘3中的系统",
|
||||
"VTMENU_LB_SBOOT_X64EFI": "搜索并启动 BOOTX64.EFI",
|
||||
"VTMENU_LB_SBOOT_IA32EFI": "搜索并启动 BOOTIA32.EFI",
|
||||
"VTMENU_LB_SBOOT_AA64EFI": "搜索并启动 BOOTAA64.EFI",
|
||||
"VTMENU_LB_SBOOT_XORBOOT": "搜索并启动 xorboot",
|
||||
|
||||
"VTMENU_FILE_CHKSUM": "文件校验",
|
||||
"VTMENU_CHKSUM_MD5_CALC": "计算 MD5 校验值",
|
||||
"VTMENU_CHKSUM_SHA1_CALC": "计算 SHA1 校验值",
|
||||
"VTMENU_CHKSUM_SHA256_CALC": "计算 SHA256 校验值",
|
||||
"VTMENU_CHKSUM_SHA512_CALC": "计算 SHA512 校验值",
|
||||
"VTMENU_CHKSUM_MD5_CALC_CHK": "计算并检查 MD5 校验值",
|
||||
"VTMENU_CHKSUM_SHA1_CALC_CHK": "计算并检查 SHA1 校验值",
|
||||
"VTMENU_CHKSUM_SHA256_CALC_CHK": "计算并检查 SHA256 校验值",
|
||||
"VTMENU_CHKSUM_SHA512_CALC_CHK": "计算并检查 SHA512 校验值",
|
||||
|
||||
"VTMENU_POWER": "电源",
|
||||
"VTMENU_POWER_REBOOT": "重启",
|
||||
"VTMENU_POWER_HALT": "关机",
|
||||
"VTMENU_POWER_BOOT_EFIFW": "重启进入 UEFI 设置菜单",
|
||||
|
||||
"VTMENU_KEYBRD_LAYOUT": "键盘布局",
|
||||
"VTMENU_HWINFO": "硬件信息",
|
||||
|
||||
"VTMENU_RESOLUTION_CFG": "屏幕分辨率",
|
||||
"VTMENU_SCREEN_MODE": "显示模式",
|
||||
"VTMENU_SCREEN_TEXT_MODE": "文本模式",
|
||||
"VTMENU_SCREEN_GUI_MODE": "图形模式",
|
||||
|
||||
"VTMENU_THEME_SELECT": "主题选择",
|
||||
|
||||
"VTMENU_UTIL_SHOW_EFI_DRV": "显示 UEFI 驱动",
|
||||
"VTMENU_UTIL_FIX_BLINIT_FAIL": "修复 Windows BlinitializeLibrary 错误",
|
||||
|
||||
"VTMENU_JSON_CHK_JSON": "检查插件配置文件 (ventoy.json)",
|
||||
"VTMENU_JSON_CHK_CONTROL": "配置检查 —— 全局控制插件",
|
||||
"VTMENU_JSON_CHK_THEME": "配置检查 —— 主题插件",
|
||||
"VTMENU_JSON_CHK_AUTOINS": "配置检查 —— 自动安装插件",
|
||||
"VTMENU_JSON_CHK_PERSIST": "配置检查 —— 持久化插件",
|
||||
"VTMENU_JSON_CHK_MENU_ALIAS": "配置检查 —— 菜单别名插件",
|
||||
"VTMENU_JSON_CHK_MENU_TIP": "配置检查 —— 菜单提示插件",
|
||||
"VTMENU_JSON_CHK_MENU_CLASS": "配置检查 —— 菜单类型插件",
|
||||
"VTMENU_JSON_CHK_INJECTION": "配置检查 —— 文件注入插件",
|
||||
"VTMENU_JSON_CHK_AUTO_MEMDISK": "配置检查 —— 自动内存盘模式插件",
|
||||
"VTMENU_JSON_CHK_IMG_LIST": "配置检查 —— 文件列表插件(白名单)",
|
||||
"VTMENU_JSON_CHK_IMG_BLIST": "配置检查 —— 文件列表插件(黑名单)",
|
||||
"VTMENU_JSON_CHK_CONF_REPLACE": "配置检查 —— 启动配置替换插件",
|
||||
"VTMENU_JSON_CHK_DUD": "配置检查 —— Driver Update Disk插件",
|
||||
"VTMENU_JSON_CHK_PASSWORD": "配置检查 —— 密码插件",
|
||||
|
||||
"VTMENU_NORMAL_MODE": "以正常模式启动",
|
||||
"VTMENU_WIMBOOT_MODE": "以 wimboot 模式启动",
|
||||
"VTMENU_GRUB2_MODE": "以 grub2 模式启动",
|
||||
"VTMENU_MEMDISK_MODE": "以内存盘模式启动",
|
||||
|
||||
"VTMENU_RET_TO_LISTVIEW": "返回到列表模式",
|
||||
"VTMENU_RET_TO_TREEVIEW": "返回到树形模式",
|
||||
|
||||
"VTMENU_NO_AUTOINS_SCRIPT": "不使用自动安装脚本",
|
||||
"VTMENU_AUTOINS_USE": "使用",
|
||||
|
||||
"VTMENU_NO_PERSIST": "不使用持久化数据文件",
|
||||
"VTMENU_PERSIST_USE": "使用",
|
||||
|
||||
"VTMENU_BROWER_RETURN": "返回",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
submenu "@VTMENU_MENU_LANG" --class=debug_menu_lang --class=F5tool {
|
||||
#ventoy_pack.sh will generate menuentry here
|
||||
|
|
@ -1,25 +1,25 @@
|
|||
submenu "Power" --class=debug_power --class=F5tool {
|
||||
menuentry Reboot --class=debug_reboot --class=debug_power --class=F5tool {
|
||||
submenu "@VTMENU_POWER" --class=debug_power --class=F5tool {
|
||||
menuentry "@VTMENU_POWER_REBOOT" --class=debug_reboot --class=debug_power --class=F5tool {
|
||||
echo -e '\n\nSystem is rebooting ... \n'
|
||||
sleep 1
|
||||
reboot
|
||||
}
|
||||
|
||||
menuentry Halt --class=debug_halt --class=debug_power --class=F5tool {
|
||||
menuentry "@VTMENU_POWER_HALT" --class=debug_halt --class=debug_power --class=F5tool {
|
||||
echo -e '\n\nSystem is halting ... \n'
|
||||
sleep 1
|
||||
halt
|
||||
}
|
||||
|
||||
if [ "$grub_platform" != "pc" ]; then
|
||||
menuentry 'Reboot to EFI setup' --class=debug_efisetup --class=debug_power --class=F5tool {
|
||||
menuentry '@VTMENU_POWER_BOOT_EFIFW' --class=debug_efisetup --class=debug_power --class=F5tool {
|
||||
echo -e '\n\nRebooting to enter UEFI firmware setup ... \n'
|
||||
sleep 1
|
||||
fwsetup
|
||||
}
|
||||
fi
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -88,6 +88,26 @@ tar czf help.tar.gz ./help/
|
|||
rm -rf ./help
|
||||
cd ../../
|
||||
|
||||
#tar menu txt & update menulang.cfg
|
||||
cd $tmpmnt/grub/
|
||||
|
||||
for vtlang in $(ls menu/); do
|
||||
vtlangname=${vtlang%.*}
|
||||
vtlangtitle=$(grep VTMENU_LANGUAGE_NAME menu/$vtlang | awk -F\" '{print $4}')
|
||||
echo "menuentry \"$vtlangtitle\" --class=menu_lang_item --class=debug_menu_lang --class=F5tool {" >> menulang.cfg
|
||||
echo " vt_load_menu_lang $vtlangname" >> menulang.cfg
|
||||
echo "}" >> menulang.cfg
|
||||
done
|
||||
echo "menuentry '@VTMENU_RETURN_PREVIOUS' --class=vtoyret VTOY_RET {" >> menulang.cfg
|
||||
echo " echo 'Return ...'" >> menulang.cfg
|
||||
echo "}" >> menulang.cfg
|
||||
echo "}" >> menulang.cfg
|
||||
|
||||
tar czf menu.tar.gz ./menu/
|
||||
rm -rf ./menu
|
||||
cd ../../
|
||||
|
||||
|
||||
|
||||
cp $OPT ./ventoy $tmpmnt/
|
||||
cp $OPT ./EFI $tmpmnt/
|
||||
|
|
|
@ -8,10 +8,23 @@ fi
|
|||
|
||||
gcc -DFOR_VTOY_JSON_CHECK $VTOY_PATH/Ventoy2Disk/Ventoy2Disk/VentoyJson.c -I $VTOY_PATH/Ventoy2Disk/Ventoy2Disk/ -o checkjson
|
||||
|
||||
RET=0
|
||||
|
||||
./checkjson $VTOY_PATH/LANGUAGES/languages.json
|
||||
ret=$?
|
||||
if [ $ret -eq 0 ]; then
|
||||
for i in $(ls $VTOY_PATH/INSTALL/grub/menu); do
|
||||
./checkjson $VTOY_PATH/INSTALL/grub/menu/$i
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
echo "INSTALL/grub/menu/$i invalid json format"
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "languages.json invalid json format"
|
||||
fi
|
||||
|
||||
rm -f ./checkjson
|
||||
[ $ret -eq 0 ]
|
||||
|
||||
|
||||
|
|
|
@ -21,6 +21,10 @@ fi
|
|||
ls -1 ../INSTALL/grub/help/ | while read line; do
|
||||
echo -n ${line:0:5} >> ./www/helplist
|
||||
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
|
||||
|
||||
tar cf www.tar www
|
||||
|
|
|
@ -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_menu_lang[MAX_LANGUAGE][8];
|
||||
|
||||
static char g_pub_path[2 * MAX_PATH];
|
||||
static data_control g_data_control[bios_max + 1];
|
||||
|
@ -522,6 +523,7 @@ void ventoy_data_default_control(data_control *data)
|
|||
|
||||
strlcpy(data->default_kbd_layout, "QWERTY_USA");
|
||||
strlcpy(data->help_text_language, "en_US");
|
||||
strlcpy(data->menu_language, "en_US");
|
||||
}
|
||||
|
||||
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) ||
|
||||
strcmp(data1->default_image, data2->default_image) ||
|
||||
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;
|
||||
}
|
||||
|
@ -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_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))
|
||||
{
|
||||
|
@ -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_STRN("default_kbd_layout", ctrl->default_kbd_layout);
|
||||
VTOY_JSON_FMT_STRN("help_text_language", ctrl->help_text_language);
|
||||
VTOY_JSON_FMT_STRN("menu_language", ctrl->menu_language);
|
||||
|
||||
valid = 0;
|
||||
if (ctrl->default_search_root[0] && ventoy_is_directory_exist("%s%s", g_cur_dir, ctrl->default_search_root))
|
||||
|
@ -669,7 +674,15 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen)
|
|||
}
|
||||
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_END(pos);
|
||||
|
||||
|
@ -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_search_root", ctrl->default_search_root);
|
||||
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);
|
||||
|
||||
ret = ventoy_data_save_all();
|
||||
|
@ -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)
|
||||
{
|
||||
data->menu_timeout = (int)strtol(child->unData.pcStrVal, NULL, 10);
|
||||
|
@ -5326,6 +5351,19 @@ int ventoy_http_init(void)
|
|||
}
|
||||
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
|
||||
ventoy_file *file;
|
||||
file = ventoy_tar_find_file("www/helplist");
|
||||
|
@ -5337,6 +5375,16 @@ int ventoy_http_init(void)
|
|||
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
|
||||
|
||||
if (!g_pub_json_buffer)
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include <civetweb.h>
|
||||
|
||||
#define MAX_LANGUAGE 128
|
||||
#define MAX_LANGUAGE 256
|
||||
|
||||
#define L1 " "
|
||||
#define L2 " "
|
||||
|
@ -84,6 +84,7 @@ typedef struct data_control
|
|||
char default_image[MAX_PATH];
|
||||
char default_kbd_layout[32];
|
||||
char help_text_language[32];
|
||||
char menu_language[32];
|
||||
}data_control;
|
||||
|
||||
#define display_mode_gui 0
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
en_USzh_CN
|
|
@ -32,6 +32,42 @@
|
|||
</ul>
|
||||
</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-header with-border">
|
||||
|
@ -1092,6 +1128,7 @@
|
|||
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.menu_language = $('select[id=id_ctrl_sel_menu_lang').val();
|
||||
}
|
||||
|
||||
function VtoyFillCurrentPageItem(data) {
|
||||
|
@ -1192,8 +1229,18 @@
|
|||
$('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() {
|
||||
|
@ -1329,6 +1376,7 @@
|
|||
$('select[id=id_ctrl_sel_max_depth]').change(VtoySaveCurrentPage);
|
||||
$('select[id=id_ctrl_sel_kbd]').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() {
|
||||
var value = $('input:text[id=id_ctrl_text_timeout]').val();
|
||||
if (/^[0-9][0-9]*$/.test(value)) {
|
||||
|
|
Loading…
Reference in New Issue