数组内字符串的SwiftUI本地化

n8ghc7c1  于 2023-01-25  发布在  Swift
关注(0)|答案(3)|浏览(144)

我试图在英语和德语本地化我的应用程序和一切工作的现在,预计字符串内的数组显然得到不本地化。
我有这样一个数组,它保存了我的Picker的选项:

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.字符串(德语):

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

所以我试着把它写成字符串,这是现在使用本地化最简单的方法。
我也尝试过将it用作变量,但这不起作用:

let localizedString1 = "Newest First"
let localizedString2 = "Oldest First"

let sorting = [localizedString1, localizedString2]

我也看到了这个帖子:
Swift: Localize an Array of strings
但是就像答案上的评论所说的,有没有办法得到一些示例代码?或者现在有没有更好的方法?

bf1o4zei

bf1o4zei1#

Text documentation中所述:
如果你用变量值初始化一个文本视图,视图使用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))
kkbh8khc

kkbh8khc2#

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

它对我起作用

vom3gejh

vom3gejh3#

数组的缺省类型为String,您可以将该类型指定为LocalizedStringKey

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

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

相关问题