使用带有插值的字符串字典



我正在尝试将stringsdict文件与新的 Swift 5.1 高级插值一起使用。经过多次跳跃,我实际上能够得到一个非常简单的示例:

<key>format.%lld</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@num_formats@</string>
<key>num_formats</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>lld</string>
<key>one</key>
<string>Format</string>
<key>other</key>
<string>Formats</string>
</dict>
</dict>

现在我可以在Text中引用它,例如:

Text("format.(count)", comment: "formats string")

我将正确获得 1 的"格式"和其他所有内容的"格式"。但是现在我有一个更高级的用例。我想要一个num_formats变量,然后是一个format变量。对于1,它应该只打印format(没有num_formats插值(。对于许多人来说,我想要"(numFormats) x (format)"

我尝试在stringsdict中设置这两个变量,如下所示:

<key>quantity.%lld x %@</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@num_quantity@ %#@format@</string>
<key>format</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>@</string>
<key>other</key>
<string>%@</string>
</dict>
<key>num_quantity</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>lld</string>
<key>one</key>
<string></string>
<key>other</key>
<string>%lld x</string>
</dict>
</dict>

我希望能够通过调用来使用它:

Text("quantity.(formats.count) x ("Vinyl")", comment: "format quantity string")

相反,当formats.count1时,我会(null),当它不1时,我会2 x (null)。正确的方法是什么?

编辑:我能够通过从NSStringLocalizedFormatKey值中删除x来修复其中的一些问题。以前是<string>%#@num_quantity@ x %#@format@</string>的,我把它改成了<string>%#@num_quantity@ %#@format@</string>.

事实证明,我可以在键本身中使用普通格式说明符,而不是通过复数部分运行它们:

<key>quantity.%lld x %@</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@num_quantity@ %@</string>
<key>num_quantity</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>lld</string>
<key>one</key>
<string></string>
<key>other</key>
<string>%lld x</string>
</dict>
</dict>

留着这个,以防其他人想在 SwiftUI + 字符串插值方面苦苦挣扎。

最新更新