【问题标题】:SwiftUI Text doesn't localise when inside ForEach在 ForEach 中时,SwiftUI 文本不会本地化
【发布时间】:2021-11-10 10:35:33
【问题描述】:

当我的 Text 从数组中获取它的字符串时,它不会本地化,但是当我硬编码它时,它会:

Localizable.strings

"greeting1" = "Hello there";
"greeting2" = "Howdy";

(本地化为英文)

我的看法

var localisedStrings = ["greeting1", "greeting2"]

struct Message: View {
    var body: some View {
        ForEach(localisedStrings, id: \.self) { string in
            Text(string)
        }
    }
}

文本将只写键,例如 “greeting1”,而不是“Hello there

有没有办法强制Text 对象使用本地化字符串?还是因为它从ForEach 循环中获取内容而发生了某种变化?

我的观点(硬编码)

//var localisedStrings = ["greeting1", "greeting2"]

struct Message: View {
    var body: some View {
        //ForEach(localisedStrings, id: \.self) { string in
            Text("greeting1")
        //}
    }
}

这很好用,并导致文本显示“Hello there”。

【问题讨论】:

    标签: swift foreach swiftui localization


    【解决方案1】:

    当您硬编码字符串时它会起作用,因为您使用的是initialiser,它接受LocalizedStringKey

    LocalizedStringKeyExpressibleByStringLiteral,但Text(string) 中的单词string 不是“字符串文字”,因此它改为调用this initialiser,并且没有本地化。您可以直接初始化LocalizedStringKey 的实例,以便对其进行本地化:

    Text(LocalizedStringKey(string))
    

    【讨论】:

      【解决方案2】:

      因为这里你使用的是普通的String Swift 类型

      var localisedStrings = ["greeting1", "greeting2"]
      

      这里你使用的是 SwiftUI 自己的 LocalizedStringKey 类型

      Text("greeting1")
      

      要解决您的问题,请将您的 string 映射到 LocalizedStringKey

      struct Message: View {
          var body: some View {
              ForEach(localisedStrings, id: \.self) { string in
                  Text(LocalizedStringKey(string))
              }
          }
      }
      

      Text.init(_:tableName:bundle:comment:)

      请按照链接的文档了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-28
        • 1970-01-01
        • 2020-01-22
        • 1970-01-01
        相关资源
        最近更新 更多