TL;DR:
Используйте Bundle.main.preferredLocalizations[0]
, чтобы получить язык, на котором в данный момент отображается пользовательский интерфейс вашего приложения. Не используйте Locale.current
, поскольку он описывает формат региона (время, валюта, расстояние и т. д.) и не имеет ничего общего с языком.
Подробный ответ:
четкий ответ о том, как получить код языка(!) для языка, на котором отображается пользовательский интерфейс вашего приложения, исходит от инженера Apple Куинна Эскимоса, и я цитирую/перефразирую для Swift:
Locale.current
возвращает текущую локаль, то есть значение, заданное в разделе Настройки › Общие › Язык и регион › Форматы регионов. Это не имеет никакого отношения к языку, на котором работает ваше приложение. Вполне разумно и на самом деле довольно часто для пользователей в полевых условиях устанавливать для своих локали и языка «конфликтующие» значения. Например, для носителя английского языка, проживающего во Франции, язык должен быть установлен на английский, но он может выбрать французский язык (таким образом, он получит метрические веса и меры, время 24 и т. д.).
Язык, на котором работает ваше приложение, определяется параметром языка, то есть Настройки › Общие › Язык и регион › Предпочтительный порядок языков. Когда система запускает ваше приложение, она берет этот список языков (предпочтительный список) и сопоставляет его со списком языков, на которые локализовано ваше приложение (список приложений). Первый язык в предпочтительном списке, который существует в списке приложений, — это язык, выбранный для приложения. Это то, что вы найдете в первой записи массива preferredLocalizations
основного пакета.
Название языка из кода
Чтобы получить удобочитаемое название языка из его кода, вы можете использовать это:
let langCode = Bundle.main.preferredLocalizations[0]
let usLocale = Locale(identifier: "en-US")
var langName = ""
if let languageName = usLocale.localizedString(forLanguageCode: langCode) {
langName = languageName
}
Это даст вам английское название текущего языка пользовательского интерфейса.
person
Johannes Fahrenkrug
schedule
09.03.2021