HarmonyOS 鸿蒙Next resourceManager.getStringSync()不支持充填$r函数中参数吗?
HarmonyOS 鸿蒙Next resourceManager.getStringSync()不支持充填$r函数中参数吗?
string.json
假设string.json中有格式字符串format_text
{
“name”: “format_text”,
“value”: “%s(%s)”
}
代码
代码中通过resourceManager.getStringSync尝试获取字符串,并在$r函数中充填了参数’aaa’和’bbb’
let a = getContext(this).resourceManager.getStringSync(
$r(‘app.string.format_text’, ‘aaa’, ‘bbb’)
);
Logger.d(“test”, a);
执行日志
日志结果可以看到,aaa和bbb并未成功充填,还是返回了格式字符的原文
16:22:13.287 A0FF00/test D %s(%s)
请问这个有改善方案吗?目前似乎未找到从string.json中获取string对象且进行格式化赋值的有效方案。
let a = getContext(this).resourceManager.getStringSync(
$r('app.string.format_text'), 'aaa', 'bbb' // 不是填在$r()的参数中
);
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-resource-manager-V5
在HarmonyOS鸿蒙系统中,resourceManager.getStringSync()
方法通常用于同步获取资源文件中的字符串。关于你提到的 $r
函数中参数的支持问题,需要明确的是,$r
函数通常用于资源引用,特别是在XML布局文件或某些特定上下文中动态解析资源。
在代码层面,resourceManager.getStringSync()
是直接调用资源ID来获取字符串值的,它并不直接支持 $r
这种资源引用格式的解析。如果你在代码中尝试将 $r
格式的资源引用传递给 getStringSync()
,这通常是不会被正确解析的,因为该方法期望的是一个资源ID而不是一个字符串格式的资源引用。
正确的做法应该是先通过资源管理工具(如 ResourceTable
)获取到具体的资源ID,然后再调用 getStringSync()
方法。例如:
String myString = resourceManager.getStringSync(ResourceTable.String_my_string_id);
其中 ResourceTable.String_my_string_id
是资源文件中定义的字符串资源的ID。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。