Почему я получаю разные Locale.current в разных приложениях?
У меня есть два разных приложения, которые я запускаю из XCode на одном устройстве.
В приложении AppDelegate didFinishLaunchingWithOptions я распечатываю следующее сообщение об отладке:
print( Locale.current )
В одном приложении это распечатывает sv_SE
(как я и ожидал), но в другом приложении он распечатывает en_SE
!!
В следствии, dateFormatter.string
будет производить английские имена вместо шведских имен, которые я ожидал.
func dayOfWeek(date:Date) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE"
dateFormatter.locale = Locale.current // locale is en_SE not sv_SE ???
let dayname = dateFormatter.string(from: date).capitalized
return dayname // returns SATURDAY not LÖRDAG
}
Вопрос: Почему я получаю разные локали в разных приложениях при запуске на одном устройстве?
1 ответ
Я нашел ответ здесь: Locale.current сообщает о неправильном языке на устройстве
Ответ был таков: Locale.current
это не локаль, установленная на устройстве, а "компромисс" между той локалью, которую поддерживает приложение. Мое первое приложение поддерживало шведский, а второе - нет. Чтобы получить локаль на устройстве, вместо этого следует использовать Locale.preferredLanguages.first
, как это делается в ответе на Locale.current, сообщая неправильный язык на устройстве.