iOS .stringsdict 不工作
iOS .stringsdict not working
我正在尝试使用 iOS 编程中的 .stringsdict 功能来显示数字的正确序数后缀(st、nd、rd 等...)。我已经为英语创建了 .stringsdict 文件,但它只使用 'one' 和 'other' 键。它忽略了 'two' 和 'few' 选项。有人看到我在这里做错了什么吗?
文件如下所示:
<?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,但每隔一个数字附加 th:
let fmt = NSLocalizedString("TEAM_RANK_ORDINAL", comment: "")
for i in 0...30 {
println(String(format: fmt, i))
}
英语语言环境忽略 "two" 和 "few" 规则并使用
只有 "one" 和 "other".
参见"Internationalization and Localization Guide"中的Plural Rule Properties:
The meaning of the categories is language-dependent, and not all
languages have the same categories.
For example, English only uses the one
, and other
categories to
represent plural forms. Arabic has different plural forms for the
zero
, one
, two
, few
, many
, and other
categories. ...
(据我所知)没有办法使用 .stringsdict 文件
用于生成序数。
虽然 Martin 回答了您的 stringsdict
问题,但对于偶然发现 "ordinal" 问题的用户,应该只使用 NumberFormatter
作为本地化序号。例如
let formatter = NumberFormatter()
formatter.numberStyle = .ordinal
for i in 1..<30 {
print(formatter.string(for: i) ?? i)
}
制作中(英语用户):
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
10th
11th
12th
13th
14th
15th
16th
17th
18th
19th
20th
21st
22nd
23rd
24th
25th
26th
27th
28th
29th
而且,FWIW,即使 stringsdict
方法适用于 two
等,也没有希望区分使用不同序数语法的大数,例如在第 122 位和第 124 位之间。您确实需要为此使用 NumberFormatter
。
我正在尝试使用 iOS 编程中的 .stringsdict 功能来显示数字的正确序数后缀(st、nd、rd 等...)。我已经为英语创建了 .stringsdict 文件,但它只使用 'one' 和 'other' 键。它忽略了 'two' 和 'few' 选项。有人看到我在这里做错了什么吗?
文件如下所示:
<?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,但每隔一个数字附加 th:
let fmt = NSLocalizedString("TEAM_RANK_ORDINAL", comment: "")
for i in 0...30 {
println(String(format: fmt, i))
}
英语语言环境忽略 "two" 和 "few" 规则并使用 只有 "one" 和 "other".
参见"Internationalization and Localization Guide"中的Plural Rule Properties:
The meaning of the categories is language-dependent, and not all languages have the same categories.
For example, English only uses the
one
, andother
categories to represent plural forms. Arabic has different plural forms for thezero
,one
,two
,few
,many
, andother
categories. ...
(据我所知)没有办法使用 .stringsdict 文件 用于生成序数。
虽然 Martin 回答了您的 stringsdict
问题,但对于偶然发现 "ordinal" 问题的用户,应该只使用 NumberFormatter
作为本地化序号。例如
let formatter = NumberFormatter()
formatter.numberStyle = .ordinal
for i in 1..<30 {
print(formatter.string(for: i) ?? i)
}
制作中(英语用户):
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
10th
11th
12th
13th
14th
15th
16th
17th
18th
19th
20th
21st
22nd
23rd
24th
25th
26th
27th
28th
29th
而且,FWIW,即使 stringsdict
方法适用于 two
等,也没有希望区分使用不同序数语法的大数,例如在第 122 位和第 124 位之间。您确实需要为此使用 NumberFormatter
。