schrieb ich eine Erweiterung für die einfache Nutzung:
extension NSString {
static func localizedStringForPlurals(formatKey key: String, comment: String = "", args: CVarArg...) -> String
{
let format = NSLocalizedString(key, comment: comment)
let result = withVaList(args){
(NSString(format: format, locale: NSLocale.current, arguments: $0) as String)
}
return result
}
Hier sind einige Verwendungen:
for totRecsFound in 0 ... 3 {
let str = String. localizedStringForPlurals(formatKey: "%d record trovati", comment: "my comments", args: totRecsFound)
println(str)
}
// Or
for totRecsFound in 0 ... 3 {
let str = String. localizedStringForPlurals(formatKey: "%d record trovati", args: totRecsFound)
println(str)
}
Falls Sie haben mehr als einen numerischen Wert in einem Schlüssel (Sie müssen jede Variable in angeben Ihre Ressourcendatei wie im folgenden Beispiel), können Sie mit dieser Methode mehr als eine Anzahl von Argumenten übergeben, um eine lokalisierte Zeichenfolge zu erhalten. Hier
ist der spaßige Teil:
<?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>record in room</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@[email protected] in %#@[email protected] (%#@[email protected])</string>
<key>num_people_in_room</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>No record</string>
<key>one</key>
<string>Only one record</string>
<key>other</key>
<string>Some records</string>
</dict>
<key>room</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>none room</string>
<key>one</key>
<string>%d room</string>
<key>other</key>
<string>%d rooms</string>
</dict>
<key>comment</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>Weird case: how 0 record in > 0 rooms or 0 room with > 0 records?</string>
<key>one</key>
<string>Weird case: how 1 record in > 2 rooms?</string>
<key>other</key>
<string>%dth or normal case: OK</string>
</dict>
</dict>
</dict>
</plist>
Beispiel-Codes:
var c = 2
for r in 0 ... 2 {
for m in 0 ... 2 {
switch (true) {
case (r == 0 && m > 0) || (r > 0 && m == 0):
c = 0
case r == 1 && m > 1:
c = 1
default:
c = 2
}
let str = String. localizedStringForPlurals(formatKey: "record in room", args: r, m, c)
println(str)
}
}
drucken Ergebnis:
No record in none room (Normal case: OK)
No record in 1 room (Weird case: how 0 record in > 0 rooms or 0 room with > 0 records?)
No record in 2 rooms (Weird case: how 0 record in > 0 rooms or 0 room with > 0 records?)
Only one record in none room (Weird case: how 0 record in > 0 rooms or 0 room with > 0 records?)
Only one record in 1 room (Normal case: OK)
Only one record in 2 rooms (Weird case: how 1 record in > 2 rooms?)
Some records in none room (Weird case: how 0 record in > 0 rooms or 0 room with > 0 records?)
Some records in 1 room (Normal case: OK)
Some records in 2 rooms (Normal case: OK)
See CLDR: Language Plural Rules für Englisch.
ok gut! Das XCode-Dokument hat nur die Ziel-C-Funktion gemeldet. Vielen Dank – valfer