我已經看到一些iOS應用程序動態地更改了應用程序中使用的語言,我的意思是當應用程序發佈時,用戶可以動態更改語言(法語,英語......) ;我在互聯網上搜索,我已經找到關於這一點。動態更改iOS應用程序的語言
有什麼想法?謝謝
我已經看到一些iOS應用程序動態地更改了應用程序中使用的語言,我的意思是當應用程序發佈時,用戶可以動態更改語言(法語,英語......) ;我在互聯網上搜索,我已經找到關於這一點。動態更改iOS應用程序的語言
有什麼想法?謝謝
你需要編寫自己的NSLocalizedString宏,它選擇基於用戶偏好的語言包的版本,而不是手機語言環境
我們正在使用類似下面(靈感通過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()
}
}
謝謝,你有什麼資源可以做到這一點嗎? – samir 2012-07-12 09:07:59
我發現[this](http://learning-ios.blogspot.co.uk/2011/04/advance-localization-in-ios-apps.html)快速搜索後,我不知道它有多準確 – wattson12 2012-07-12 09:10:35