温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

OpenHarmony菜单怎么国际化

发布时间:2026-09-19 18:36:40 来源:亿速云 阅读:84 作者:小樊 栏目:软件技术

在 OpenHarmony(ArkUI / eTS 或 JS 开发)中,菜单(Menu)的国际化(i18n)通常和应用的国际化方案是一致的,核心思路是:文本不直接写死,而是从资源文件中读取。

下面按常见做法说明。


一、使用 OpenHarmony 的 i18n 资源(推荐)

1. 目录结构

在 resources 下按语言建立目录:

resources/
 ├─ base/
 │   └─ element/
 │       └─ string.json
 ├─ en_US/
 │   └─ element/
 │       └─ string.json
 ├─ zh_CN/
 │   └─ element/
 │       └─ string.json

2. 字符串定义

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"
    }
  ]
}

二、在 Menu 中使用国际化文本

ArkUI(eTS)示例

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 支持手动切换语言:

1. 使用 ResourceManager

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 / 类 Web 开发(FA 模型)

如果是 JS 开发:

this.menuItems = [
  { label: this.$t('strings.menu_copy') },
  { label: this.$t('strings.menu_delete') }
]

$t 依赖 i18n 配置。


五、常见注意点

  1. 不要写死中文/英文
    // ❌ 错误
    value: '复制'
    
  2. 菜单文案、Toast、Dialog 都应统一走 i18n
  3. 语言切换后,若未自动刷新,可调用:
    this.abilityContext.reload()
    

如果你用的是 OpenHarmony 具体版本(3.2 / 4.0 / 5.0) 或 ArkTS / JS / FA / Stage 模型,我可以给你更精确的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手