Как получить локализованные языки моего приложения для iOS?

#ios #swift #localization

#iOS #swift #локализация

Вопрос:

Я хочу добавить функцию для изменения языка приложения внутри приложения (независимо от языка iPhone).

Чтобы показать доступные языки, вместо их жесткого кодирования я хочу получить список поддерживаемых локализованных языков и сделать его динамическим. Тогда каждый раз, когда я добавляю новый локализованный язык, он будет автоматически добавлен в список доступных языков.

Есть какой-нибудь способ сделать это?

Ответ №1:

Используйте:

 let languageIds = Bundle.main.localizations
  

чтобы получить список языковых идентификаторов. Затем вы можете преобразовать идентификатор каждого языка в название локализованного языка с помощью:

 let loc = Locale(identifier: langId)
let name = loc.localizedString(forLanguageCode: langId) ?? "Unknown"
  

Вот некоторый код, который создает словарь доступных языков в пакете вашего приложения. Он вводится в locale id (идентификатор языка), и каждое значение является локализованным названием языка для каждого идентификатора локали.

 let langIds = Bundle.main.localizations
var languages = [String:String]()
for langId in langIds {
    let loc = Locale(identifier: langId)
    if let name = loc.localizedString(forLanguageCode: langId) {
        languages[langId] = name
    } else {
        // this should never be reached
    }
}
  

Bundle Класс также предоставляет preferredLocalizations свойство и несколько других связанных свойств и функций.