我正在开发支持“en”和“ru”语言的应用,用户可以在应用内选择语言。
如果默认手机的语言环境设置为“en”,但内部app选择了“ru”语言,那么当尝试本地化复数句子时忽略'many'/'few'形式。所以它是由英国复数规则本地化的。
定义:
<key>%d files</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@files@</string>
<key>files</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>один файл</string>
<key>many</key>
<string>%d файлов</string>
<key>other</key>
<string>%d файла</string>
</dict>
</dict>
本地化代码(手动创建'ru'语言环境):
let locale = NSLocale(localeIdentifier: "ru_RU")
String(format: NSLocalizedString("%d files", comment: ""),
locale: locale,
count)
作为输出我得到:
对于count = 1:“одинфайл” - 这是对的
对于count = 2:“2файла” - 它也是对的(来自“其他”类别)
对于count = 6:“6файла” - 错误,也来自“其他”类别,但应取自“很多”
如果我将手机的语言切换为俄语,则所有语言都正确本地化。
答案 0 :(得分:0)
您应该使用密钥:
一个表示1 =одинфайл
少数 2-4 =2файла
所有其他情况其他
答案 1 :(得分:0)
这是一个很老的问题,但是我也遇到了同样的问题,这就是我如何解决此问题:
let path = Bundle.main.path(forResource: "ru", ofType: "lproj")!
let bundle = Bundle(path: path)!
let localizedString = String(format: NSLocalizedString("%d files", bundle: bundle, comment: ""),
locale: NSLocale(localeIdentifier: "ru_RU"),
count)
主要思想是使NSLocalizedString
以特定于语言的捆绑搜索。