iOS .stringsdict无效

时间:2015-05-09 20:28:43

标签: ios swift localization

我正在尝试在iOS编程中使用.stringsdict功能来显示数字的正确序数后缀(st,nd,rd等)。我已经为英语创建了.stringsdict文件,但它只使用了'one'和'other'键。它忽略了“两个”和“少数”选项。有谁看到我在这里做错了什么?

该文件如下所示:

<?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>TEAM_RANK_ORDINAL</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%#@ordinal_string@</string>
        <key>ordinal_string</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>
            <key>NSStringFormatValueTypeKey</key>
            <string>lu</string>
            <key>one</key>
            <string>%lust</string>
            <key>two</key>
            <string>%lund</string>
            <key>few</key>
            <string>%lurd</string>
            <key>other</key>
            <string>%luth</string>
        </dict>
    </dict>
</dict>
</plist>

然后我从Swift那样访问它。对于值1,它会附加st,但每隔一个数字都会附加到:

    let fmt = NSLocalizedString("TEAM_RANK_ORDINAL", comment: "")
    for i in 0...30 {
        println(String(format: fmt, i))
    }

2 个答案:

答案 0 :(得分:4)

英语语言环境忽略了&#34;两个&#34;和&#34;少数&#34;规则和用途 只有&#34;一个&#34;和&#34;其他&#34;。

请参阅&#34;国际化和本地化指南中的Plural Rule Properties&#34;:

  

类别的含义取决于语言,而不是全部   语言具有相同的类别。

     

例如,英语仅使用oneother类别   代表复数形式。阿拉伯语有不同的复数形式   zeroonetwofewmanyother类别。 ...

(据我所知)没有办法使用.stringsdict文件 用于产生序数。

答案 1 :(得分:0)

当马丁回答了您的stringsdict问题时,对于偶然发现“常规”问题的用户,应该只使用NumberFormatter来显示本地化序数。例如

let formatter = NumberFormatter()
formatter.numberStyle = .ordinal

for i in 1..<30 {
    print(formatter.string(for: i) ?? i)
}

制作(对于英语用户):

  

1st
  2
  第三名
  第四名
  第五名
  第六名
  第七名
  8th
  9th
  第十名
  11th
  12th
  13th
  14th
  15th
  16th
  17th
  18th
  19th
  20th
  21st
  22日
  23rd
  24th
  25th
  26th
  27th
  28th
  29th

而且,即使stringsdict方法适用于two等,FWIW也不要求区分使用不同常规语法的大量数字,例如在第122和第124之间。您确实需要为此使用NumberFormatter