欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SwiftUI Localization 教程含源码

程序员文章站 2024-03-24 12:59:28
...

现在,我们已经在今年的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更具可读性和易用性,但它们确实存在一些最大的缺陷:

原文

https://dev.to/jeehut/safer-localization-in-swiftui-4gn8