Изменение языка приложения во время выполнения

#ios #swift3 #nslocalizedstring

#iOS #swift3 #nslocalizedstring

Вопрос:

Я пытаюсь изменить язык, который я получаю с помощью NSLocalizedString во время выполнения.

Я знаю, что этот вопрос уже задавался, но я не нахожу ответов для Swift 3.

Я попытался:

 UserDefaults.standard.removeObject(forKey: "AppleLanguages")
UserDefaults.standard.set("en", forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
  

и:

 let language = "en"
let path = Bundle.main.path(forResource: language, ofType: "lproj")
let bundle = Bundle(path: path!)
let string = bundle?.localizedString(forKey: "AppleLanguages", value: language, table: nil)
  

но ничего не работает….

Спасибо за вашу помощь!

Ответ №1:

Итак, в конце я использовал пользовательский класс localisator, доступный на Github, который позволяет переключать язык из любого места в приложении и даже сохранять if для дальнейших запусков приложения.

Оно написано на swift 2.2, но Xcode автоматически обновляет код до Swift 3. Просто пришлось изменить местами в демо:

 notification.name == kNotificationLanguageChanged
  

Для:

 notification.name.rawValue == kNotificationLanguageChanged
  

https://github.com/micazeve/iOS-CustomLocalisator