Switch本身不处理国际化,由运行其上的软件通过系统区域或手动选择语言,读取标准化语言码对应JSON资源文件,构建键值映射实现动态翻译与运行时切换,并具备缺失键回退至默认语言及日志记录机制。
switch 本身不直接处理国际化资源文件加载——它只是运行环境。真正做语言切换和资源映射的是运行在其上的软件,比如 goldleaf、nsc_builder 或自研工具。关键在于:**用 switch 系统区域设置或应用内手动选择触发语言逻辑,再由程序读取对应 json 或 .resx 资源文件,完成键到翻译文本的映射。**
识别并读取语言标识符
程序启动时需确定当前应加载哪套语言资源:
- 从 Switch 系统设置中读取区域语言(如 zh-Hans、ja-JP、es-419),可通过 libnx 的
setGetSystemLanguage获取标准语言码 - 若应用支持手动切换,则将用户选择持久化保存(如存入
settings.ini或config.json),优先级高于系统设置 - 语言码需标准化处理:统一转为小写、补全区域(如
zh→zh-Hans),避免因格式差异导致文件未命中
按约定路径加载对应资源文件
Goldleaf 等成熟项目已建立清晰的资源组织规范:
- 所有语言文件集中放在
romfs/Strings/下,命名格式为语言标签.json(如zh-Hans.json、es-419.json) - 程序根据识别出的语言标识符拼接完整路径,尝试打开对应 JSON 文件;若失败,则按“区域性回退”策略降级(如
zh-HK找不到 → 尝试zh-Hant→ 再试zh) - JSON 文件需保持结构一致:每个条目为
{"key": "translation"}形式,共 544 条(Goldleaf 示例),确保键名在所有语言文件中完全一致
运行时动态映射翻译上下文
加载成功后,不是把整个 JSON 原样塞进内存,而是构建可快速查表的映射关系:
- 解析 JSON 得到键值对字典(如 C++ 中用
std::unordered_map<:string std::string></:string>),作为当前语言的翻译上下文 - 界面渲染时,所有文本不硬编码,而是调用统一函数,例如
getLocalizedString("menu.browse_sd"),内部根据当前上下文返回对应译文 - 支持运行中切换语言:销毁旧上下文 → 重新加载新语言 JSON → 刷新 UI 组件(如重绘菜单项),无需重启应用
处理缺失键与降级兜底
翻译不全或新增功能未及时本地化是常见问题,必须有容错机制:
- 当请求的 key 在当前语言文件中不存在时,不显示空白或报错,而是回退到默认语言(通常是
en-US.json)查找 - 若连默认语言也没有该 key,可显示原始 key(如
menu.browse_sd)或占位提示(如[MISSING]),便于开发者快速定位漏翻项 - 日志记录缺失 key,方便后续补全翻译包


















