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