我正在开发具有五种语言的iOS应用程序。我已经完成了所有编码,现在我正尝试使用按钮在语言之间进行切换。但是无法更改语言。.我发现了问题,但找不到解决方案。
[NSBundle setLanguage:code];
问题此行未调用。 有什么帮助吗?谢谢。
答案 0 :(得分:1)
使用localization
更改应用程序的语言而无需重新启动。
Localized.strings
个文件添加到您的项目中。Localizable.strings(XXX)
中添加用于本地化的字符串对于英语"hello" = "Hello World";
对于印地语"hello" = "नमस्ते दुनिया";
代码:
import UIKit
extension String {
var localized: String {
let lang = currentLanguage()
let path = Bundle.main.path(forResource: lang, ofType: "lproj")
let bundle = Bundle(path: path!)
return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
}
//Remove here and add these in utilities class
func saveLanguage(_ lang: String) {
UserDefaults.standard.set(lang, forKey: "Locale")
UserDefaults.standard.synchronize()
}
func currentLanguage() -> String {
return UserDefaults.standard.string(forKey: "Locale") ?? ""
}
}
enum Language: String {
case english = "English"
case hindi = "हिंदी"
}
class ViewController: UIViewController {
var language = Language.english
override func viewDidLoad() {
super.viewDidLoad()
//Initial Setup
String().saveLanguage("en")
languageLabel.text = "hello".localized
languageButton.setTitle(language.rawValue, for: .normal)
}
func updateLanguage() {
if language == .english {
String().saveLanguage("hi")
language = .hindi
} else {
String().saveLanguage("en")
language = .english
}
languageLabel.text = "hello".localized
languageButton.setTitle(language.rawValue, for: .normal)
}
@IBOutlet weak var languageLabel: UILabel!
@IBOutlet weak var languageButton: UIButton!
@IBAction func changeLanguageButtonTapped(_ sender: UIButton) {
updateLanguage()
}
}