HarmonyOS 鸿蒙Next 请问resourceManager.getStringSync如何国际化?

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 请问resourceManager.getStringSync如何国际化?

你好,请问resourceManager.getStringSync方法如何做到国际化?比如,应用的默认语言是中文,如果将应用语言从中文设置为英文后,杀死后台重新进入应用,通过resourceManager.getStringSync获得的还是中文,而不是英文,请问这个要怎么处理?

2 回复

目前你可以查询系统当前支持的语言,然后通过设置应用偏好的语言来改变当前需要显示的语言,请注意如果要使用国际化语言,首先要确保使用的国际化语言放在resource目录下string.json的文件中,如果未在此包下定义,设置应用偏好语言的时候是没有效果的, 系统支持语言参考文档: @ohos.i18n (国际化-I18n)-ArkTS API-Localization Kit(本地化开发服务)-应用框架 - 华为HarmonyOS开发者 系统偏好语言设置参考文档: @ohos.i18n (国际化-I18n)-ArkTS API-Localization Kit(本地化开发服务)-应用框架 - 华为HarmonyOS开发者 /******/ 可以参考下这个demo: import router from ‘@ohos.router’; import I18n from ‘@ohos.i18n’; @Component @Entry struct Index { status:number=0 build() { Column() { Text($r(‘app.string.module_desc’)) .onClick(() => { router.pushUrl({url:‘pages/Index2’}) }) Button(‘改变语言’).onClick(()=>{ if(this.status==0){ I18n.System.setAppPreferredLanguage(‘zh-Hans’); this.status=1 }else{ I18n.System.setAppPreferredLanguage(‘en-Latn-US’); this.status=0 } }) } } }


你可以参考以下文件

//index文件

import I18n from '[@ohos](/user/ohos).i18n';

import { common } from '@kit.AbilityKit';

[@Component](/user/Component) [@Entry](/user/Entry) struct Index {

  status:number=1

  context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext

  changeLanguage(){

    try {

      let contextStr = this.context.resourceManager.getStringSync($r('app.string.Language_change').id)

      console.log("11"+contextStr)

    } catch (error) {

      let code = (error as BusinessError).code;

      let message = (error as BusinessError).message;

      console.error(`getStringSync failed, error code: ${code}, message: ${message}.`);

    }

  }

  aboutToAppear(): void {

    this.changeLanguage();

  }

  build() {

    Column() {

      Text($r('app.string.Language_change'))

      Button('改变语言')

        .onClick(()=>{

          if(this.status==0){

            I18n.System.setAppPreferredLanguage('zh-Hans');

            this.status=1

          }else{

            I18n.System.setAppPreferredLanguage('en-Latn-US');

            this.status=0

          }

          setTimeout(()=>{

            this.changeLanguage();

          },5000)

        })

    }

    .margin({

      top:70

    })

  }

}

然后在resources目录下配置base/element/string.json文件en_US/element/string.json文件zh_US/element/string.json文件下配置对应的语言

最后在IDE导航菜单Run/Edit Configurations/Installation Options/Keep Application Data勾选

希望能够帮到你

更多关于HarmonyOS 鸿蒙Next 请问resourceManager.getStringSync如何国际化?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,resourceManager.getStringSync 方法用于同步获取资源文件中的字符串。要实现国际化(i18n),你需要按照以下步骤操作:

  1. 资源文件准备: 为不同的语言准备不同的资源文件。例如,strings_en.json 用于英文,strings_zh.json 用于中文。这些文件应放在resources目录下的相应语言文件夹中,如resources/en/resources/zh/

  2. 配置资源文件: 确保资源文件中定义了相同的键(key),但值(value)根据语言不同。例如:

    // strings_en.json
    {
        "hello": "Hello"
    }
    
    // strings_zh.json
    {
        "hello": "你好"
    }
    
  3. 获取国际化字符串: 在代码中,使用resourceManager.getStringSync时,传递对应的键即可。系统会根据当前设置的语言环境自动选择合适的资源文件:

    let resourceManager = this.context.getResourceManager();
    let localizedString = resourceManager.getStringSync("hello");
    
  4. 设置语言环境: 确保在运行时正确设置了应用的语言环境。这通常由系统设置或应用内的语言选择功能完成。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部