SwiftUI 中的文本本地化无法始终如一地工作

Localization of Text in SwiftUI does not work consistently

提问人:Yousif Ismat 提问时间:9/20/2023 最后编辑:Yousif Ismat 更新时间:9/21/2023 访问量:80

问:

我一直在尝试本地化我正在为练习而制作的演示 Sneaker 应用程序,我尝试本地化一些字符串,它们工作得很好,其他一些不起作用,但我设法使用 LocalizedStringKey(_) 使它们工作。但是,这一行没有任何本地化,我不明白为什么。

以下是视图中的文本:

Text("Size: \(orderItem.sneakerSize) | Color: \(orderItem.sneakerColor.colorToString())")

以下是 Localizable.strings 文件中英语的本地化版本:

"Size: %@ | Color: %@" = "Size: %@ | Color: %@";

以下是阿拉伯语的本地化:

"Size: %@ | Color: %@" = "حجم: %@ | لون: %@";

然而,当我尝试在预览模式或实际构建模式下进行测试时,它不会本地化该字符串,谁能解释一下?

swift 字符串 xcode swiftui localizable.strings

评论

0赞 lorem ipsum 9/20/2023
这回答了你的问题吗?如何使用 SwiftUI 中的变量在文本中显示链接?
0赞 Yousif Ismat 9/20/2023
正如我上面提到的,有些人使用 LocalizedStringKey() 工作,但这个由于某种原因没有工作,这令人困惑。
0赞 Benzy Neez 9/20/2023
是什么类型的?如果它是一个数值,例如 ,则占位符应类似于 而不是 。那么我不太清楚它在阿拉伯语版本中是如何向前和向后工作的,但是一个占位符是向后 () 而另一个是向前 () 是正确的吗?sneakerSizeInt%lld%@@%%@
0赞 Yousif Ismat 9/21/2023
这使得上面的那行实际上起作用了。你也可以看看为什么这有问题吗: Text(“(orderItem.sneakerItem.discount)% off”),用于阿拉伯语本地化:“%d off” = “خصم %d”;但它不起作用。有什么技术原因吗?

答:

1赞 Benzy Neez 9/21/2023 #1

我从您的补充评论中了解到我的建议有所帮助。所以我会把它们变成一个答案:

  1. 检查数据类型是否与占位符正确对应。
  1. 对于阿拉伯语版本,请检查是否有向前/向后混淆。您问题中的示例包括 以及 。%@@%

  2. 您的本地化密钥似乎与本地化的英文版本相同。这可能使人们很难判断英语本地化是否真的有效。使用更简单的键可能会有所帮助,例如,如果英语本地化也不起作用,请立即注意到。"SUMMARY %lld %@" = "Size: %lld | Color: %@";

  3. 对于您在评论中添加的其他情况,您可能需要更具体地使用格式。我能够让它像这样为英语工作:

Text("DISCOUNT \(orderItem.sneakerItem.discount, specifier: "%.1f")")
"DISCOUNT %.1f" = "You get %.1f%% off";