【问题标题】:Using stringsdict with interpolation使用带有插值的字符串字典
【发布时间】:2019-12-18 14:16:24
【问题描述】:

我正在尝试将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 来修复其中的一些问题。之前是&lt;string&gt;%#@num_quantity@ x %#@format@&lt;/string&gt;,我改成了&lt;string&gt;%#@num_quantity@ %#@format@&lt;/string&gt;

【问题讨论】:

    标签: swift swiftui string-interpolation localizable.strings swift5.1


    【解决方案1】:

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

        <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 + 字符串插值作斗争,请保留它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多