Почему я получаю разные 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, сообщая неправильный язык на устройстве.

Другие вопросы по тегам