Gar*_*yle 6 localization ios swift
我正在尝试使用 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>
Run Code Online (Sandbox Code Playgroud)
然后我像这样从 Swift 访问它。对于值 1,它附加 st,但每隔一个数字附加 th:
let fmt = NSLocalizedString("TEAM_RANK_ORDINAL", comment: "")
for i in 0...30 {
println(String(format: fmt, i))
}
Run Code Online (Sandbox Code Playgroud)
英语语言环境忽略“two”和“few”规则,只使用“one”和“other”。
请参阅“国际化和本地化指南”中的多个规则属性:
类别的含义取决于语言,并非所有语言都具有相同的类别。
例如,英语仅使用
one
, 和other
类别来表示复数形式。阿拉伯有不同的复数形式zero
,one
,two
,few
,many
,和other
类别。...
(据我所知)没有办法使用 .stringsdict 文件来生成序数。
虽然马丁回答了您的stringsdict
问题,但对于偶然发现“序数”问题的用户,应该只使用NumberFormatter
本地化的序数。例如
let formatter = NumberFormatter()
formatter.numberStyle = .ordinal
for i in 1..<30 {
print(formatter.string(for: i) ?? i)
}
Run Code Online (Sandbox Code Playgroud)
制作(针对英语用户):
1
号2号
3
号4
号5
号6
号7
号8号
9
号10
号11
号12
号13号
14号
15号
16
号17
号18
号19号
20号
21号
22 号23号
24号25号 26 号27 号 28号 29号
而且,FWIW,即使该stringsdict
方法适用于two
等,也没有祈祷区分使用不同序数语法的大数字,例如第 122 和第 124 之间。NumberFormatter
你确实需要为此使用。
归档时间: |
|
查看次数: |
2431 次 |
最近记录: |