是否有可能将NSNumberFormatter用于NSNumber格式以及stringsdict中的复数规则?
我需要使用格式化数字的下一个(单独数千个)。如果我使用NSNumberFormatter格式化数字 - 我收到NSString并且我不能再使用复数规则了,因为iOS无法理解短语是用于NSString中的单个还是复数名词。
单的“ 1锻炼”
“ 1,732,123次锻炼”复数
NSNumberFormatter* numberFormatter = ...;
[NSString stringWithFormat:NSLocalizedString(@"%@ Workouts!", @"n Workout(s)"), [numberFormatter stringFromNumber:value]]
答案 0 :(得分:8)
经过一些研究后我发现,我可以在没有NSNumberFormatter的情况下将数千个数字分开,只需使用 localizedStringWithFormat 。它还使我有可能使用复数规则。
[NSString localizedStringWithFormat:NSLocalizedString(@"%@ Workouts!", @"n Workout(s)"), value]
Localizable.stringsdict
...
<key>%@ Workouts</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@Workouts@</string>
<key>Workouts</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>@</string>
<key>one</key>
<string>%@ Workout!</string>
<key>other</key>
<string>%@ Workouts!</string>
</dict>
</dict>
....
答案 1 :(得分:0)
您可以将数字和带格式的字符串(2个参数)传递到NSLocalizedString
中
基本思想是使用数字来控制复数规则,但使用格式化的字符串来显示。
我以Swift中的Decimal
为例:
let number: Decimal = 13456
let formatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.groupingSeparator = ","
return formatter
}()
let formattedNumberString = formatter.string(from: number as NSDecimalNumber) ?? "-" // "13,456"
let format = NSLocalizedString(
"workouts",
comment: "arg1 is for number, arg2 is for formatted string"
)
let resultString = String.localizedStringWithFormat(
format,
number as NSDecimalNumber,
formattedNumberString
)
在 Localizable.stringsdict 中,您可以执行以下操作:
<?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>workouts</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%1$#@number@</string>
<key>number</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>@</string>
<key>one</key>
<string>%2$@ Workout!</string>
<key>other</key>
<string>%2$@ Workouts!</string>
</dict>
</dict>
</dict>
</plist>
在此示例中,resultString
是13,456 Workouts!
。如果您更改number = 1
,则resultString
将是1 Workout!