#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
свойство и несколько других связанных свойств и функций.