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 返回当前语言的翻译文字(宽字符串)。查找规则:

  1. labels 数组中查找匹配的 id
  2. 找到后读取当前语言对应的字段
  3. 如果当前语言字段不存在,回退到 zh 字段
  4. 如果仍不存在,返回 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;
}