HarmonyOS鸿蒙Next中i18n getDisplayLanguage language和local如何确定
HarmonyOS鸿蒙Next中i18n getDisplayLanguage language和local如何确定
【解决方案】
getDisplayLanguage获取语言名称在指定语言下的翻译,language参数表示语言,要求是合法的语言ID,用户使用的语言,由2~3个小写英文字母组成,例如,中文使用“zh”表示。更多语言代码列表请参考ISO-639标准。
locale参数表示区域ID的字符串,由语言、脚本、国家地区组成,例如,获取英文下的翻译使用’en-GB’。参考区域语言与区域语言包对照关系。
参考示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { i18n } from '@kit.LocalizationKit';
try {
// 获取“中文”在英文下的翻译
let displayLanguage: string = i18n.System.getDisplayLanguage('zh', 'en-GB'); // displayLanguage = 'Chinese'
console.log('printf '+ displayLanguage)
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error(`call System.getDisplayLanguage failed, error code: ${err.code}, message: ${err.message}.`);
}
// 控制台打印
// printf Chinese
更多关于HarmonyOS鸿蒙Next中i18n getDisplayLanguage language和local如何确定的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
en-GB类似这样的有常量或者有对应的接口可以查询吗
【问题背景】
- i18n getDisplayLanguage language 和 local 如何确定?
【解答说明】
- 在国际化中,区域ID是对用户群体的抽象,包括用户语言、脚本(使用的文字系统,如中文可用简体字或繁体字)、所在国家或地区以及其他一些文化习惯(如历法、数字系统)等。区域ID是应用实现国际化能力的基础,开发过程中需通过区域ID对象控制和实现国际化行为。
- 区域ID由语言、脚本、国家地区和扩展参数四部分组成。其中,语言是必填内容,其余为选填内容,按照语言、脚本、国家地区和扩展参数的顺序通过“-”连接,详细说明可参考表1;支持的扩展参数参考表2;不同语言对应的数字系统参考表3,表中未列出的语言均使用阿拉伯数字系统。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
language |
string | 是 | 待查询名称的语言,需传入合法的语言 ID(如 “zh” 代表中文) |
locale |
string | 是 | 目标翻译语言的区域 ID,由 “语言 + 脚本 + 国家 / 地区” 组成(如 “en-GB” 代表英式英语) |
sentenceCase |
boolean | 否 | 控制文本大小写格式:- true:首字母大写(默认值)- false:按区域默认大小写 |
-
返回值:
- 类型:
string - 说明:
language参数对应的语言名称,在locale指定语言下的翻译结果(如传入language="zh"、locale="en-GB",返回 “Chinese”)
- 类型:
示例详解
通过导入LocalizationKit的i18n模块,调用接口获取 “中文” 在英式英语下的翻译,同时捕获可能的异常:
import { BusinessError } from '@kit.BasicServicesKit';
import { i18n } from '@kit.LocalizationKit';
try {
// 入参:待查询语言为“zh”(中文),目标翻译区域为“en-GB”(英式英语),使用默认首字母大写
let displayLanguage: string = i18n.System.getDisplayLanguage('zh', 'en-GB');
console.log(displayLanguage); // 输出结果:'Chinese'
} catch (error) {
// 捕获并打印错误信息
let err: BusinessError = error as BusinessError;
console.error(`调用失败:错误码 ${err.code},信息:${err.message}`);
}
language 的确定依据
- 需要展示本地化名称的原始语言代码
- 可通过系统接口动态获取
import { i18n } from '@kit.LocalizationKit';
let systemLanguage: string = i18n.System.getSystemLanguage(); // 如返回 'zh-Hans-CN'
locale 的确定依据
- 指定显示语言的目标区域
- 在英语环境下显示为"German",则 locale 设为 ‘en-US’。
import { i18n } from '@kit.LocalizationKit';
let currentLocale: string = i18n.System.getSystemRegion(); // 如返回 'CN'
参考地址
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-i18n
1. 参数 language 的确定
- 含义:
language是源语言代码,表示需要被翻译的语言(例如,要获取“中文”的英文名称,则language应为'zh')。 - 要求:必须是合法的语言 ID,通常采用 ISO 639 标准的两字母代码(如
'zh'表示中文,'en'表示英文)。完整列表可参考 ISO-639 标准。 - 如何获取:
- 可通过系统接口获取:
i18n.System.getSystemLanguage():获取系统当前语言(如'zh-Hans')。i18n.System.getPreferredLanguageList():获取系统偏好语言列表。i18n.System.getAppPreferredLanguage():获取应用偏好语言(如应用单独设置了语言)。
- 也可直接指定已知语言代码(如硬编码为
'fr'表示法语)。
- 可通过系统接口获取:
2. 参数 locale 的确定
- 含义:
locale是目标区域 ID,表示翻译结果应适配的语言环境(例如,将中文翻译成英文显示,则locale应为'en-GB')。 - 格式:由语言、脚本、国家/地区组成(如
'zh-Hans-CN'、'en-US'):- 语言(必填):ISO 639 两字母代码(如
'zh')。 - 脚本(可选):ISO 15924 四字母代码(如
'Hans'表示简体中文)。 - 国家/地区(可选):ISO 3166 两字母代码(如
'CN'表示中国)。
- 语言(必填):ISO 639 两字母代码(如
- 如何获取:
- 可通过系统接口获取:
i18n.System.getSystemLocaleInstance():获取系统当前区域对象(返回Intl.Locale类型)。i18n.System.getSystemLanguage()和i18n.System.getSystemRegion()组合成区域 ID(如'zh-CN')。
- 也可直接指定目标区域 ID(如需要德文翻译则设为
'de-DE')。
- 可通过系统接口获取:
3. 使用示例
import { i18n } from '@kit.LocalizationKit';
// 示例1:获取中文在英文环境下的显示名称
let displayName = i18n.System.getDisplayLanguage('zh', 'en-GB'); // 返回 "Chinese"
// 示例2:获取系统语言在应用偏好语言下的显示名称
let systemLang = i18n.System.getSystemLanguage(); // 如 'zh-Hans'
let appLocale = i18n.System.getAppPreferredLanguage(); // 如 'en-US'
let displayName2 = i18n.System.getDisplayLanguage(systemLang, appLocale);
相关文档:本地化语言与地区名称、应用偏好语言、应用内语言切换
对应设备系统设置里的语言和地区,国内一般是语言:简体中文;地区:中国。
在HarmonyOS Next中,i18n的getDisplayLanguage方法通过系统语言和区域设置确定显示语言。系统优先读取当前设备设置的language和locale参数,若未显式指定,则使用系统默认配置。开发者可通过系统API获取当前语言环境,无需手动干预底层逻辑。该方法返回符合Unicode CLDR标准的本地化语言名称,确保与系统语言设置一致。
在HarmonyOS Next中,getDisplayLanguage() 方法用于获取指定语言或区域的语言显示名称。其参数 language 和 locale 的确定方式如下:
-
language:指定目标语言的 BCP 47 语言标签(例如 “zh” 表示中文,“en” 表示英语)。系统会根据当前系统语言或指定区域设置返回该语言的本地化显示名称。
-
locale:可选参数,指定用于格式化的区域设置(例如 “zh-CN” 或 “en-US”)。如果未提供,默认使用系统当前区域。
示例代码:
import { i18n } from '@kit.I18nKit';
// 获取中文在英文区域下的显示名称
let displayName = i18n.getDisplayLanguage('zh', 'en-US'); // 返回 "Chinese"
// 使用系统区域获取德语显示名称
let germanDisplay = i18n.getDisplayLanguage('de'); // 在中文系统中返回 "德语"
该方法会根据区域设置自动适配语言名称的本地化格式,确保符合用户的语言习惯。

