HarmonyOS7 资源管理与国际化:多语言适配配置 文章目录前言资源目录结构代码实现在 string.json 里定义文案代码里引用用 $r动态切换语言核心代码图片/布局也能分语言常见坑常见误区小白必踩完整可运行示例多语言适配完整示例代码解析写在最后前言你的 app 想卖到海外或者只是想支持简体/繁体切换就得做国际化i18n。HarmonyOS 的资源管理体系把这件事变得很规范。核心思路一句话别把文字写死在代码里全放进资源文件按语言分目录。这篇文章我把资源配置、多语言切换、以及常见陷阱讲清。资源目录结构HarmonyOS 用resources/下的base默认和带限定词如zh_CN、en_US的目录来区分语言代码实现resources/ ├── base/element/string.json # 默认兜底文案 ├── zh_CN/element/string.json # 简体中文 └── en_US/element/string.json # 英文系统会根据设备语言自动选对应目录。找不到才用base兜底。在 string.json 里定义文案// base/element/string.json{string:[{name:hello,value:Hello},{name:login,value:Login}]}// zh_CN/element/string.json{string:[{name:hello,value:你好},{name:login,value:登录}]}每个文案用name作键不同语言目录里name一致、value不同。代码里引用用 $rText($r(app.string.hello))// 自动按当前语言取对应文案Button($r(app.string.login))$r(app.string.xxx)引用string.json里namexxx的值。不要在代码里写Text(你好)这种字面值否则切换语言它不会变。动态切换语言用户想手动切语言而不依赖系统需要改配置并重启资源上下文核心代码import{i18n}fromkit.LocalizationKitfunctionchangeToEnglish(){i18n.setAppPreferredLanguage(en)// 设为英文// 通常还需重新加载页面或重启 Ability 让资源生效}i18n.setAppPreferredLanguage(en)设置 app 偏好语言。切换后建议引导用户重启 app 或重新加载当前页资源才会刷新。图片/布局也能分语言不止文字连图片、布局都能按语言分目录在zh_CN/media/、en_US/media/放同名不同图引用时一样用$r(app.media.logo)系统自动选。常见坑坑现象解决文案写死在代码切换语言不变一律用$r引用name 拼写不一致取不到报找不到多语言目录 name 必须一致忘了 base 兜底某种语言缺字段崩base 放完整默认文案切换不生效资源没重载切换后重启上下文常见误区小白必踩误区说明文案写死在代码Text(你好)切换语言不变必须一律用$r(app.string.xxx)引用。多语言name不一致不同语言目录里name要对齐否则取不到报找不到。忘了base兜底某种语言缺字段直接崩base 放完整默认文案。切换不重载动态切语言后记得重启上下文让资源刷新。下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲改一改文末「动手改一改」里的参数亲眼看看效果。完整可运行示例多语言适配用Resource引用字符串切换系统语言自动变。完整示例// 资源引用中文/英文各一份系统语言自动选EntryComponentstruct I18nDemo{build(){Column({space:16}){// $r 会按系统语言取对应资源Text($r(app.string.hello))Text($r(app.string.welcome))}.padding(20)}}配套资源resources/base/element/string.json 与 resources/en_US/element/string.json代码解析{string:[{name:hello,value:你好}]}// 中文{string:[{name:hello,value:Hello}]}// 英文你会看到什么系统切到英文时界面文字自动变成Hello无需改代码——所有文案都走$r(app.string.xxx)资源引用。动手改一改新增zh_TW资源目录体验繁体适配。用$plurals处理「1 条消息 / 3 条消息」复数。用ResourceManager在 JS 逻辑里取字符串不止 UI。写在最后国际化三步走文案进 string.json不写死、按语言分目录、代码用$r引用。图片、布局同理可分目录。再配合i18n动态切换多语言就齐活了。记住一条铁律代码里出现任何用户可见的中文字符串都是国际化的 bug。现在就回去扫一遍你的项目把硬编码文案搬进资源文件。