问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

HarmonyOS应用实现APP国际化多语言切换

创作时间:
作者:
@小白创作中心

HarmonyOS应用实现APP国际化多语言切换

引用
CSDN
1.
https://blog.csdn.net/superherowupan/article/details/143157080

在移动应用开发中,国际化(i18n)是一个重要的功能,它能让应用支持多种语言,从而覆盖更广泛的用户群体。本文将详细介绍如何在HarmonyOS中实现应用的多语言切换,包括跟随系统语言切换和应用独立语言切换两种方式。

前言

在鸿蒙系统中实现应用国际化处理,与Android和iOS的基本原理相似,都是通过JSON配置不同的语言文本内容。在UI展示时,使用JSON配置的字段key进行调用,系统会根据当前语言环境选择对应的文本内容。

跟随系统多语言切换

最常见的处理方式是配置不同语言的JSON文件。以中英文为例:

  1. 首先需要在资源文件对应的语言JSON文本字符串配置表中,进行key和value的配置:
  • zh_CN 代表中文
  • en_US 代表英文
  • base-element 中的 string.json 是默认配置,必须填写。如果创建了对应语言文件夹但未在默认配置中填写对应字段节点,系统会报错。
  1. 配置好字段文本内容后,在UI中引用即可:

    $r("app.string.xxx");
    例如:
    $r("app.string.test_content");
    

创建语言资源文件夹

  1. 在资源文件夹 resources 右键,选择新增资源文件夹:

  2. 在弹出的对话框中选择 Locale,点击右侧按钮,显示语言和地区:

  3. 以英语为例,在语言列表中使用英文输入法可以触发筛选搜索框,选择对应的语言和地区,点击OK即可生成。

APP独立多语言切换

当需要APP应用的语言独立于系统设置时,可以通过设置应用优先语言来实现。例如,系统语言是中文,但应用需要显示英文。

try {
  i18n.System.setAppPreferredLanguage("zh"); // 设置应用偏好语言为zh-Hans
} catch(error) {
  let err: BusinessError = error as BusinessError;
  console.error(`call System.setAppPreferredLanguage zh failed, error code: ${err.code}, message: ${err.message}.`);
}

DEMO示例

启动页测试代码:

import { i18n } from '@kit.LocalizationKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  @State message: string | Resource = $r("app.string.test_content");

  build() {
    Column() {
      Text(this.message).fontSize(50)
      Text("切换中文").fontSize(50)
      .onClick(()=>{
        // 设置语言偏好
        try {
          i18n.System.setAppPreferredLanguage("zh"); // 设置应用偏好语言为zh-Hans
        } catch(error) {
          let err: BusinessError = error as BusinessError;
          console.error(`call System.setAppPreferredLanguage zh failed, error code: ${err.code}, message: ${err.message}.`);
        }
      })
      Text("切换英文").fontSize(50)
        .onClick(()=>{
          // 设置语言偏好
          try {
            i18n.System.setAppPreferredLanguage("en");
          } catch(error) {
            let err: BusinessError = error as BusinessError;
            console.error(`call System.setAppPreferredLanguage en failed, error code: ${err.code}, message: ${err.message}.`);
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}

英文配置

{
  "string": [
    {
      "name": "module_desc",
      "value": "module description"
    },
    {
      "name": "EntryAbility_desc",
      "value": "description"
    },
    {
      "name": "EntryAbility_label",
      "value": "label"
    },
    {
      "name": "test_content",
      "value": "English"
    }
  ]
}

中文配置

{
  "string": [
    {
      "name": "module_desc",
      "value": "模块描述"
    },
    {
      "name": "EntryAbility_desc",
      "value": "描述"
    },
    {
      "name": "EntryAbility_label",
      "value": "标签"
    },
    {
      "name": "test_content",
      "value": "中文"
    }
  ]
}

默认配置

{
  "string": [
    {
      "name": "module_desc",
      "value": "模块描述"
    },
    {
      "name": "EntryAbility_desc",
      "value": "描述"
    },
    {
      "name": "EntryAbility_label",
      "value": "标签"
    },
    {
      "name": "test_content",
      "value": "中文"
    }
  ]
}

多语言国际化国家ID列表

更多语言ID可以在【有道云笔记】国家ID列表中查找。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号