数组中字符串的SwiftUI本地化



我正在尝试用英语和德语本地化我的应用程序,目前一切正常,只是数组中的字符串显然没有本地化。

我有这个数组,它包含了我的选择器的选项:

let sorting = ["Newest First", "Oldest First"]

这是我的Picker,它在功能方面工作正常:

Picker("Sort by", selection: $sortingSelection) {
ForEach(sorting, id: .self) {
Text($0)
.foregroundColor(.accentColor)
.font(.footnote)
}
}
.pickerStyle(MenuPickerStyle())

这是相关的Localizable.strings(德语(:

"Newest First" = "Neueres Zuerst";
"Oldest First" = "Älteres Zuerst";

所以我试着把它写成字符串,这是现在使用本地化的最简单方法。

我也试着用它作为一个变量,但这不起作用:

let localizedString1 = "Newest First"
let localizedString2 = "Oldest First"
let sorting = [localizedString1, localizedString2]

我还看到了这个帖子:

Swift:本地化字符串数组

但正如答案上的评论所说,有没有办法获得一些示例代码?或者现在有更好的方法吗?

如文本文档所述:

如果使用变量值初始化文本视图,则该视图将使用init(:(初始化器,该初始化器不会本地化字符串。但是,您可以通过首先创建LocalizedStringKey实例来请求本地化,该实例会触发init(:tableName:bundle:comment:(初始值设定项:

// Don't localize a string variable...
Text(writingImplement)

// ...unless you explicitly convert it to a localized string key.
Text(LocalizedStringKey(writingImplement))

数组默认为类型String,您可以将类型指定为LocalizedStringKey

let sorting: [LocalizedStringKey] = ["Newest First", "Oldest First"]

您可能还需要更改选择类型以使它们匹配。

这对我有效:

Picker("Select Category", selection: $transactionTypeString) {
ForEach(transactionTypes, id:.self) {
Text(LocalizedStringKey($0))
}
}

最新更新