开天辟地 HarmonyOS(鸿蒙) - 资源: 国际化
开天辟地 HarmonyOS(鸿蒙) - 资源: 国际化
示例如下:
pages\resource\InternationalizationDemo.ets
/*
* 国际化
*
* i18n 是 internationalization 的缩写
*
* 中文资源 src/main/resources/zh_CN
* 英文资源 src/main/resources/en_US
* 默认资源 src/main/resources/base
*/
import { TitleBar } from '../TitleBar'
import { i18n, intl } from '@kit.LocalizationKit'
import { BusinessError } from '@kit.BasicServicesKit'
import { common } from '@kit.AbilityKit'
@Entry
@Component
struct LocalizationDemo {
build() {
Column() {
TitleBar()
Tabs() {
TabContent() { MySample1() }.tabBar('基础').align(Alignment.Top)
}
.scrollable(true)
.barMode(BarMode.Scrollable)
.layoutWeight(1)
}
}
}
@Component
struct MySample1 {
@State message: string = ""
context = getContext(this) as common.UIAbilityContext;
build() {
Column({space:10}) {
// 获取当前应用的偏好语言的对应的资源中的字符串(如果找不到语言对应的资源的话,则使用默认资源)
Text($r('app.string.hello_webabcd'))
Text(this.message)
Button("获取国际化的相关信息").onClick(() => {
/*
* Locale - 区域信息
* language - 区域的语言,比如 zh
* 标准参见 https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
* script - 区域的书写方式,比如 Hans
* 标准参见 https://en.wikipedia.org/wiki/ISO_15924
* region - 区域的国家或地区,比如 CN
* 标准参见 https://en.wikipedia.org/wiki/ISO_3166-1
* baseName - 区域的全名,比如 zh-Hans-CN
*/
let locale = new intl.Locale();
/*
* i18n.System.getAppPreferredLanguage() - 获取应用的偏好语言
* i18n.System.setAppPreferredLanguage() - 设置应用的偏好语言
*/
// 应用的偏好语言,比如 zh-Hans
let appPreferredLanguage = i18n.System.getAppPreferredLanguage();
// 系统的偏好语言列表
let preferredLanguageList = i18n.System.getPreferredLanguageList();
// 系统的偏好语言列表中的第一个偏好语言
let firstPreferredLanguage = i18n.System.getFirstPreferredLanguage();
this.message += `language:${locale.language}\n`
this.message += `script:${locale.script}\n`
this.message += `region:${locale.region}\n`
this.message += `baseName:${locale.baseName}\n`
this.message += `appPreferredLanguage:${appPreferredLanguage}\n`
this.message += `preferredLanguageList:${preferredLanguageList.join(",")}\n`
this.message += `firstPreferredLanguage:${firstPreferredLanguage}\n`
})
Button("设置语言为 zh").onClick(() => {
i18n.System.setAppPreferredLanguage("zh");
})
Button("设置语言为 en").onClick(() => {
i18n.System.setAppPreferredLanguage("en");
})
// 找不到语言对应的资源,则使用默认资源
Button("设置语言为 de").onClick(() => {
i18n.System.setAppPreferredLanguage("de");
})
// 设置一个非法语言,则会抛出异常
Button("设置语言为 xxx").onClick(() => {
try {
i18n.System.setAppPreferredLanguage("xxx");
} catch (error) {
let err: BusinessError = error as BusinessError;
this.message += `error code:${err.code}, message:${err.message}\n`
}
})
Button("获取指定的语言的对应的资源中的字符串").onClick(() => {
// 获取当前的资源管理器
let resourceManager = this.context.resourceManager
// 自定义资源管理器的配置,以便加载 en 资源
let overrideConfiguration = resourceManager.getOverrideConfiguration()
overrideConfiguration.locale = "en"
// 获取自定义的资源管理器,其加载的是 en 资源
let overrideResourceManager = resourceManager.getOverrideResourceManager(overrideConfiguration)
// 根据资源 id 加载其对应的字符串(同步),类似的方法还有 getColorSync(), getMediaContentSync() 等
let a = overrideResourceManager.getStringSync($r('app.string.hello_webabcd').id)
this.message += `英文资源:${a}\n`
// 根据资源 name 加载其对应的字符串(同步),类似的方法还有 getColorByNameSync(), getMediaByNameSync() 等
let b = overrideResourceManager.getStringByNameSync('hello_webabcd')
this.message += `英文资源:${b}\n`
// 根据资源 id 加载其对应的字符串(异步),类似的方法还有 getColor(), getMediaContent() 等
overrideResourceManager.getStringValue($r('app.string.hello_webabcd').id, (error: BusinessError, value: string) => {
this.message += `英文资源:${value}\n`
});
// 根据资源 name 加载其对应的字符串(异步),类似的方法还有 getColorByName(), getMediaByName() 等
overrideResourceManager.getStringByName('hello_webabcd', (error: BusinessError, value: string) => {
this.message += `英文资源:${value}\n`
});
})
}
}
}
\entry\src\main\resources\base\element\string.json
{
"string": [
{
"name": "module_desc",
"value": "module description"
},
{
"name": "EntryAbility_desc",
"value": "description"
},
{
"name": "EntryAbility_label",
"value": "label"
},
{
"name": "hello_webabcd",
"value": "hello webabcd"
}
]
}
\entry\src\main\resources\zh_CN\element\string.json
{
"string": [
{
"name": "module_desc",
"value": "模块描述"
},
{
"name": "EntryAbility_desc",
"value": "description"
},
{
"name": "EntryAbility_label",
"value": "label"
},
{
"name": "hello_webabcd",
"value": "你好,你好,你好"
}
]
}
\entry\src\main\resources\en_US\element\string.json
{
"string": [
{
"name": "module_desc",
"value": "module description"
},
{
"name": "EntryAbility_desc",
"value": "description"
},
{
"name": "EntryAbility_label",
"value": "label"
},
{
"name": "hello_webabcd",
"value": "hello, hello, hello"
}
]
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2012-02-06 千呼万唤 HTML 5 (6) - 表单元素之 input 元素