在 OpenHarmony(ArkUI / eTS 或 JS 开发)中,菜单(Menu)的国际化(i18n)通常和应用的国际化方案是一致的,核心思路是:文本不直接写死,而是从资源文件中读取。
下面按常见做法说明。
在 resources 下按语言建立目录:
resources/
├─ base/
│ └─ element/
│ └─ string.json
├─ en_US/
│ └─ element/
│ └─ string.json
├─ zh_CN/
│ └─ element/
│ └─ string.json
zh_CN/element/string.json
{
"string": [
{
"name": "menu_copy",
"value": "复制"
},
{
"name": "menu_delete",
"value": "删除"
}
]
}
en_US/element/string.json
{
"string": [
{
"name": "menu_copy",
"value": "Copy"
},
{
"name": "menu_delete",
"value": "Delete"
}
]
}
import { Menu, MenuItem } from '@ohos.arkui.advanced'
@Entry
@Component
struct Index {
@State message: string = ''
build() {
Column() {
Text(this.message)
.fontSize(20)
Button('Show Menu')
.onClick((event) => {
Menu.show({
x: event.x,
y: event.y,
items: [
{
value: $r('app.string.menu_copy'),
action: () => {
this.message = 'Copy'
}
},
{
value: $r('app.string.menu_delete'),
action: () => {
this.message = 'Delete'
}
}
]
})
})
}
}
}
✅ $r('app.string.xxx') 会自动根据系统语言加载对应资源。
如果你的 App 支持手动切换语言:
import resourceManager from '@ohos.resourceManager'
let context = getContext(this)
resourceManager.getResourceManager((err, mgr) => {
mgr.getStringByName('menu_copy', (err, value) => {
console.info(value)
})
})
或者:
let value = await mgr.getStringByName('menu_copy')
然后在菜单构建时动态赋值。
如果是 JS 开发:
this.menuItems = [
{ label: this.$t('strings.menu_copy') },
{ label: this.$t('strings.menu_delete') }
]
$t 依赖 i18n 配置。
// ❌ 错误
value: '复制'
this.abilityContext.reload()
如果你用的是 OpenHarmony 具体版本(3.2 / 4.0 / 5.0) 或 ArkTS / JS / FA / Stage 模型,我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。