来自系统语言环境中ru语言的strigsdict文件的错误值

时间:2015-11-14 11:57:05

标签: ios swift localization

我有ru / en app,我需要手动更改应用程序的语言。

所以,对于本地化,我有一个这样的功能:

    func localizedFormat(args : CVarArgType...) -> String  {
    let path = NSBundle.mainBundle().pathForResource(Localize.currentLanguage(), ofType: "lproj")
    let bundle = NSBundle(path: path!)
    let string = bundle?.localizedStringForKey(self, value: nil, table: nil)
    return withVaList(args) {
        NSString(format: string!, arguments: $0)
        } as String
}

Localize.currentLanguage()我总是得到ru

我还有一个包含复数的sringsdict文件。问题如下: 当我使用ru语言运行模拟器时 - 一切正常。但是,如果我在en中运行 - 复数是从stringsdict错误中获取的,因为它们正在采用en复数规则。

因此,值取自俄语stringsdict,但仅限oneother

我试着这样做:

NSUserDefaults.standardUserDefaults().setObject([Localize.currentLanguage()], forKey: "AppleLanguages")
NSUserDefaults.standardUserDefaults().synchronize()

但这并没有帮助。

为什么iOS从正确的stringsdict获取信息,但因为它是en应用语言?

1 个答案:

答案 0 :(得分:1)

  1. 您需要将Bundle path更改为本地化版本,才能从sringsdict文件中获取正确的参数
  2. 创建String时,您需要将正确的语言环境传递给初始化程序

最终方法将如下所示:

func localizePlural(key: String, count: UInt) -> String? {
    let language = "ru"
    guard let path = Bundle.main.path(forResource: language, ofType: "lproj"), let bundle = Bundle(path: path) else {
        return nil
    }
    let formatString = NSLocalizedString(key, tableName: nil, bundle: bundle, value: "", comment: "")
    let resultString = String(format: formatString, locale: Locale.init(identifier: "ru_RU"), count)
    return resultString
}