Вот как я это сделал. Я создал расширение для класса String и создал переменную localized
, которая получает строковые значения из моих Localizable.strings
файлов языка
public extension String {
var localized: String {
// currentLanguageCode is e.g. "en" or "nl"
let path = Bundle.main.path(forResource: LocalizationService.shared.currentLanguageCode, ofType: "lproj")
let bundle = Bundle(path: path!)
return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
}
}
Затем везде в моем коде, когда я хочу назначить локализованные строковые значения, я делаю:
titleLabel.text = "settings_label_userProfile".localized
Когда пользователь меняет язык, например в моем разделе настроек LocalizationService
устанавливает другой код языка и с тех пор свойство localized
будет возвращать значения этого кода языка. Необходимо убедиться, что пользовательский интерфейс перезагружен, если он все еще отображает предыдущие языковые строки.
РЕДАКТИРОВАТЬ:
Это решение будет работать, только если вы устанавливаете локализуемые строки программно.