以编程方式使用按钮更改应用语言

时间:2018-11-05 15:48:23

标签: ios objective-c iphone

我正在开发具有五种语言的iOS应用程序。我已经完成了所有编码,现在我正尝试使用按钮在语言之间进行切换。但是无法更改语言。.我发现了问题,但找不到解决方案。

    [NSBundle setLanguage:code];

问题此行未调用。 有什么帮助吗?谢谢。

1 个答案:

答案 0 :(得分:1)

使用localization更改应用程序的语言而无需重新启动。

  1. 转到项目->在文档大纲中选择您的项目->添加新语言。

enter image description here

  1. Localized.strings个文件添加到您的项目中。

enter image description here

  1. 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()
    }
}

enter image description here