HarmonyOS 鸿蒙Next中多语言,语言包里占位符的顺序问题
HarmonyOS 鸿蒙Next中多语言,语言包里占位符的顺序问题
// resources/zh/element/string.json (中文)
{
"string": [
{
"name": "welcome_message",
"value": "%s,欢迎来到%s!"
}
]
}
// resources/en-US/element/string.json (英文)
{
"string": [
{
"name": "welcome_message",
"value": "Welcome to %s, %s!"
}
]
}
这字符串有两个占位符,它们的先后顺序是有意义的,但传参顺序是固定的,
Text($r('app.string.welcome_message', '张三', '北京'))
有什么解决办法吗?
是否存在有顺序意义的占位符?比如 %s1 %s2 这样
或者支持这样也行:
“Welcome to {city}, {name}!”
Text($r(‘app.string.welcome_message’, {name: ‘张三’, city: ‘北京’}))
更多关于HarmonyOS 鸿蒙Next中多语言,语言包里占位符的顺序问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
已经找到解决办法。
选择发现,原来%n$s %n$d 是生效的。
"测试 2: %2$s, 1: %1$s"
写成这样,然后,
在build()中用 $r()
在代码中
let str = this.getUIContext().getHostContext()?.resourceManager.getStringSync($r('app.string.test'), 'aaa', 'bbb');
console.log(str)
更多关于HarmonyOS 鸿蒙Next中多语言,语言包里占位符的顺序问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
不支持传参吧
支持的,已测,
在HarmonyOS Next多语言资源中,占位符顺序由资源文件定义。使用$
加数字(如$1
、$2
)表示占位符,顺序需与代码中传入参数顺序一致。例如字符串定义为"file_count": "找到$1个文件,共$2个"
,调用时this.context.resourceManager.getStringValue($r('app.string.file_count').id, [$1, $2])
需确保$1
、$2
按定义顺序对应参数。顺序错乱将导致显示异常。
在HarmonyOS Next中,目前占位符按顺序匹配,不支持命名占位符或索引占位符(如%s1、%s2)。对于不同语言占位符顺序差异的问题,建议采用以下方案:
-
统一占位符顺序
调整各语言字符串,使占位符顺序一致。例如将英文改为:"value": "%s, welcome to %s!"
调用时保持参数顺序:
Text($r('app.string.welcome_message', '张三', '北京'))
-
拆分多语言字符串
若顺序无法统一,可拆分为两个独立字符串分别处理,例如:- 姓名部分:
"greeting": "Hello, %s"
- 地点部分:
"location": "Welcome to %s"
组合使用:Text($r('app.string.greeting', '张三') + $r('app.string.location', '北京'))
- 姓名部分:
-
动态拼接字符串
通过逻辑代码处理顺序差异,例如根据语言环境选择拼接方式:const name = '张三'; const city = '北京'; const message = isZh ? `${name},欢迎来到${city}!` : `Welcome to ${city}, ${name}!`; Text(message);
当前框架未提供类似{name}
或%s1
的占位符语法,需通过以上方式适配多语言顺序差异。