我正在尝试在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))
}
答案 0 :(得分:4)
英语语言环境忽略了&#34;两个&#34;和&#34;少数&#34;规则和用途 只有&#34;一个&#34;和&#34;其他&#34;。
请参阅&#34;国际化和本地化指南中的Plural Rule Properties&#34;:
类别的含义取决于语言,而不是全部 语言具有相同的类别。
例如,英语仅使用
one
和other
类别 代表复数形式。阿拉伯语有不同的复数形式zero
,one
,two
,few
,many
和other
类别。 ...
(据我所知)没有办法使用.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
。