SwiftUI:大写视图的本地化字符串,例如`文本`?
Posted
技术标签:
【中文标题】SwiftUI:大写视图的本地化字符串,例如`文本`?【英文标题】:SwiftUI: Uppercase a localized string for a view, e.g. `Text`? 【发布时间】:2019-08-20 12:20:47 【问题描述】:使用 Xcode beta 6 和 SwiftUI,使用 >本地化 字符串创建 Text
视图,我怎样才能将其大写 而不必将本地化字符串值大写?我想我想要一个 ViewModifier
来更改大小写,但它似乎不存在?
Text("SignIn.Body.Instruction".uppercased())
会将本地化 key 大写,因此这将不起作用,如SO question about uppercasing a non-localized string 中所述。
【问题讨论】:
localizedCapitalized 不起作用吗? developer.apple.com/documentation/foundation/nsstring/… @yawnobleix 这是完全不同的事情:D。这是一个SwiftUI
问题。我们不能更改字符串本身,因为它指的是key的名称。
【参考方案1】:
将smallCaps
修饰符用于Font
怎么样?例如,Text("Hello World").font(Font.body.smallCaps())
将呈现 "HELLO WORLD"
,但底层字符串将保留其适当的本地化大写以方便访问。
【讨论】:
【参考方案2】:现在可以使用所有 new textCase
ViewModifier(Xcode 12 Beta 3),如下所示:
Text("SignIn.Body.Instruction")
.textCase(.uppercase)
或lowercase
:
Text("SignIn.Body.Instruction")
.textCase(.lowercase)
【讨论】:
【参考方案3】:手动本地化,然后大写。
extension String
func toUpperCase() -> String
return localized.uppercased(with: .current)
private var localized : String
return NSLocalizedString( self, comment:"")
Text("SignIn.Body.Instruction".toUpperCase())
【讨论】:
NSLocalizedString( self, comment:"")
不是一个好主意,因为 NSLocalizedString 的关键参数不是恒定的。因此 genstrings 和 Xcode Editor -> Export for Localization 无法选择它。短期内它可能很方便,但是当你以后必须在应用程序中手动查找所有要本地化的字符串时,它会咬你!
您不想使用大写的(),它适用于编程字符串,而不是面向用户的字符串,因为它不考虑语言环境。见.uppercased(with: Locale.current))
我不知道 .uppercased(with: Locale.current)) 感谢您的提示。至于 genstrings 的问题,您的观点非常有效,但是在 SwiftUI 中,我希望不必经常使用我的方法,大部分本地化将由 Text() 自动处理。以上是关于SwiftUI:大写视图的本地化字符串,例如`文本`?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI中Section视图里的文本全部变成大写显示的解决
带有 UIViewRepresentable 的 SwiftUI 自定义文本字段 ObservableObject 和推送视图的问题