eduwin 国际化 API
eduwin 提供基于 JSON 文件的轻量多语言支持方案。
初始化
void i18n_init(const WCHAR *json_path);
加载指定路径的 JSON 翻译文件。文件编码为 UTF-8。加载成功后自动读取 current 字段作为当前语言。
JSON 文件格式:
{
"current": "zh",
"labels": [
{"id": "hello", "zh": "你好", "en": "hello", "jp": "こんにちは"},
{"id": "goodbye", "zh": "再见", "en": "goodbye"}
]
}
current— 默认语言代码,与 labels 中各条目的字段名对应labels— 翻译词条数组id— 词条唯一标识,程序中通过该 id 引用- 其他字段为各语言的翻译文本,字段名即语言代码
切换语言
void i18n_set_lang(const char *lang);
运行时切换语言,无需重新加载文件。lang 为语言代码(如 "en"、"zh"、"jp")。
获取翻译
const WCHAR *i18n_get_str(const char *id);
按 id 返回当前语言的翻译文字(宽字符串)。查找规则:
- 在
labels数组中查找匹配的id - 找到后读取当前语言对应的字段
- 如果当前语言字段不存在,回退到
zh字段 - 如果仍不存在,返回
id本身
完整示例
#include "eduwin.h"
int main(void)
{
if (init_app() != 0) return 1;
/* 加载翻译文件 */
i18n_init(L"lang.json");
HWND win = create_window(i18n_get_str("title"), 400, 200);
if (!win) return 1;
HWND label = create_label(win, i18n_get_str("hello"), 20, 20, 360, 30);
HWND btn = create_button(win, i18n_get_str("switch_en"), 20, 70, 100, 28);
on_button_click(btn, switch_en, NULL);
show_window(win);
run_app();
return 0;
}