OPenHarmony国际化开发

376 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

国际化开发

当应用具有多个在语言、时区、区域特性等方面存在显著差异的目标用户和市场时,开发者往往需要提供应用的多个本地化版本,以保证不同地区用户的体验。

应用的国际化能力决定了应用本地化过程的难易程度。系统提供了一系列的国际化接口,基于这些国际化接口,开发者可以设计并实现具有良好国际化能力的应用,从而可以高效、低成本的实现应用的本地化。

基本概念

  • Locale:Locale是对一个群体在语言、脚本、国家或区域,以及日历、排序、货币等区域特性方面的共性的抽象表示。

  • 偏好语言:偏好语言是用户设置过的语言,表示该语言是用户可接受的语言。用户可以在 设置/系统和更新/语言和输入法/语言和地区/添加语言中添加偏好语言。

运作机制

在调用国际化接口时,需要提供Locale信息,接口会依据该Locale的特性进行差异化的执行。Locale信息可以由开发人员通过硬编码的方式提供,但更通常的情况是使用用户设置的系统语言和区域。

获取系统语言区域信息

调用系统提供的接口访问系统的语言区域信息。

接口说明

模块接口名称描述
ohos.i18ngetSystemLanguage():string获取系统语言。
ohos.i18ngetSystemRegion():string获取系统区域。
ohos.i18ngetSystemLocale():string获取系统Locale。
ohos.i18nisRTL(locale:string):boolean7+locale对应的语言是否为从右到左语言。
ohos.i18nis24HourClock():boolean7+获取当前系统时间是否采用24小时制。
ohos.i18ngetDisplayLanguage(language:string,locale:string,sentenceCase?:boolean):string获取语言的本地化表示。
ohos.i18ngetDisplayCountry(country:string,locale:string,sentenceCase?:boolean):string获取国家的本地化表示。

开发步骤

  1. 获取系统语言。

    调用getSystemLanguage方法获取当前系统设置的语言(i18n为导入的模块)。

    var language = i18n.getSystemLanguage();
    
  2. 获取系统区域。

    调用getSystemRegion方法获取当前系统设置的区域

    var region = i18n.getSystemRegion();
    
  3. 获取系统Locale。

    调用getSystemLocale方法获取当前系统设置的Locale

    var locale = i18n.getSystemLocale();
    
  4. 判断Locale的语言是否为RTL语言。

    调用isRTL方法获取Locale的语言是否为从右到左语言。

    var rtl = i18n.isRTL("zh-CN");
    
  5. 判断当前系统时间是否采用24小时制。

    调用is24HourClock方法来判断当前系统的时间是否采用24小时制。

    var hourClock = i18n.is24HourClock();
    
  6. 获取语言的本地化表示。

    调用getDisplayLanguage方法获取某一语言的本地化表示。其中,language表示待本地化显示的语言,locale表示本地化的Locale,sentenceCase结果是否需要首字母大写。

    var language = "en";
    var locale = "zh-CN";
    var sentenceCase = false;
    var localizedLanguage = i18n.getDisplayLanguage(language, locale, sentenceCase);
    
  7. 获取国家的本地化表示。

    调用getDisplayCountry方法获取某一国家的本地化表示。其中,country表示待本地化显示的国家,locale表示本地化的Locale,sentenceCase结果是否需要首字母大写。

    var country = "US";
    var locale = "zh-CN";
    var sentenceCase = false;
    var localizedCountry = i18n.getDisplayCountry(country, locale, sentenceCase);