iOS:复数和自定义区域设置
我正在开发支持“en”和“ru”语言的应用程序,用户可以在应用程序中选择语言 若默认手机的语言环境设置为“en”,但应用程序内部选择了“ru”语言,那个么在尝试本地化复数句子时忽略了“many”/“now”形式。所以它被英语复数规则本地化了 定义:iOS:复数和自定义区域设置,ios,iphone,ios7,localization,nslocale,Ios,Iphone,Ios7,Localization,Nslocale,我正在开发支持“en”和“ru”语言的应用程序,用户可以在应用程序中选择语言 若默认手机的语言环境设置为“en”,但应用程序内部选择了“ru”语言,那个么在尝试本地化复数句子时忽略了“many”/“now”形式。所以它被英语复数规则本地化了 定义: <key>%d files</key> <dict> <key>NSStringLocalizedFormatKey</key> <string
<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>
作为我得到的输出:对于count=1:“аааа”-这是正确的
对于计数=2:“2фааа”-它也是正确的(来自“其他”类别)
对于计数=6:“6фаааа”-错误,也来自“其他”类别,但应取自“许多” 如果我将手机语言切换为俄语,则所有语言都将正确本地化。您应该使用按键: 一个 对于2-4=2фаа
其他对于所有其他情况这是一个很老的问题,但我也遇到了同样的问题,我就是这样解决的:
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
在特定于语言的捆绑包中进行搜索。我知道应该如何填充:)并且它在默认情况下正常工作,但在使用与系统语言不匹配的自定义区域设置时会出现问题(例如,如果系统语言='en',但我使用具有不同规则的区域设置'ru',那么我将得到错误的结果)
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)