尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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。现在就回去扫一遍你的项目把硬编码文案搬进资源文件。
RELATED

相关推荐

物联网云平台是什么?有什么推荐?

物联网云平台是什么?有什么推荐?

简单来说,物联网云平台就像是物联网体系的“大脑”和“神经中枢”。它向下连接并管理海量的智能终端设备,将设备数据采集、归集到云端;向上则提供标准化的开发工具和接口,赋能各类智能化应用的快速构建。有了它,你无需…

📅 2026/8/20 20:33:36
TLSFOWARD自动化抓包工具

TLSFOWARD自动化抓包工具

证据。把 TLS 与 HTTP 观测结果写进标准化证据包,可以让 HTTPS 问题从模糊描述变成结构化协作:谁发起请求、请求到了哪里、返回了什么、协议层有什么差异、哪些信息已经脱敏。 HTTPS 故障证据包怎么写:基于 TLS 与 HTTP 观测结果的团队协作模…

📅 2026/9/9 15:58:03
MySQL:聚合函数与分组查询实战精讲

MySQL:聚合函数与分组查询实战精讲

1. 为什么需要聚合函数和分组查询?想象你是一家电商公司的数据分析师,老板让你统计最近三个月每个品类的销售总额、平均订单金额和订单数量。如果手动计算,你需要先按品类分类,再逐个求和、求平均——这工作量简直让人崩溃。而MyS…

📅 2026/8/20 20:33:37
MORE NEWS

更多资讯

📰

医疗废物智能监管系统的架构设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Golang WebSocket 房间分组管理:从单机到多实例的完整方案

做即时通讯、游戏对战、在线协作白板这类产品时,只要涉及 Golang WebSocket,就绕不开一个场景:同一套服务上挂着几千上万个连接,必须按某个业务维度把它们圈起来。比如用户进了 3 号竞速房,他就只能收到 3 号房里其他玩…

📰

从线上故障到生产实践:分布式事务与最终一致性落地全程复盘

一次线上故障,把“分布式事务”四个字从PPT里拽到了我面前。当时订单服务已经扣款成功,库存服务却回滚失败,用户看到的提示是“支付成功”,仓库里却没有货可发。客服工单一下子涌进来,技术群里全是“库存到底扣没扣”的…

📰

数据传输仿真核心:封装、时延与丢包重传建模详解

1. 为什么我从“传输”而不是“网络”开始讲仿真做信息系统仿真这几年,我最大的体会是:很多人一上手就直奔网络仿真工具,急着搭拓扑、配协议、看吞吐量,结果连最底层的数据是怎么从A点挪到B点的都没搞清楚。仿真报错的时候&#x…

📰

高并发场景下隧道代理稳定性实测:三家服务压测对比与调优经验

做数据采集的人,大概都经历过这种绝望:白天压测一切正常,晚上一上量,IP批量掉线、请求超时、限流报错刷屏。我去年在给一个电商比价项目搭建数据采集平台时,就把市面上主流的隧道代理(动态IP轮换服务&#…

📰

PyTorch 第三方依赖集成指南:moodycamel/concurrentqueue 的更新流程与源码落地

PyTorch 第三方依赖集成指南:moodycamel/concurrentqueue 的更新流程与源码落地 【免费下载链接】pytorch Tensors and Dynamic neural networks in Python with strong GPU acceleration 项目地址: https://gitcode.com/GitHub_Trending/py/pytorch moodyca…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬