将 stringdict 与插值一起使用
Using stringsdict with interpolation
我正在尝试将 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 获得 "Format",为其他一切获得 "Formats"。但现在我有一个更高级的用例。我想要一个 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.count
为 1
时,我得到 (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 + 字符串插值。
我正在尝试将 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 获得 "Format",为其他一切获得 "Formats"。但现在我有一个更高级的用例。我想要一个 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.count
为 1
时,我得到 (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 + 字符串插值。