【鸿蒙学习】鸿蒙代码中的$r用来干啥的?[获取资源字符串与多语言切换指南]


在应用开发过程中,对于资源的有效管理和多语言支持是提升用户体验的关键因素。本文将介绍如何在鸿蒙(HarmonyOS)平台上获取资源文件中的字符串,并实现应用的多语言切换。

一、在鸿蒙开发中获取string.json中的数据

在鸿蒙(HarmonyOS)开发中,使用 $r 函数是获取资源的一种快捷方式,通常用于在 eTS(Extended TypeScript)文件中获取资源。这个函数可以帮助开发者直接引用 resources 目录下的资源,如字符串、颜色、图片等。
下面是如何在 eTS 文件中使用 $r 函数来获取 string.json 文件中的字符串资源的方法:

  1. 首先,确保在 resources 目录下的 base 目录中有一个 string.json 文件,并定义了相应的字符串资源。例如:
{
    
    
  "app_name": "MyApp",
  "hello_world": "Hello, World!"
}
  1. 在 eTS 文件中,使用 $r 函数来引用 string.json 文件中的字符串。你需要提供资源的完整路径(不包含文件扩展名)和资源名称。例如:
// 引入resource模块
import resource from '@ohos.resource';
// 使用$r函数获取字符串资源
let appName = $r('app.string.app_name');
let helloWorld = $r('app.string.hello_world');
// 在界面上显示字符串
text(appName)
text(helloWorld)

在上面的代码中,app 是资源组名称,string 是资源类型(对于 string.json 文件通常是 string),app_namehello_world 是在 string.json 文件中定义的键。
请注意,使用 $r 函数时,路径和资源名称需要根据你的项目结构和资源定义进行相应的调整。
如果你是在 Java 或 JavaScript 文件中进行开发,而不是 eTS,那么 $r 函数不可用。在那些情况下,你需要使用 ResourceManager 来获取资源。$r 函数是专门为 eTS 文件提供的语法糖。

二、在resoures中,base、en_US、zh_CN的作用

在 HarmonyOS(鸿蒙操作系统)的开发中,资源目录(resources)下的 baseen_USzh_CN 等文件夹用于管理不同语言环境的资源文件。以下是这些文件夹的作用和使用场景:

  1. base 文件夹:
    • 作用:base 文件夹用于存放默认的资源文件,这些资源是应用的基本资源,通常包括默认的语言(通常是英语)和通用的资源(如图片、布局文件等)。
    • 使用时机:当应用运行在未指定或未支持的语言环境中时,系统会使用 base 文件夹中的资源。
  2. en_US 文件夹:
    • 作用:en_US 文件夹用于存放美国英语的资源文件。在这个文件夹中,你会放置所有针对美国英语用户的本地化资源,如字符串、布局等。
    • 使用时机:当用户的设备语言设置为美国英语时,应用会使用 en_US 文件夹中的资源。
  3. zh_CN 文件夹:
    • 作用:zh_CN 文件夹用于存放简体中文的资源文件。这个文件夹包含了所有针对简体中文用户的本地化资源。
    • 使用时机:当用户的设备语言设置为简体中文时,应用会使用 zh_CN 文件夹中的资源。
      使用这些文件夹的步骤通常如下:
  • 开发阶段,首先在 base 文件夹中创建和定义所有默认资源。
  • 当需要本地化应用时,为每种支持的语言创建一个对应的文件夹(如 en_USzh_CN),并在这些文件夹中提供相应的本地化资源文件。
  • 在应用运行时,系统会根据用户的设备语言设置自动选择合适的资源文件夹。如果用户的语言设置与任何特定文件夹匹配,系统将使用该文件夹中的资源;如果没有匹配的文件夹,系统将回退到 base 文件夹中的默认资源。
    例如,如果你有一个 string.json 文件在 base 文件夹中,其内容如下:
// base/string.json
{
    
    
  "hello": "Hello"
}

zh_CN 文件夹中,你可以有一个对应的本地化文件:

// zh_CN/string.json
{
    
    
  "hello": "你好"
}

当用户设备设置为简体中文时,应用会显示 “你好”;如果设备设置为其他语言,则默认显示 “Hello”。

总结

通过以上步骤,你可以在鸿蒙平台上有效地管理应用资源,并实现多语言支持。这不仅能够提升应用的国际化水平,还能更好地满足不同用户群体的需求。在实现这些功能时,请确保遵循各平台的具体开发指南和最佳实践。

猜你喜欢

转载自blog.csdn.net/qq_15062089/article/details/142676065