5

我想在 iOS 的 swift 中使用复数 stringdict 翻译这个字符串

  • 停留在 %1$@
  • 留在%1$@

感谢这个问题,使用没有占位符的简单复数可以工作 但是当我添加一个字符串占位符时,我在访问它时会崩溃。

常规复数使用以下xml:

<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@format@</string>
<key>format</key>
<dict>
    <key>NSStringFormatSpecTypeKey</key>
    <string>NSStringPluralRuleType</string>
    <key>NSStringFormatValueTypeKey</key>
    <string>li</string>
    <key>one</key>
    <string>Sleeps at your place</string>
    <key>other</key>
    <string>Sleep at your place</string>
</dict>
</dict>

并使用这个快速代码来引用上面没有字符串占位符的复数:

 let format = NSLocalizedString("key_to_plural_above", comment: "")
 let label = String.localizedStringWithFormat(format, kidsIds.count)

问题是当我在翻译中添加一个字符串占位符时,当我尝试阅读它时会崩溃。下面的 xml 是由翻译工具 ( lokalise ) 生成的,所以我认为它是正确的。

<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@format@</string>
<key>format</key>
<dict>
    <key>NSStringFormatSpecTypeKey</key>
    <string>NSStringPluralRuleType</string>
    <key>NSStringFormatValueTypeKey</key>
    <string>li</string>
    <key>one</key>
    <string>Sleeps at %1$@</string>
    <key>other</key>
    <string>Sleep at %1$@</string>
</dict>

使用这个快速代码来获取上面的复数,我得到一个未知的崩溃,没有任何堆栈跟踪:

let format = NSLocalizedString("key_to_plural_above", comment: "")
let label = String.localizedStringWithFormat(format, kidsIds.count, "Name")
4

1 回答 1

7

位置参数n$是从一开始的,所以在

let label = String.localizedStringWithFormat(format, kidsIds.count, "Name")

"Name"是第二个参数,您可以通过以下方式引用它%2$@

<key>NSStringLocalizedFormatKey</key>
<string>%#@format@</string>
<key>format</key>
<dict>
    <key>NSStringFormatSpecTypeKey</key>
    <string>NSStringPluralRuleType</string>
    <key>NSStringFormatValueTypeKey</key>
    <string>li</string>
    <key>one</key>
    <string>Sleeps at %2$@</string>
    <key>other</key>
    <string>Sleep at %2$@</string>
</dict>

在您的代码中,%1$@指的是第一个参数kidsIds.count。这不是导致崩溃的字符串。

或者,将其放入 NSStringLocalizedFormatKey:

<key>NSStringLocalizedFormatKey</key>
<string>%#@format@ at %@</string>
<key>format</key>
<dict>
    <key>NSStringFormatSpecTypeKey</key>
    <string>NSStringPluralRuleType</string>
    <key>NSStringFormatValueTypeKey</key>
    <string>li</string>
    <key>one</key>
    <string>Sleeps</string>
    <key>other</key>
    <string>Sleep</string>
</dict>
于 2016-08-27T11:41:34.407 回答