在下面的带参数这种替换
"%@ liked you" = "%@点赞了你";
实例化的带参字符串必须直接用Text或LocalizedStringKey包裹才行。
正确例子:
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))
}
}
原因猜测,带参的字符串,在直接被Text或LocalizedStringKey包裹时才做替换。像错误例子中的msg 传到CapsuleTips后已经是一个String了,后来再给LocalizedStringKey也没办法区分它是一个带参String还是普通String,所以只能认为它是一个普通String来做多语言替换了。
假如这时候多语言刚好有这个String,那么就替换成功,没有的话就直接显示了。