#swift #localization #native
#swift #локализация #родной
Вопрос:
Всем привет, я пытаюсь добавить multilang в свое приложение с помощью собственного решения. Моя проблема в том, что я сделал все, но по-прежнему не могу прочитать локализованную строку из файла.
Сначала я добавляю в свой проект файл Localize.string.
Во-вторых, я добавляю второй язык в проект / Базовый код / Там также есть мой локализованный.Строковый файл
Вот мое расширение
extension String {
func localized() -> String {
if let _ = UserDefaults.standard.string(forKey: "lang") {} else {
UserDefaults.standard.setValue("en", forKey: "lang")
UserDefaults.standard.synchronize()
}
let lang = UserDefaults.standard.string(forKey: "lang")
let path = Bundle.main.path(forResource: lang, ofType: "lproj")
let bundle = Bundle(path: path!)
return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
}}
Я пытаюсь использовать label.text = «язык».локализовано ()
Но на выходе моей метки отображается «язык». Я также очистил производные данные. Но я не могу найти решение
Комментарии:
1. Я думаю, вам нужно установить имя файла как
Localizable.strings
2. Большое вам спасибо, вы были правы, проблема заключалась в имени строкового файла. Если вы ответите на вопрос из Answer Question (синяя кнопка) Я могу проголосовать за ваш.
Ответ №1:
1. Изменение в реализации функции
Самая простая реализация для вашего func localized() -> String
может быть такой
func localized() -> String {
return Bundle.main.localizedString(forKey: self, value: nil, table: "Localize") <-- the .strings file name from which you expect your localized value
}
Если вы планируете иметь несколько .strings
файлов ресурсов, вам может потребоваться передать имя файла в качестве параметра этой функции.
Если вы хотите использовать один файл ресурсов с именем Localizable.strings
, используйте вместо этого следующее определение.
func localized() -> String {
return NSLocalizedString(self, comment: "") <-- Picks up localized version from `Localizable.strings`
}
Вы можете избежать доступа к UserDefaults
и сохранения его вызова synchronize()
каждый раз при получении локализованного значения, поскольку это операция ввода-вывода файла. Также я не понимаю полезности этого.
2. Укажите турецкий язык в качестве языка приложения в параметрах запуска, чтобы увидеть локализацию в действии на симуляторе.
Во время работы на silutor вам может потребоваться передать турецкий язык в качестве языка приложения из опций lanch. Выберите свой Scheme
-> Edit Scheme
Комментарии:
1. Jithin решил мою проблему, но также и ваше решение добавило больше полезности, также благодаря вам