1. 资源分类
- 资源目录:base目录、限定词目录、rawfile目录、resfile目录
- 资源组目录:element、media、profile
2. 资源目录
- base目录:默认存在目录,二级子目录
- element存放字符串、颜色、布尔值等基础元素
- media:媒体、图片资源等资源文件
- profile:动画、布局等资源文件
- 限定词目录:en_US和zh_CN默认存在的限定词目录,二级目录结构与base目录类似,限定词命名通过下划线(_)或者中划线(-)链接,遵循命名要求。
- rawfile目录:支持创建多层子目录,通过指定文件路径和文件名访问。
- resfile目录:资源文件会被直接打包进应用,不会经过编译,没有资源文件id,应用安装后,被解压到应用的沙盒路径,通过Context属性resourceDir获取到resfile资源目录后,可通过文件路径访问。
3. 资源组目录:
4. 资源可翻译特性:
通过attr属性标记字符串翻译范围和翻译状态
"attr": {
"translatable": false|true
"priority": "code|translate|LT|customer"
}
在string资源配置attr属性示例:
5. 资源访问
- 单HAP包
- 对于“color”、“float”、“string”、“plural”、“media”、“profile”等类型的资源,通过"$r('app.type.name')"形式访问。
- 对于string.json中使用多个占位符的情况,通过$r('app.string.placeholder_label','Jason',1)形式访问,字符串%s,数字%d,
- rawfile目录资源,通过"$rawfile('filename')"形式访问。其中,filename为rawfile目录下文件的相对路径,文件名需要包含后缀,路径开头不可以"/"开头。
- 通过上下文context获取ResourceManager后,调用不同资源管理接口访问不同资源。
6. 系统资源访问
对于系统资源,可以通过“$r('sys.type.resource_name')”的形式访问。其中,sys表示系统资源;type为资源类型,取值包括“color”、“float”、“string”、“media”、“symbol”;resource_name为资源名称。
7. 获取指定的配置资源
示例: 多语言获取文案内容
1. 根据上下文获取资源id
let resMgr = getContext().resourceManager
let resId = $r('app.string.greetings').id
2. 获取当前系统语言的资源
let currentLanguageString = resMgr.getStringSync(resId)
3. 获取英文语言资源
let overrideConfig = resMgr.getOverrideConfiguration()
overrideConfig.locale = "en_US"
let overrideResMgr = resMgr.getOverrideResourceManager(overrideConfig)
let englishString = overrideResMgr.getStringSync(resId)
4. 获取德文
overrideConfig.locale = "de_DE" //指定资源的语言为德语,地区为德国
//等效于resMgr.updateOverrideConfiguration(overrideConfig)
overrideResMgr.updateOverrideConfiguration(overrideConfig)
let germanString = overrideResMgr.getStringSync(resId)