ho scritto un'estensione per un semplice utilizzo:
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
}
Ecco alcuni usi:
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)
}
Nel caso in cui avere più di un valore numerico in una chiave (devi specificare ogni variabile in il tuo file di risorse come nel seguente esempio), puoi usare questo metodo per passare più di un numero di argomenti per ottenere una stringa localizzata.
Ecco la parte divertente:
<?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>
codici di esempio:
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)
}
}
risultato di stampa:
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 per l'inglese.
fonte
2016-10-12 16:59:39
ok fantastico! Il documento XCode riportava solo la funzione obiettivo-C. Grazie – valfer