SwiftUI Localization 教程含源码
现在,我们已经在今年的WWDC上看到了SwiftUI的许多改进,包括甚至可以在App级别上使用完整的SwiftUI(我认为AppDelegate现在已被弃用)的可能性,我才刚刚开始研究我的第一个由SwiftUI驱动的纯正应用程序。
到目前为止,虽然我编写的大多数UI代码都很有趣,而且我正在学习一些技巧来处理数据管理,但我非常想知道的是SwiftUI是否以及如何更改和改进了本地化API。也一样到目前为止,我从Apple那里看到的示例以及所有流行的帖子和指南并没有真正在其中进行任何详细说明,而看起来本地化以某种方式神奇地融入了SwiftUI视图中。
实际上,实际上是这样,至少简单地指定了一个诸如Text(“ E-Mail”)之类的视图,然后将键“ E-Mail”放入Localizable.strings文件中+为其他语言提供不同的翻译工作。
进一步研究它的工作原理,我很快发现了提供魔术的类型:LocalizedStringKey。 SwiftUI视图(例如Text)将这种类型的实例作为其第一个参数,并且因为LocalizedStringKey符合ExpressibleByStringLiteral协议,因此在上面的示例中,可以使用字符串文字(如“ E-Mail”),它们会自动转换为LocalizedStringKey结构的实例。
在查看LocalizedStringKey符合哪些其他协议后,我发现ExpressibleByStringInterpolation,该协议是通过SE-228在Swift 5中以新形式引入的。直到我看到Apple如何使用此协议进行本地化之前,我都完全不知道它的存在,但是当然已经有NSHipster关于它的文章,这只会破坏它的有用性。这是一个用法方面的示例:
Text("Hello, \(name)") // => "Hello, %@"
Text("Last updated \(date, formatter: dateFormatter)") // => "Last updated %@"
尽管所有这些使新的API比旧的NSLocalizedString API更具可读性和易用性,但它们确实存在一些最大的缺陷:
原文
推荐阅读
-
SwiftUI Localization 教程含源码
-
sheet(isPresented:onDismiss:content:) (SwiftUI 中文文档手册 教程含源码)
-
SwiftUI 实战之现代感日期选择组件(UIDatePicker 教程含代码)
-
SwiftUI实战之Picker带Image和图标效果(教程和源码)
-
SwiftUI 布局之alignmentGuide如何让一个组件居中另外一个组件向上偏移(教程含源码)
-
SwiftUI 实现IF语句控制View显示 (教程含源码)
-
SwiftUI基础之Form与Picker和DataPicker组合使用(教程含源码)
-
SwiftUI源码之数据选择Picker弹出式UI(教程含源码)
-
SwiftUI基础之List 删除行操作,实现TODO App(含源码)
-
SwiftUI 兼容1和2 全功能多行文本框TextField和TextEditor (经典教程含源码)