(当前尝试使用Xcode 11 Beta 7)
我想将一个已经本地化的字符串传递给Text(),并使用“ .environment(.locale,.init(identifier:” ja“))”“在画布上查看其外观,但是预览始终设置为任何内容我在方案设置中设置的语言。
我知道,如果我直接传递LocalizedStringKey(例如Text(“ introTitle”)),则它可以工作,但是我不想这样做。相反,我想使用诸如Text(L10n.Intro.title)之类的枚举,但是当我这样做时,方案设置语言会覆盖环境运算符。
这是错误还是预期的行为?
struct ContentView: View {
var body: some View {
Text("introTitle") //this works
Text(L10n.Intro.title) //this doesn't
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ForEach(["en", "ja", "pt"], id: \.self) { localeIdentifier in
ContentView()
.environment(\.locale, .init(identifier: localeIdentifier)) //this gets ignored, and only the scheme settings language is previewed
.previewDisplayName(localeIdentifier)
}
}
}
internal enum L10n {
internal enum Intro {
internal static let title = NSLocalizedString("introTitle", comment: "")
internal static let title2 = "introTitle" //this also doesn't work
}
}
在 Localizable.strings 中,我有:
//英语
"introTitle" = "Welcome!";
//日语
"introTitle" = "ようこそ!";
//葡萄牙语
"introTitle" = "Bem-vindo(a)!";
答案 0 :(得分:2)
我的首选方法是使用Text("introTitle")
,但是如果要对本地化键使用枚举,则必须像这样声明它
internal enum L10n {
internal enum Intro {
internal static let title = LocalizedStringKey("introTitle")
}
}
然后您将可以像这样使用它:
Text(L10n.Intro.title)
在您的代码中,title
的类型为NSLocalisedString
,title2
是String
,但是您需要LocalizedStringKey
才能传递给文本初始化程序。