SwiftUI Text():使用三元条件不本地化
Posted
技术标签:
【中文标题】SwiftUI Text():使用三元条件不本地化【英文标题】:SwiftUI Text(): Using ternary conditional not localizing 【发布时间】:2020-01-12 20:38:52 【问题描述】:我在有条件地打印本地化文本时遇到问题。例如,这可以正确本地化:
if valueFromDb.isEmpty
Text("value_is_empty") //localized text
else
Text(valueFromDb)
如果 valueFromDb 为空,它会以用户的语言打印一些文本,如果 valueFromDb 不是,它会按原样打印。但是,当我尝试使用三元运算符时,它不起作用:
Text(valueFromDb.isEmpty ? "value_is_empty" : valueFromDb)
当 valueFromDb 为空时,它会打印“value_is_empty”而不是实际的本地化文本。尝试将其转换为 LocalizedStringKey 时,我得到一个错误(由于 SwiftUI,在层次结构中的随机更高)。
编辑:明确地说,我知道我可以这样做:
valueFromDb.isEmpty ? Text("value_is_empty") : Text(valueFromDb)
但是,我想将三元条件放在 Text() 括号内,因为我会为多个视图执行此操作,并且每个视图都有很多修饰符,因此代码会变得非常臃肿。
【问题讨论】:
【参考方案1】:问题是由类型推断引起的。您必须将 myString
声明为 LocalizedStringKey
类型,然后一切都会按预期工作。
当您声明时:
@State var mySrtring: LocalizedStringKey = "whatever"
然后:
Text(myString.isEmpty ? "error_text_localized" : myString)
使用这个初始化器:
public init(_ key: LocalizedStringKey, 表名:字符串? = 无, 捆绑:捆绑? = 无, 评论:静态字符串? = 无)
当你这样声明时:
@State var mySrtring: String = "whatever"
然后:
Text(myString.isEmpty ? "error_text_localized" : myString)
使用这个初始化器:
公共初始化(逐字内容:字符串)
【讨论】:
我怀疑是因为这样的事情。但这对我也不起作用,因为“myString”指的是从数据库中检索的用户输入数据。我想我的例子对我的用例来说不是很明显,所以我会更新这个问题。 在我尝试导出本地化的情况下,即使将字符串声明为 LocalizedStringKey 似乎也无济于事。它被忽略了。如果手动添加它可能会起作用,但导出步骤会忽略 LocalizedStringKey 的 :/【参考方案2】:您必须将您的 valueFromDb 放在引号中,然后它应该可以正常工作。
Text(valueFromDb.isEmpty ? "value_is_empty" : "\(valueFromDb)")
【讨论】:
以上是关于SwiftUI Text():使用三元条件不本地化的主要内容,如果未能解决你的问题,请参考以下文章