我有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
,但仅限one
和other
。
我试着这样做:
NSUserDefaults.standardUserDefaults().setObject([Localize.currentLanguage()], forKey: "AppleLanguages")
NSUserDefaults.standardUserDefaults().synchronize()
但这并没有帮助。
为什么iOS从正确的stringsdict
获取信息,但因为它是en
应用语言?
答案 0 :(得分:1)
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
}