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

因此,对于本地化,我有一个像这样的功能:

    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应用程序语言?

最佳答案

  • 您需要将Bundle path更改为本地化版本,才能从sringsdict文件
  • 中获取正确的参数。
  • 创建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
    }
    

    10-08 13:47
    查看更多