最近在做国际化时,发现当需要国际化的字符串中嵌入变量时,无法像Swift里字符串的语法糖使用"\(xxx)"来使其生效
全网找了很久,发现都是很老的资料,而且描述都很不清楚,特地整理一下,做个记录
当使用NSLocalizedString("", comment: "") 方法时,我们都知道,第一个参数传入key,第二个参数是对key的注释
在key中,我们无法像日常使用字符串那样通过“\(xxx)”来传入变量,这样系统无法识别这个key在Localizable.strings中的对应。从而直接展示了key中的字符,无法实现我们想要的国际化效果。
解决的方法如下
在Localizable.strings中,key需要这么声明,举个栗子
"welcome %@ enterRoom" = "欢迎 %1$@ 进入直播间";
这是一个key,在key中,我们需要传入的变量,以%@替代,而在后面对应的值中,变量以 %1$@ 指代
这里的%1$@就是第一个参数的标识符,同理,多个参数的情况下,第二个参数就是%2$@ 以此类推
注意:不要写 %0$@哦,这里的顺序就是从1开始,%0$@是不生效的
这里解决了Localizable.strings中获取变量标识符的问题,传参应该怎么做呢,如下所示
当我们使用这个key的时候,是这样的
let textLabel = UILabel()
var showText = "测试字符"
override func viewDidLoad() {
super.viewDidLoad()
textLabel.text = String(format: NSLocalizedString("welcome %@ enterRoom", comment: "欢迎xxx进入直播间"), showText)
}
也就是说,需要使用曾经的OC的format的方式来传参,这样才会被识别。从而完成我们想要的效果
就是这样
如果对你有帮助的话,记得点赞哦