我有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
,但仅取自one
和other
。我试图做这样的事情:
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
}