Проблема с локализацией iOS

#swift #localization #native

#swift #локализация #родной

Вопрос:

Всем привет, я пытаюсь добавить multilang в свое приложение с помощью собственного решения. Моя проблема в том, что я сделал все, но по-прежнему не могу прочитать локализованную строку из файла.

Сначала я добавляю в свой проект файл Localize.string. Сначала я добавляю в свой проект файл 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 решил мою проблему, но также и ваше решение добавило больше полезности, также благодаря вам