1

我正在尝试将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")

相反,我得到(null)什么时候formats.count12 x (null)什么时候不是1。这样做的正确方法是什么?

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

4

1 回答 1

3

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

    <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 + 字符串插值作斗争,请留下这一点。

于 2019-12-18T14:32:56.067 回答