SwiftUI的多语言带参String替换注意事项

356 阅读1分钟

在下面的带参数这种替换

"%@ liked you" = "%@点赞了你";

实例化的带参字符串必须直接用TextLocalizedStringKey包裹才行。

正确例子:

CapsuleTips(msg: LocalizedStringKey("\(rankLikeMsgsModel.list[0].userName) liked you"))
struct CapsuleTips: View {
    var msg: LocalizedStringKey
    var body: some View {
        Text(msg)
    }
}

错误例子

CapsuleTips(msg: "\(rankLikeMsgsModel.list[0].userName) liked you")
struct CapsuleTips: View {
    var msg: String
    var body: some View {
        Text(LocalizedStringKey(msg))
    }
}

原因猜测,带参的字符串,在直接被TextLocalizedStringKey包裹时才做替换。像错误例子中的msg 传到CapsuleTips后已经是一个String了,后来再给LocalizedStringKey也没办法区分它是一个带参String还是普通String,所以只能认为它是一个普通String来做多语言替换了。
假如这时候多语言刚好有这个String,那么就替换成功,没有的话就直接显示了。