Kuh*_*ann 4 localization swift swiftui
我正在努力解决一些文本字段的本地化问题。通常,如果我要翻译的文本是硬编码的,则 Text() 或 TextField() 的“正常”本地化在我的应用程序中不会出现任何问题:
Text("English Text")
Run Code Online (Sandbox Code Playgroud)
我将其翻译到我的 Localized.strings 中,如下所示:
"English Text" = "German Text";
Run Code Online (Sandbox Code Playgroud)
现在我想翻译更加动态的文本字段,但我知道每个可能的条目:
TextField("New note" + (refresh ? "" : " "),text: $newToDo, onCommit: {
self.addToDo()
self.refresh.toggle()
})
Run Code Online (Sandbox Code Playgroud)
(刷新是必要的,因为 SwiftUI 错误有时不会再次显示占位符文本。)
另一个例子是:
func dayWord() -> String {
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale(identifier: "de_DE")
dateFormatter.dateFormat = "EEEE"
return dateFormatter.string(from: self)
}
var day: String {
return data.date.dateFromMilliseconds().dayWord()
}
Text(day.prefix(2))
Run Code Online (Sandbox Code Playgroud)
Text(day.prefix(2)) 只有七种可能的状态,但我不知道在 Localized.strings 中写什么作为键。
Asp*_*eri 11
使用 NSLocalizedString,例如
TextField(NSLocalizedString("New note", comment: "") + (refresh ? "" : " "), ...
Run Code Online (Sandbox Code Playgroud)
根据 SwiftUI 约定,仅当Text() 标签具有字符串“literal”时,它才会自动本地化。当文本是变量时,需要使用LocalizedStringKey()。Button() 或 TextField() 内的其他可本地化文本也需要 LocalizedStringKey()。所以你需要将其更改为:
\nText(LocalizedStringKey(String(day.prefix(2))))\nRun Code Online (Sandbox Code Playgroud)\n这会将 day.prefix(2) 转换为字符串,因为它实际上是一个子字符串,然后调用 LocalizedStringKey() 使其可本地化。在您的 Localized.strings 文件中,您可以添加所有 7 种可能性。
\n"Mo" = "Mo";\n"Di" = "Tu"; \n//etc.\nRun Code Online (Sandbox Code Playgroud)\n但你为什么要这么做呢?相反,使用:
\ndateFormatter.locale = Locale(identifier: Locale.preferredLanguages.first)\n...\nText(day.prefix(2)) \nRun Code Online (Sandbox Code Playgroud)\n确定用户当前的语言并显示它。Apple 以正确的语言返回文本,因此不需要进一步本地化该文本。
\nTextField() 确实需要使用 LocalizedStringKey() 进行本地化:
\nTextField(LocalizedStringKey("New note") + (refresh ? "" : " "),text: $newToDo, onCommit: {\n self.addToDo()\n self.refresh.toggle()\n })\nRun Code Online (Sandbox Code Playgroud)\n正如 Asperi 指出的那样,对于“新笔记”,可以使用 NSLocalizedString() 来完成相同的操作,这可能会更好,具体取决于您喜欢的工作方式。好处是:轻松为译者添加注释,并在选择编辑器 -> 导出进行本地化\xe2\x80\xa6 时自动导出到 xliff
\n相比之下,SwiftUI 的 LocalizedStringKey() 要求您手动将字符串添加到 Localized.strings 文件中。对于您的 day.prefix(2) 示例,我认为获取用户的首选语言并直接显示本地化日期更有意义。
\n| 归档时间: |
|
| 查看次数: |
6458 次 |
| 最近记录: |