【问题标题】:iOS: plurals and custom localeiOS:复数和自定义语言环境
【发布时间】:2015-01-15 20:39:09
【问题描述】:

我正在开发支持“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>

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

let locale = NSLocale(localeIdentifier: "ru_RU")
String(format: NSLocalizedString("%d files", comment: ""),
                    locale: locale,
                    count)

作为我得到的输出:
计数 = 1: "один файл" - 没错
for count = 2: "2 файла" - 也是正确的(来自“其他”类别)
对于 count = 6: "6 файла" - 错误,也来自“其他”类别,但应该来自“许多”

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

【问题讨论】:

    标签: ios iphone ios7 localization nslocale


    【解决方案1】:

    你应该使用钥匙:

    一个代表 1 = один файл

    很少 2-4 = 2 файла

    其他适用于所有其他情况

    【讨论】:

    • 我知道应该如何填写 :) 它在默认情况下可以正常工作,但是在使用与系统语言不匹配的自定义语言环境时会出现问题(例如,如果系统语言 = 'en',但是我使用的是语言环境'ru',它有不同的规则,那么我会得到错误的结果)
    【解决方案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在特定语言的包中搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      相关资源
      最近更新 更多