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
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加