Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:复数和自定义区域设置_Ios_Iphone_Ios7_Localization_Nslocale - Fatal编程技术网

iOS:复数和自定义区域设置

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

我正在开发支持“en”和“ru”语言的应用程序,用户可以在应用程序中选择语言

若默认手机的语言环境设置为“en”,但应用程序内部选择了“ru”语言,那个么在尝试本地化复数句子时忽略了“many”/“now”形式。所以它被英语复数规则本地化了

定义:

<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)