使用Stringsdict和复数规则进行SWIFT

时间:2018-12-24 13:00:34

标签: ios swift localization

在我的iOS应用程序的其中一个屏幕上,我使用一个标签,其上的文字应根据对象数量而变化:一个苹果,两个苹果 S 和其他。 我创建了 Localizable.stringdict 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>searches</key>
<dict>
    <key>NSStringLocalizedFormatKey</key>
    <string>%#@search_count@</string>
    <key>search_count</key>
    <dict>
        <key>NSStringFormatSpecTypeKey</key>
        <string>NSStringPluralRuleType</string>
        <key>NSStringFormatValueTypeKey</key>
        <string>s</string>
        <key>one</key>
        <string>остался %s поиск</string>
        <key>many</key>
        <string>осталось %s поиска</string>
        <key>other</key>
        <string>осталось %s поиска</string>
    </dict>
</dict>

稍后在viewController类中,我创建了一个函数

  private func searches(_ count: UInt) {
     let format: String = NSLocalizedString("searches", comment: "")
     let result: String = String.localizedStringWithFormat(format, count)
     print(result)
  }

并在viewDidLoad中调用此函数。

应用程序在启动时崩溃,错误为线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

Debbuger指示创建 Result 的行。据我了解,问题是未创建 Format

该问题如何解决?

1 个答案:

答案 0 :(得分:2)

您的词典将“ s”指定为字符串格式说明符,即C字符串。对于UInt(作为基金会C类型的NSUInteger),应改为“ lu”(比较String Format Specifiers):

<key>NSStringLocalizedFormatKey</key>
<string>%#@search_count@</string>
<key>search_count</key>
<dict>
    <key>NSStringFormatSpecTypeKey</key>
    <string>NSStringPluralRuleType</string>
    <key>NSStringFormatValueTypeKey</key>
    <string>lu</string>
    <key>one</key>
    <string>остался %lu поиск</string>
    <key>many</key>
    <string>осталось %lu поиска</string>
    <key>other</key>
    <string>осталось %lu поиска</string>
</dict>