0

The code I wrote changes the language only if I restart the app, but I would like it to change language immediately.

It's possible to do it?

The language switch works fine, but only after I restart the app.

Maybe the problem is in the extension string?

Localizable.strings (it)

"label.language" = "Lingua";

Localizable.strings (en)

"label.language" = "Language";

struct ConstantFile {

static let labelLanguage = NSLocalizedString("label.language".localized, comment: "")

}

extension String {

    var localized: String {

        if let _ = UserDefaults.standard.string(forKey: "UserDefaultLanguage") {} else {

            // setting value default
            UserDefaults.standard.set(Language.italian.rawValue, forKey: "UserDefaultLanguage")
            UserDefaults.standard.synchronize()
        }

        let lang = UserDefaults.standard.string(forKey: "UserDefaultLanguage")

        let path = Bundle.main.path(forResource: lang, ofType: "lproj")
        let bundle = Bundle(path: path!)

        return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")

    }

}

class ViewController: UIViewController {

@IBOutlet weak var labelTitleLanguage: UILabel!

let userDefaults = UserDefaults.standard
let LANGUAGE_KEY = "UserDefaultLanguage"

override func viewDidLoad() {
        super.viewDidLoad()

labelTitleLanguage.text = ConstantFile.labelLanguage

}

@objc func tapBtnConfirmation(_ sender: UIButton) {
        
        let list = list[self.pickerView.selectedRow(inComponent: 0)]
        
        buttonPickerViewLanguage.setTitle(list, for: .normal)

        if list == ConstantFile.labelLanguageItalian {
            userDefaults.set(Language.italian.rawValue, forKey: LANGUAGE_KEY)
        } else if list == ConstantFile.labelLanguageEnglish {
            userDefaults.set(Language.english.rawValue, forKey: LANGUAGE_KEY)
        }

    }

}
iosSwift
  • 31
  • 6

1 Answers1

0

You'll need to have a notification sent when changing language.

Then in your views, you observe this notification, and when it's raised, you update all translated texts in the view.

That's what I do

David Ansermot
  • 6,052
  • 8
  • 47
  • 82
  • 1) Then you create an alert that warns the user that he is changing the language, 2) insert an "OK" button inside the notice, 3) inside the action button what do you put to change language? – iosSwift Nov 01 '22 at 08:50