根据苹果文档,应该可以这样做:
如果您使用字符串变量而不是字符串字面量初始化文本视图,则视图会触发init(:)初始化程序,因为它假定您在这种情况下不需要本地化。如果您确实想要将存储在字符串变量中的值本地化,可以选择先从字符串变量创建一个LocalizedStringKey实例,然后再调用init(:tableName:bundle:comment:)初始化程序: Text(LocalizedStringKey(someString)) // 本地化
这在这里也得到了推荐:https://www.ibabbleon.com/swiftui_localization_tutorial.html
但是,至少在我的情况下,它并没有生效。在以下示例中,只有“Some content 1”值被导出进行本地化。
在应用程序设置中,“使用编译器提取Swift字符串”设置为是。
我错过了什么?
如果您使用字符串变量而不是字符串字面量初始化文本视图,则视图会触发init(:)初始化程序,因为它假定您在这种情况下不需要本地化。如果您确实想要将存储在字符串变量中的值本地化,可以选择先从字符串变量创建一个LocalizedStringKey实例,然后再调用init(:tableName:bundle:comment:)初始化程序: Text(LocalizedStringKey(someString)) // 本地化
someString
的内容。
链接:https://developer.apple.com/documentation/swiftui/text/init(_:tablename:bundle:comment:)这在这里也得到了推荐:https://www.ibabbleon.com/swiftui_localization_tutorial.html
但是,至少在我的情况下,它并没有生效。在以下示例中,只有“Some content 1”值被导出进行本地化。
struct ContentView: View {
let text = "Some content 2"
var body: some View {
Text("Some content 1", comment: "This text is exported for localization, as expected.")
.padding()
Text(LocalizedStringKey(text), comment: "This text is not exported for localization, which is not expected behaviour.")
.padding()
}
}
在应用程序设置中,“使用编译器提取Swift字符串”设置为是。
我错过了什么?
let content2: LocalizedStringKey = "Some content 2"
并将其用作Text(content2)
。这样就可以很好地导出进行本地化。但是我不知道如何向字符串添加注释。如果我添加Text(content2, comment: "Some comment")
,则该注释将不会被导出进行本地化。 - blueFox