# eduwin 国际化 API

eduwin 提供基于 JSON 文件的轻量多语言支持方案。

## 初始化

```c
void i18n_init(const WCHAR *json_path);
```

加载指定路径的 JSON 翻译文件。文件编码为 **UTF-8**。加载成功后自动读取 `current` 字段作为当前语言。

JSON 文件格式：

```json
{
    "current": "zh",
    "labels": [
        {"id": "hello", "zh": "你好", "en": "hello", "jp": "こんにちは"},
        {"id": "goodbye", "zh": "再见", "en": "goodbye"}
    ]
}
```

- `current` — 默认语言代码，与 labels 中各条目的字段名对应
- `labels` — 翻译词条数组
  - `id` — 词条唯一标识，程序中通过该 id 引用
  - 其他字段为各语言的翻译文本，字段名即语言代码

## 切换语言

```c
void i18n_set_lang(const char *lang);
```

运行时切换语言，无需重新加载文件。`lang` 为语言代码（如 `"en"`、`"zh"`、`"jp"`）。

## 获取翻译

```c
const WCHAR *i18n_get_str(const char *id);
```

按 `id` 返回当前语言的翻译文字（宽字符串）。查找规则：

1. 在 `labels` 数组中查找匹配的 `id`
2. 找到后读取当前语言对应的字段
3. 如果当前语言字段不存在，回退到 `zh` 字段
4. 如果仍不存在，返回 `id` 本身

## 完整示例

```c
#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;
}
```
