我正在开发一个具有五种语言的 iOS 应用程序。我已经完成了所有编码,现在我尝试使用按钮在语言之间切换。但无法更改语言。我发现了问题,但找不到解决方案。
[NSBundle setLanguage:code];
问题是这条线没有调用.. 有什么帮助吗?谢谢..
最佳答案
使用本地化
更改应用程序的语言,无需重新启动。
- 转到项目 -> 在文档大纲中选择您的项目 -> 添加新语言。
- 将
Localized.strings
文件添加到您的项目中。
- 在
Localized.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()
}
}
关于ios - 以编程方式使用按钮更改应用程序语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157672/