为啥字符串本地化/国际化在 SwiftUI 中不起作用?

Posted

技术标签:

【中文标题】为啥字符串本地化/国际化在 SwiftUI 中不起作用?【英文标题】:Why is string localization/internationalization not working in SwiftUI?为什么字符串本地化/国际化在 SwiftUI 中不起作用? 【发布时间】:2020-05-26 20:34:14 【问题描述】:

我的应用中有一些文本应该本地化,比如

  Text(self.model.stringValue)

.stringValue = "dist",我创建了 Localized.strings 并添加了参考

  "dist" = "the distance";

文档说文本视图会自动将字符串解释为本地化键并为您查找它们:

 Text("pencil") // Searches the default table in the main bundle.

我在字符串文件上单击“本地化”并将语言添加到项目文件中,这样的答案说它应该可以正常工作:How to implement localization in Swift UI

但它只是显示“dist”而不是正确的本地化字符串。我做错了什么?

【问题讨论】:

【参考方案1】:

您可以将其本地化为内联,如

Text(LocalizedStringKey(self.model.stringValue))

【讨论】:

【参考方案2】:

事实证明,只有将 Text("pencil") 中的字符串作为 literal 传递时,它才会被解释为本地化键。如果您传递一个字符串类型的变量,则不会发生这种情况。答案是声明 LocalizedStringKey 类型的变量。

  Text("dist") //-> implicitly treats string literal as a key; looks up and displays "the distance"
  let cap1:String = "dist"
  Text(cap1)   //-> no lookup for explicit String variable; just displays "dist"
  let cap2:LocalizedStringKey = "dist"
  Text(cap2)   //-> looks up explicit LocalizedStringKey value; displays "the distance"

【讨论】:

以上是关于为啥字符串本地化/国际化在 SwiftUI 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pop to root 在这个示例代码 SwiftUI 中不起作用?

为啥字符串格式在 UILabel 中不起作用?

SwiftUI - 过渡动画在 GeoReader 中不起作用?

SwiftUI 条件在视图中不起作用

PickerView 被禁用并且在 SwiftUI 中不起作用

Google Admob 横幅广告在 swiftui 中不起作用