Files
menu/demo/language.c
2025-12-19 17:01:27 +08:00

526 lines
18 KiB
C

#include "language.h"
/* 全局变量定义 ---------------------------------------------------------------------------------------------------*/
/**
* @brief 当前系统语言
*/
static SystemLang_e sg_current_language = SYSTEM_LANG_CHINESE;
/**
* @brief 中文文本数组
*/
static const char *sg_chinese_text[] = {
[TEXT_ENTER] = "进入",
[TEXT_EXIT] = "退出",
[TEXT_RETURN] = "返回",
[TEXT_OK] = "确定",
[TEXT_CANCEL] = "取消",
[TEXT_SAVE] = "保存",
[TEXT_LOAD] = "加载",
[TEXT_MAIN_MENU] = "主菜单",
[TEXT_MAIN_MEASUREMENT] = "测量",
[TEXT_MAIN_PROTECTION] = "保护",
[TEXT_MAIN_CONTROL] = "控制",
[TEXT_MAIN_SETTING] = "设置",
[TEXT_MAIN_RECORD] = "记录",
[TEXT_MAIN_HELP] = "帮助",
[TEXT_MAIN_ABOUT] = "关于",
[TEXT_MEASURE_VOLTAGE] = "电压",
[TEXT_MEASURE_CURRENT] = "电流",
[TEXT_MEASURE_POWER] = "功率",
[TEXT_MEASURE_ENERGY] = "能量",
[TEXT_MEASURE_FREQUENCY] = "频率",
[TEXT_MEASURE_TEMPERATURE] = "温度",
[TEXT_PROTECT_OVER_VOLTAGE] = "过电压保护",
[TEXT_PROTECT_UNDER_VOLTAGE] = "欠电压保护",
[TEXT_PROTECT_OVER_CURRENT] = "过电流保护",
[TEXT_PROTECT_SETTING] = "保护设置",
[TEXT_CONTROL_ON_OFF] = "开关控制",
[TEXT_CONTROL_START_STOP] = "启停控制",
[TEXT_CONTROL_AUTO_MANUAL] = "自动/手动",
[TEXT_SETTING_LANGUAGE] = "语言设置",
[TEXT_RECORD_EVENT] = "事件记录",
[TEXT_HELP_GUIDE] = "指南",
[TEXT_ABOUT_VERSION] = "版本信息",
[TEXT_PERSIST_SAVE_STATE] = "保存菜单状态",
[TEXT_PERSIST_RESTORE_STATE] = "恢复菜单状态",
[TEXT_PERSIST_SAVE_SUCCESS] = "保存成功",
[TEXT_PERSIST_SAVE_FAILED] = "保存失败",
[TEXT_PERSIST_RESTORE_SUCCESS] = "恢复成功",
[TEXT_PERSIST_RESTORE_FAILED] = "恢复失败",
[TEXT_ERROR] = "错误",
[TEXT_WARNING] = "警告",
[TEXT_SUCCESS] = "成功",
[TEXT_INFO] = "信息",
[TEXT_TEST] = "测试",
[TEXT_SELECT_OPTION] = "选择操作",
[TEXT_CURRENT] = "当前",
[TEXT_STATUS] = "状态",
[TEXT_SUMMARY] = "摘要",
[TEXT_EMPTY] = "",
[TEXT_CURRENT_SELECTION] = "当前选择",
[TEXT_OPERATIONS] = "操作",
[TEXT_SELECT_ITEM] = "选择项",
[TEXT_ENTER_SUBMENU] = "进入子菜单",
[TEXT_RETURN_PARENT] = "返回父菜单",
[TEXT_SELECT_PREVIOUS] = "选择上一项",
[TEXT_SELECT_NEXT] = "选择下一项",
[TEXT_START_DEFAULT] = "从默认开始",
[TEXT_REGISTER_CALLBACK_FAILED] = "注册回调失败",
[TEXT_RESTORE_MENU_STATE] = "恢复菜单状态",
[TEXT_RESTORE_MENU_STATE_FAILED] = "恢复菜单状态失败",
[TEXT_SAVE_MENU_STATE_FAILED] = "保存菜单状态失败",
[TEXT_UP_ARROW] = "上箭头",
[TEXT_DOWN_ARROW] = "下箭头",
[TEXT_LEFT_ARROW] = "左箭头",
[TEXT_RIGHT_ARROW] = "右箭头",
};
/**
* @brief 英文文本数组
*/
static const char *sg_english_text[] = {
[TEXT_ENTER] = "Enter",
[TEXT_EXIT] = "Exit",
[TEXT_RETURN] = "Return",
[TEXT_OK] = "OK",
[TEXT_CANCEL] = "Cancel",
[TEXT_SAVE] = "Save",
[TEXT_LOAD] = "Load",
[TEXT_MAIN_MENU] = "Main Menu",
[TEXT_MAIN_MEASUREMENT] = "Measurement",
[TEXT_MAIN_PROTECTION] = "Protection",
[TEXT_MAIN_CONTROL] = "Control",
[TEXT_MAIN_SETTING] = "Setting",
[TEXT_MAIN_RECORD] = "Record",
[TEXT_MAIN_HELP] = "Help",
[TEXT_MAIN_ABOUT] = "About",
[TEXT_MEASURE_VOLTAGE] = "Voltage",
[TEXT_MEASURE_CURRENT] = "Current",
[TEXT_MEASURE_POWER] = "Power",
[TEXT_MEASURE_ENERGY] = "Energy",
[TEXT_MEASURE_FREQUENCY] = "Frequency",
[TEXT_MEASURE_TEMPERATURE] = "Temperature",
[TEXT_PROTECT_OVER_VOLTAGE] = "Over Voltage Protection",
[TEXT_PROTECT_UNDER_VOLTAGE] = "Under Voltage Protection",
[TEXT_PROTECT_OVER_CURRENT] = "Over Current Protection",
[TEXT_PROTECT_SETTING] = "Protection Setting",
[TEXT_CONTROL_ON_OFF] = "On/Off",
[TEXT_CONTROL_START_STOP] = "Start/Stop",
[TEXT_CONTROL_AUTO_MANUAL] = "Auto/Manual",
[TEXT_SETTING_LANGUAGE] = "Language Setting",
[TEXT_RECORD_EVENT] = "Event Record",
[TEXT_HELP_GUIDE] = "Guide",
[TEXT_ABOUT_VERSION] = "Version Info",
[TEXT_PERSIST_SAVE_STATE] = "Save Menu State",
[TEXT_PERSIST_RESTORE_STATE] = "Restore Menu State",
[TEXT_PERSIST_SAVE_SUCCESS] = "Save Success",
[TEXT_PERSIST_SAVE_FAILED] = "Save Failed",
[TEXT_PERSIST_RESTORE_SUCCESS] = "Restore Success",
[TEXT_PERSIST_RESTORE_FAILED] = "Restore Failed",
[TEXT_ERROR] = "Error",
[TEXT_WARNING] = "Warning",
[TEXT_SUCCESS] = "Success",
[TEXT_INFO] = "Info",
[TEXT_TEST] = "Test",
[TEXT_SELECT_OPTION] = "Select Option",
[TEXT_CURRENT] = "Current",
[TEXT_STATUS] = "Status",
[TEXT_SUMMARY] = "Summary",
[TEXT_EMPTY] = "Empty",
[TEXT_CURRENT_SELECTION] = "Current Selection",
[TEXT_OPERATIONS] = "Operations",
[TEXT_SELECT_ITEM] = "Select Item",
[TEXT_ENTER_SUBMENU] = "Enter Submenu",
[TEXT_RETURN_PARENT] = "Return Parent",
[TEXT_SELECT_PREVIOUS] = "Select Previous",
[TEXT_SELECT_NEXT] = "Select Next",
[TEXT_START_DEFAULT] = "Start Default",
[TEXT_REGISTER_CALLBACK_FAILED] = "Register Callback Failed",
[TEXT_RESTORE_MENU_STATE] = "Restore Menu State",
[TEXT_RESTORE_MENU_STATE_FAILED] = "Restore Menu State Failed",
[TEXT_SAVE_MENU_STATE_FAILED] = "Save Menu State Failed",
[TEXT_UP_ARROW] = "Up Arrow",
[TEXT_DOWN_ARROW] = "Down Arrow",
[TEXT_LEFT_ARROW] = "Left Arrow",
[TEXT_RIGHT_ARROW] = "Right Arrow",
};
/**
* @brief 日语文本数组
*/
static const char *sg_japanese_text[] = {
[TEXT_ENTER] = "入る",
[TEXT_EXIT] = "退出",
[TEXT_RETURN] = "戻る",
[TEXT_OK] = "OK",
[TEXT_CANCEL] = "キャンセル",
[TEXT_SAVE] = "保存",
[TEXT_LOAD] = "読み込む",
[TEXT_MAIN_MENU] = "メインメニュー",
[TEXT_MAIN_MEASUREMENT] = "計測",
[TEXT_MAIN_PROTECTION] = "保護",
[TEXT_MAIN_CONTROL] = "制御",
[TEXT_MAIN_SETTING] = "設定",
[TEXT_MAIN_RECORD] = "記録",
[TEXT_MAIN_HELP] = "ヘルプ",
[TEXT_MAIN_ABOUT] = "について",
[TEXT_MEASURE_VOLTAGE] = "電圧",
[TEXT_MEASURE_CURRENT] = "電流",
[TEXT_MEASURE_POWER] = "電力",
[TEXT_MEASURE_ENERGY] = "エネルギー",
[TEXT_MEASURE_FREQUENCY] = "周波数",
[TEXT_MEASURE_TEMPERATURE] = "温度",
[TEXT_PROTECT_OVER_VOLTAGE] = "過電圧保護",
[TEXT_PROTECT_UNDER_VOLTAGE] = "不足電圧保護",
[TEXT_PROTECT_OVER_CURRENT] = "過電流保護",
[TEXT_PROTECT_SETTING] = "保護設定",
[TEXT_CONTROL_ON_OFF] = "オン/オフ",
[TEXT_CONTROL_START_STOP] = "スタート/ストップ",
[TEXT_CONTROL_AUTO_MANUAL] = "オート/マニュアル",
[TEXT_SETTING_LANGUAGE] = "言語設定",
[TEXT_RECORD_EVENT] = "イベント記録",
[TEXT_HELP_GUIDE] = "ガイド",
[TEXT_ABOUT_VERSION] = "バージョン情報",
[TEXT_PERSIST_SAVE_STATE] = "メニュー状態を保存",
[TEXT_PERSIST_RESTORE_STATE] = "メニュー状態を復元",
[TEXT_PERSIST_SAVE_SUCCESS] = "保存成功",
[TEXT_PERSIST_SAVE_FAILED] = "保存失敗",
[TEXT_PERSIST_RESTORE_SUCCESS] = "復元成功",
[TEXT_PERSIST_RESTORE_FAILED] = "復元失敗",
[TEXT_ERROR] = "エラー",
[TEXT_WARNING] = "警告",
[TEXT_SUCCESS] = "成功",
[TEXT_INFO] = "情報",
[TEXT_TEST] = "テスト",
[TEXT_SELECT_OPTION] = "オプションを選択",
[TEXT_CURRENT] = "現在",
[TEXT_STATUS] = "ステータス",
[TEXT_SUMMARY] = "サマリー",
[TEXT_EMPTY] = "",
[TEXT_CURRENT_SELECTION] = "現在の選択",
[TEXT_OPERATIONS] = "操作",
[TEXT_SELECT_ITEM] = "項目を選択",
[TEXT_ENTER_SUBMENU] = "サブメニューに入る",
[TEXT_RETURN_PARENT] = "親メニューに戻る",
[TEXT_SELECT_PREVIOUS] = "前の項目を選択",
[TEXT_SELECT_NEXT] = "次の項目を選択",
[TEXT_START_DEFAULT] = "デフォルトから開始",
[TEXT_REGISTER_CALLBACK_FAILED] = "コールバック登録失敗",
[TEXT_RESTORE_MENU_STATE] = "メニュー状態を復元",
[TEXT_RESTORE_MENU_STATE_FAILED] = "メニュー状態復元失敗",
[TEXT_SAVE_MENU_STATE_FAILED] = "メニュー状態保存失敗",
[TEXT_UP_ARROW] = "上矢印",
[TEXT_DOWN_ARROW] = "下矢印",
[TEXT_LEFT_ARROW] = "左矢印",
[TEXT_RIGHT_ARROW] = "右矢印",
};
/**
* @brief 德语文本数组
*/
static const char *sg_german_text[] = {
[TEXT_ENTER] = "Eingeben",
[TEXT_EXIT] = "Verlassen",
[TEXT_RETURN] = "Zurück",
[TEXT_OK] = "OK",
[TEXT_CANCEL] = "Abbrechen",
[TEXT_SAVE] = "Speichern",
[TEXT_LOAD] = "Laden",
[TEXT_MAIN_MENU] = "Hauptmenü",
[TEXT_MAIN_MEASUREMENT] = "Messung",
[TEXT_MAIN_PROTECTION] = "Schutz",
[TEXT_MAIN_CONTROL] = "Steuerung",
[TEXT_MAIN_SETTING] = "Einstellung",
[TEXT_MAIN_RECORD] = "Aufzeichnung",
[TEXT_MAIN_HELP] = "Hilfe",
[TEXT_MAIN_ABOUT] = "Über",
[TEXT_MEASURE_VOLTAGE] = "Spannung",
[TEXT_MEASURE_CURRENT] = "Strom",
[TEXT_MEASURE_POWER] = "Leistung",
[TEXT_MEASURE_ENERGY] = "Energie",
[TEXT_MEASURE_FREQUENCY] = "Frequenz",
[TEXT_MEASURE_TEMPERATURE] = "Temperatur",
[TEXT_PROTECT_OVER_VOLTAGE] = "Überspannungsschutz",
[TEXT_PROTECT_UNDER_VOLTAGE] = "Unterspannungsschutz",
[TEXT_PROTECT_OVER_CURRENT] = "Überstromschutz",
[TEXT_PROTECT_SETTING] = "Schutz-Einstellung",
[TEXT_CONTROL_ON_OFF] = "Ein/Aus",
[TEXT_CONTROL_START_STOP] = "Start/Stopp",
[TEXT_CONTROL_AUTO_MANUAL] = "Auto/Manuell",
[TEXT_SETTING_LANGUAGE] = "Spracheinstellung",
[TEXT_RECORD_EVENT] = "Ereignisaufzeichnung",
[TEXT_HELP_GUIDE] = "Anleitung",
[TEXT_ABOUT_VERSION] = "Versionsinfo",
[TEXT_PERSIST_SAVE_STATE] = "Menüzustand speichern",
[TEXT_PERSIST_RESTORE_STATE] = "Menüzustand wiederherstellen",
[TEXT_PERSIST_SAVE_SUCCESS] = "Speichern erfolgreich",
[TEXT_PERSIST_SAVE_FAILED] = "Speichern fehlgeschlagen",
[TEXT_PERSIST_RESTORE_SUCCESS] = "Wiederherstellen erfolgreich",
[TEXT_PERSIST_RESTORE_FAILED] = "Wiederherstellen fehlgeschlagen",
[TEXT_ERROR] = "Fehler",
[TEXT_WARNING] = "Warnung",
[TEXT_SUCCESS] = "Erfolg",
[TEXT_INFO] = "Info",
[TEXT_TEST] = "Test",
[TEXT_SELECT_OPTION] = "Option wählen",
[TEXT_CURRENT] = "Aktuell",
[TEXT_STATUS] = "Status",
[TEXT_SUMMARY] = "Zusammenfassung",
[TEXT_EMPTY] = "Leer",
[TEXT_CURRENT_SELECTION] = "Aktuelle Auswahl",
[TEXT_OPERATIONS] = "Operationen",
[TEXT_SELECT_ITEM] = "Element auswählen",
[TEXT_ENTER_SUBMENU] = "In Untermenü eintreten",
[TEXT_RETURN_PARENT] = "Zu übergeordnetem Menü zurückkehren",
[TEXT_SELECT_PREVIOUS] = "Vorheriges auswählen",
[TEXT_SELECT_NEXT] = "Nächstes auswählen",
[TEXT_START_DEFAULT] = "Standard starten",
[TEXT_REGISTER_CALLBACK_FAILED] = "Rückrufregistrierung fehlgeschlagen",
[TEXT_RESTORE_MENU_STATE] = "Menüzustand wiederherstellen",
[TEXT_RESTORE_MENU_STATE_FAILED] = "Wiederherstellung des Menüzustands fehlgeschlagen",
[TEXT_SAVE_MENU_STATE_FAILED] = "Speichern des Menüzustands fehlgeschlagen",
[TEXT_UP_ARROW] = "Pfeil nach oben",
[TEXT_DOWN_ARROW] = "Pfeil nach unten",
[TEXT_LEFT_ARROW] = "Pfeil nach links",
[TEXT_RIGHT_ARROW] = "Pfeil nach rechts",
};
/**
* @brief 语言文本映射表
*/
static const char **sg_language_text_map[] = {
[SYSTEM_LANG_CHINESE] = sg_chinese_text,
[SYSTEM_LANG_ENGLISH] = sg_english_text,
[SYSTEM_LANG_JAPANESE] = sg_japanese_text,
[SYSTEM_LANG_GERMAN] = sg_german_text,
};
/**
* @brief 全局菜单节点映射表
*/
const MenuNodeInfo_t menu_node_map[] = {
// 一级菜单
{MENU_NODE_ID_MAIN, MENU_NODE_ID_NONE, TEXT_MAIN_MENU, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_MEASUREMENT, MENU_NODE_ID_MAIN, TEXT_MAIN_MEASUREMENT, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_PROTECTION, MENU_NODE_ID_MAIN, TEXT_MAIN_PROTECTION, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_CONTROL, MENU_NODE_ID_MAIN, TEXT_MAIN_CONTROL, 1, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_SETTING, MENU_NODE_ID_MAIN, TEXT_MAIN_SETTING, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_RECORD, MENU_NODE_ID_MAIN, TEXT_MAIN_RECORD, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_HELP, MENU_NODE_ID_MAIN, TEXT_MAIN_HELP, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_ABOUT, MENU_NODE_ID_MAIN, TEXT_MAIN_ABOUT, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE},
// 二级菜单:测量菜单子项
{MENU_NODE_ID_MEASUREMENT_VOLTAGE, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_VOLTAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_MEASUREMENT_CURRENT, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_CURRENT, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_MEASUREMENT_POWER, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_POWER, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_MEASUREMENT_ENERGY, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_ENERGY, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_MEASUREMENT_FREQUENCY, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_FREQUENCY, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_MEASUREMENT_TEMPERATURE, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_TEMPERATURE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
// 二级菜单:保护菜单子项
{MENU_NODE_ID_PROTECTION_OVER_VOLTAGE, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_OVER_VOLTAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_PROTECTION_UNDER_VOLTAGE, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_UNDER_VOLTAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_PROTECTION_OVER_CURRENT, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_OVER_CURRENT, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_PROTECTION_SETTING, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_SETTING, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
// 二级菜单:控制菜单子项
{MENU_NODE_ID_CONTROL_ON_OFF, MENU_NODE_ID_CONTROL, TEXT_CONTROL_ON_OFF, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_CONTROL_START_STOP, MENU_NODE_ID_CONTROL, TEXT_CONTROL_START_STOP, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_CONTROL_AUTO_MANUAL, MENU_NODE_ID_CONTROL, TEXT_CONTROL_AUTO_MANUAL, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
// 二级菜单:其他子项
{MENU_NODE_ID_SETTING_LANGUAGE, MENU_NODE_ID_SETTING, TEXT_SETTING_LANGUAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_RECORD_EVENT, MENU_NODE_ID_RECORD, TEXT_RECORD_EVENT, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_HELP_GUIDE, MENU_NODE_ID_HELP, TEXT_HELP_GUIDE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
{MENU_NODE_ID_ABOUT_VERSION, MENU_NODE_ID_ABOUT, TEXT_ABOUT_VERSION, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE},
};
/**
* @brief 菜单节点映射表大小
*/
const uint32_t menu_node_map_size = sizeof(menu_node_map) / sizeof(menu_node_map[0]);
/* 函数实现 ---------------------------------------------------------------------------------------------------------*/
/**
* @brief 初始化语言模块
*/
MenuErrCode language_init(void)
{
// 初始化核心菜单库语言模块
MenuErrCode ret = menu_lang_init();
if (ret != MENU_ERR_OK)
{
return ret;
}
// 设置默认语言
return set_language(SYSTEM_LANG_CHINESE);
}
/**
* @brief 根据文本ID获取对应语言的文本字符串
*/
const char* get_text(TextId_e text_id)
{
if (text_id >= TEXT_MAX)
{
return NULL;
}
if (sg_current_language >= SYSTEM_LANG_MAX)
{
return NULL;
}
return sg_language_text_map[sg_current_language][text_id];
}
/**
* @brief 设置当前系统语言
*/
MenuErrCode set_language(SystemLang_e lang)
{
if (lang >= SYSTEM_LANG_MAX)
{
return MENU_ERR_INVALID_PARAM;
}
sg_current_language = lang;
// 同步到核心菜单库
return menu_lang_set_current((LangId)lang);
}
/**
* @brief 获取当前系统语言
*/
SystemLang_e get_current_language(void)
{
return sg_current_language;
}
/**
* @brief 根据菜单节点ID获取对应的文本ID
*/
TextId_e get_menu_text_id(MenuNodeId_e node_id)
{
for (uint32_t i = 0; i < menu_node_map_size; i++)
{
if (menu_node_map[i].node_id == node_id)
{
return menu_node_map[i].text_id;
}
}
return TEXT_MAX;
}
/**
* @brief 根据菜单节点ID获取对应的父节点ID
*/
MenuNodeId_e get_menu_parent_id(MenuNodeId_e node_id)
{
for (uint32_t i = 0; i < menu_node_map_size; i++)
{
if (menu_node_map[i].node_id == node_id)
{
return menu_node_map[i].parent_id;
}
}
return MENU_NODE_ID_NONE;
}
/**
* @brief 检查菜单节点是否有子节点
*/
uint8_t menu_node_has_children(MenuNodeId_e node_id)
{
for (uint32_t i = 0; i < menu_node_map_size; i++)
{
if (menu_node_map[i].node_id == node_id)
{
return MENU_NODE_HAS_ATTR(menu_node_map[i].attributes, MENU_NODE_ATTR_HAS_CHILDREN);
}
}
return 0;
}
/**
* @brief 检查菜单节点是否可操作
*/
uint8_t menu_node_is_operable(MenuNodeId_e node_id)
{
for (uint32_t i = 0; i < menu_node_map_size; i++)
{
if (menu_node_map[i].node_id == node_id)
{
return MENU_NODE_HAS_ATTR(menu_node_map[i].attributes, MENU_NODE_ATTR_OPERABLE);
}
}
return 0;
}
/**
* @brief 获取菜单节点的显示文本
*/
const char* get_menu_node_text(MenuNodeId_e node_id)
{
TextId_e text_id = get_menu_text_id(node_id);
if (text_id == TEXT_MAX)
{
return NULL;
}
return get_text(text_id);
}