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

标签 ios objective-c iphone

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

    [NSBundle setLanguage:code];

问题是这条线没有调用.. 有什么帮助吗?谢谢..

最佳答案

使用本地化更改应用程序的语言,无需重新启动。

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

enter image description here

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

enter image description here

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

enter image description here

关于ios - 以编程方式使用按钮更改应用程序语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157672/

相关文章:

ios - Braintree 一次性付款请求加载时间过长

ios - 如何根据随机数组索引显示正确的 label.text

objective-c - 如何通过 mac os x api 获取 Safari.app 的包标识符

iphone - 在 iPhone 应用程序中使用 Localized.strings

iphone - UIImagePNGRepresentation 增加输出文件大小而不是减小大小

javascript - 当用户按下回车键时,是否有另一种方法在移动 Safari(在 iOS 上)上触发自动更正/自动完成?

ios - 在 Swift 项目中包含基于方案的某些 Objective-C 文件

objective-c - CLPlacemark.subThoroughfare 奇怪的字符?

iOS11 以编程方式关闭 `safeAreaInsets`

iPhone 4 "device not registered"...需要帮助备份一些应用程序数据