アプリケーションで使用される言語を動的に変更するiOSアプリケーションを見たことがあります。つまり、アプリを起動すると、ユーザーは言語(フランス語、英語など)を動的に変更できます。私はインターネットで検索しました、そして私はこれについて何かを見つけました。
何か案が ?ありがとう
電話のロケールではなく、ユーザー設定に基づいて言語バンドルを選択する独自のバージョンのNSLocalizedStringマクロを作成する必要があります
ローカリゼーションを使用する必要があります。ここに1つのチュートリアルがあります:http ://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial
以下のようなものを使用しています(Localize-Swiftに触発されています)。UserDefaults.standard
アプリ拡張機能を使用している場合以外に、選択した言語を別の場所に保存する必要があることに注意してください。必要に応じて、複数形のサポートでかなり簡単に拡張できるはずです。
以下にクラスと文字列拡張子を追加した後"key_from_string_files".localized()
、のバリアントの代わりにを呼び出しNSLocalizedString
て、ローカライズされた文字列を取得します。
extension String {
func localized(_ key: String, arguments: [CVarArg] = []) -> String {
return Localize.localized(key, arguments: arguments)
}
}
class Localize {
static var storeKey = "custom_current_language"
class func localized(_ key: String, arguments: [CVarArg]) -> String {
let string: String
let lang = currentLanguage()
if let path = Bundle.main.path(forResource: lang, ofType: "lproj"), let bundle = Bundle(path: path) {
string = bundle.localizedString(forKey: key, value: nil, table: nil)
} else {
string = key
}
return String(format: string, arguments: arguments)
}
class func currentLanguage() -> String {
if let current = UserDefaults.standard.object(forKey: storeKey) as? String, Bundle.main.localizations.contains(current) {
return current
} else if let preferred = Bundle.main.preferredLocalizations.first {
return preferred
}
fatalError("Could not determine application localization")
}
class func setCurrentLanguage(_ language: String?) {
UserDefaults.standard.set(language, forKey: storeKey)
UserDefaults.standard.synchronize()
}
}