iOS:复数和自定义语言环境

Mik*_*ail 5 iphone localization ios nslocale ios7

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

如果默认手机的语言环境设置为“en”,但在应用程序中选择了“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>
Run Code Online (Sandbox Code Playgroud)

本地化代码(手动创建“ru”语言环境):

let locale = NSLocale(localeIdentifier: "ru_RU")
String(format: NSLocalizedString("%d files", comment: ""),
                    locale: locale,
                    count)
Run Code Online (Sandbox Code Playgroud)

作为输出,我得到:
for count = 1: “???? ????” - 它
适合 count = 2:“2 ?????” -
count = 6也是正确的(来自“其他”类别):“6 ?????” - 错误,也来自“其他”类别,但应来自“许多”

如果我将手机的语言切换为俄语,则所有语言都已正确本地化。

Tho*_*rax 1

您应该使用键:

\n\n

换一 = \xd0\xbe\xd0\xb4\xd0\xb8\xd0\xbd \xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb

\n\n

2-4 = 2 \xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb\xd0\xb0 的少数

\n\n

其他所有其他情况

\n