iOS国际化处理带参变量(Swift)

最近在做国际化时,发现当需要国际化的字符串中嵌入变量时,无法像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的方式来传参,这样才会被识别。从而完成我们想要的效果

就是这样

如果对你有帮助的话,记得点赞哦

你可能感兴趣的:(iOS国际化处理带参变量(Swift))