Изменить язык приложения с помощью кнопки программно - PullRequest
0 голосов
/ 05 ноября 2018

Я разрабатываю приложение для iOS с пятью языками. Я выполнил все кодирование, и теперь я пытаюсь переключаться между языками с помощью кнопки. Но не могу изменить язык ... Я нашел проблему, но не могу найти решение.

    [NSBundle setLanguage:code];

Проблема, эта линия не вызывает .. Любая помощь, пожалуйста? спасибо ..

1 Ответ

0 голосов
/ 05 ноября 2018

Используйте 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...