Используйте localization
для изменения языка приложения без перезапуска.
- Перейти к проекту -> выбрать проект в структуре документа -> Добавить новый язык.
![enter image description here](https://i.stack.imgur.com/uC3lB.png)
- Добавьте
Localized.strings
файлы в ваш проект.
![enter image description here](https://i.stack.imgur.com/IGj2p.png)
- Добавить строки, которые используются для локализации в
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](https://i.stack.imgur.com/koIrz.gif)