HarmonyOS资源分类与访问

146 阅读2分钟

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属性示例: string资源

5. 资源访问

  • 单HAP包
    • 对于“color”、“float”、“string”、“plural”、“media”、“profile”等类型的资源,通过"$r('app.type.name')"形式访问。
    • 对于string.json中使用多个占位符的情况,通过$r('app.string.placeholder_label','Jason',1)形式访问,字符串%s,数字%d, image.png
    • rawfile目录资源,通过"$rawfile('filename')"形式访问。其中,filename为rawfile目录下文件的相对路径,文件名需要包含后缀,路径开头不可以"/"开头。
    • 通过上下文context获取ResourceManager后,调用不同资源管理接口访问不同资源。 context.png

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)