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)
}
}
}