Я пытаюсь создать приложение, в котором пользователь может выбрать язык, и я хочу изменить содержимое всего приложения. Например, у меня есть две метки и два языка: английский sh и немецкий. два файла Localizable (en, de). на моем экране пользователь нажимает поворот на немецкий, и я хочу изменить язык приложения и обновить пользовательский интерфейс, но я не хочу, чтобы пользователь закрыл приложение. Я нашел здесь какое-то решение, но это не сработало, например аналогичный вопрос
extension Bundle {
private static var bundle: Bundle!
public static func localizedBundle() -> Bundle! {
if bundle == nil {
let appLang = UserDefaults.standard.string(forKey: "app_lang") ?? "ru"
let path = Bundle.main.path(forResource: appLang, ofType: "lproj")
bundle = Bundle(path: path!)
}
return bundle;
}
public static func setLanguage(lang: String) {
UserDefaults.standard.set(lang, forKey: "app_lang")
let path = Bundle.main.path(forResource: lang, ofType: "lproj")
bundle = Bundle(path: path!)
}}
и этот
extension String {
func localized() -> String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.localizedBundle(), value: "", comment: "")
}
func localizeWithFormat(arguments: CVarArg...) -> String{
return String(format: self.localized(), arguments: arguments)
}}
и используя его как
@IBAction func englishAction(_ sender: Any) {
let localisedSt = "en".localized()
Bundle.setLanguage(lang: "en")
}
после этого я попытался перезагрузить приложение, перезагрузить вид, но ничего не изменилось.