【HarmonyOS NEXT】应用引用media中的字符串资源如何拼接字符串

一、问题背景:

鸿蒙应用中使用字符串资源加载,一般文本放置在resoutces-base-element-string.json字符串配置文件中。便于国际化的处理。当然小项目一般直接引用字符串,不需要加载string.json的配置。

【HarmonyOS NEXT】应用引用media中的字符串资源如何拼接字符串_HarmonyOS

// 普通文本引用
      Text("测试文本字符串")
      
      // 配置文本引用
      Text($r("app.string.test_label"))

上面普通文本引用,拼接字符串很好处理:

@State tempString: string = "";
  @State tempNum: number = 99;
 
      // 普通文本引用
      Text("测试文本字符串" + this.tempString + this.tempNum)

但如果是配置文本引用,如何拼接字符串呢?

二、解决方案:


  1. 在xx.json文本配置文件中,对变量拼接内容增加%d占位符来拼接,d代表数字,s代码字符串。
  2. 如果有国际化需求,多个配置文件都需要修改:
  3. 【HarmonyOS NEXT】应用引用media中的字符串资源如何拼接字符串_字符串_02

  4. 在引用文本配置时,第二个参数进行占位符的赋值。 赋值过程和字符串拼接的占位符从左到右的顺序一致

三、DEMO示例:

@Entry
@Component
struct TestPage {

  @State tempString: string = "";
  @State tempNum: number = 99;

  build() {
    Column() {
      // 普通文本引用
      Text("测试文本字符串" + this.tempString + this.tempNum)
      // 配置文本引用
      Text($r("app.string.test_label"))
      Text($r("app.string.test_label", 10, 99,"test"))
      Text($r("app.string.test_label", this.tempNum, this.tempNum, this.tempString))
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}
{
  "string": [
    {
      "name": "test_label",
      "value": "价格是%d个,你好%d位,哈哈哈哈%s"
    }
  ]
}