Я хотел бы показать текущий язык, который использует пользовательский интерфейс устройства. Какой код я бы использовал?
Я хочу это как NSString
полностью изложенный формат. (Не @ "en_US")
РЕДАКТИРОВАТЬ: Для тех, кто проезжает мимо, здесь есть множество полезных комментариев, поскольку ответ эволюционировал с новыми выпусками iOS.
NSLocale
. Смотри мой ответ.[NSLocale preferredLanguages]
. Раньше его разделяли подчеркиванием (напримерen_US
), но теперь оно было изменено на тире:en-US
NSLocale
имеет методыcomponentsFromLocaleIdentifier:
иlocaleIdentifierFromComponents:
, вероятно, является правильным способом обработки (потенциально изменяемого) формата.Ответы:
Предоставленные решения фактически возвращают текущий регион устройства, а не текущий выбранный язык. Это часто одно и то же. Однако, если я нахожусь в Северной Америке и установил свой язык на японский, моим регионом все равно будет английский (США). Чтобы восстановить выбранный в данный момент язык, вы можете сделать:
Это вернет двухбуквенный код для текущего выбранного языка. «en» для английского, «es» для испанского, «de» для немецкого и т. д. Дополнительные примеры см. в этой записи в Википедии (в частности, столбец 639-1):
Список кодов ISO 639-1
Тогда нужно просто преобразовать двухбуквенные коды в строку, которую вы хотите отобразить. Так что, если это «en», выведите «English».
Надеюсь, это поможет кому-то, кто хочет отличить регион от выбранного языка.
РЕДАКТИРОВАТЬ
Стоит процитировать информацию заголовка из NSLocale.h:
Люди, интересующиеся языком приложения, смотрят на ответ @ mindvision
источник
NSLocale preferredLanguages
изменено. Если до этого вы получали только «en», в iOS 9 вы получите «en-US» или «en-JP» и т. Д. Ссылка: happyteamlabs.com/blog/…Выбранный ответ возвращает текущий язык устройства, но не фактический язык, используемый в приложении. Если вы не предоставляете локализацию в своем приложении для предпочтительного языка пользователя, используется первая доступная локализация, упорядоченная в соответствии с предпочтительным порядком пользователя.
Чтобы узнать текущий язык, выбранный в вашей локализации, используйте
Пример:
Swift:
источник
Решение для iOS 9:
language = "en-US"
languageDic будет иметь необходимые компоненты
countryCode = "США"
languageCode = "en"
источник
Это, вероятно, даст вам то, что вы хотите:
Он покажет название языка, на самом языке. Например:
источник
Все принятые и другие ответы не учитывают, что предпочтительным языком может быть язык, отличный от языка устройства .
Язык устройства - это язык, на котором представлены элементы операционной системы и приложения Apple.
Предпочтительный язык является языком пользователь хотел бы иметь приложение , локализованное в. Apple , предоставляет только ограниченный набор переводов. Если предпочтительным языком является один язык, на который Apple перевела свои приложения, это также будет язык устройства. Однако, если пользователь предпочитает язык, для которого Apple не предоставляет переводы, устройство и предпочтительные языки не будут совпадать . Язык устройства не будет на первой позиции в списке предпочтительных языков.
Следующая функция просматривает список предпочитаемых языков и проверяет, есть ли перевод в платформах Apple. Первый язык для перевода - это язык устройства. Функция вернет свой код языка.
Это работает, если список предпочитаемых языков:
Список предпочитаемых языков можно редактировать в : Settings.app -> Общие -> Язык и регион -> Порядок предпочтительных языков
Вы можете использовать код языка устройства и перевести его на название языка. В следующих строках будет напечатан язык устройства на языке устройства. Например, «Español», если устройство настроено на испанский.
источник
NSBundle(forClass: UIView.self)
вы пытаетесь предоставить наиболее конкретный язык для данного представления. Однако, используя это, я столкнулся с проблемой, когда для данного класса язык не был возвращен. Я изменил инициализацию наNSBundle.mainBundle()
и мне вернули ожидаемый код языка.mainBundle()
кажется, один Яблоком рекомендуется , как предложено в заголовке дляNSLocale
,// note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information
.NSBundle.mainBundle()
возвращает ваш пакет приложений, тогда какNSBundle(forClass: UIView.self)
возвращает системный пакет UIKit. описанный метод ищет каталоги в комплекте. ваш пакет приложений будет содержать только те языки, на которые вы хотите установить локализацию. Чтобы определить язык устройства, вам необходимо проверить комплектацию системы.NSLocale.preferredLanguages()
. я обновил ответ для поддержки iOS 9 .я использую это
игнорировать утечку памяти ..
и результат
источник
Перевод кодов языков, таких как en_US, на английский (США) является встроенной функцией
NSLocale
иNSLocale
не имеет значения, откуда вы получаете коды языков. Таким образом, на самом деле нет оснований для реализации собственного перевода, как предполагает принятый ответ.Принты: английский, немецкий, шведский
источник
Даже есть лучший способ узнать текущий язык устройства. Давайте попробуем это по приведенному ниже коду -
Предложил Abizern на здесь
источник
Вы можете использовать
displayNameForKey:value:
методNSLocale
:Это распечатает:
Если вы укажете тот же идентификатор локали для метода,
initWithLocaleIdentifier:
а также дляdisplayNameForKey:value:
метода, он даст вам родное имя языка. Я обнаружил, что если вы удаляете код страны и используете justfr
anden
, то он также пропускает страну из отображаемого имени (по крайней мере, в Mac OS X, не уверен насчет iOS).источник
стриж
Получить текущий язык устройства
Чтобы получить язык приложения
Замечания:
Он выбирает язык, который вы указали в CFBundleDevelopmentRegion info.plist
если CFBundleAllowMixedLocalizations имеет значение true в info.plist, тогда возвращается первый элемент CFBundleLocalizations в info.plist
источник
Я пытался найти правильное решение для себя. При использовании
Locale.preferredLanguages.first
был возвращен предпочитаемый язык из настроек вашего приложения.Если вы хотите узнать язык из настроек устройства пользователя, вам следует использовать строку ниже:
Свифт 3
Чтобы развернуть и использовать, посмотрите на строку ниже:
источник
Для получения текущего языка пользовательского устройства используйте следующий код, он работал для меня.
источник
iOS13, Swift 5+, WWDC2019 https://developer.apple.com/videos/play/wwdc2019/403/
Пользователи могут выбирать предпочитаемый язык приложения независимо от языка ОС.
Вы можете использовать это:
источник
Для разработчиков MonoTouch C # используйте:
Примечание: я знаю, что это был вопрос для iOS, но, поскольку я являюсь разработчиком MonoTouch, ответ на этой странице привел меня в правильном направлении, и я решил поделиться результатами.
источник
В
Swift
:источник
Свифт 3
источник
Простая функция Swift 3:
источник
Если вы ищете код предпочитаемого языка («en», «de», «es» ...) и локализованное имя предпочитаемого языка (для текущей локали), вот простое расширение в Swift:
}
источник
источник
Если вы хотите получить только язык, вот мой предложенный ответ:
В моем случае я просто хотел только язык Locale, а не регион locale.
Вывод: Если ваш язык локали - японский, а регион - Япония, то:
langplusreg = ja-JP
langonly = ja
источник
Ответ @amir в Swift:
источник
Очевидно, что решения, основанные, например, на
обычно работают нормально и возвращают текущий язык устройства.
Но это может вводить в заблуждение в некоторых случаях:
Если приложение, в котором вы хотите получить это значение, уже изменило язык, например, с таким кодом:
В этом случае [NSLocale предпочитаемый язык] фактически возвращает набор предпочтительного языка (и использованный) в этом конкретном приложении, а не текущий язык устройства!
И ... в этом случае единственный способ правильно получить текущий текущий язык устройства (а не тот, который был ранее установлен в приложении), это сначала очистить ключ @ "appleLanguages" в NSUserDefaults, например так:
Затем [NSLocale предпочитаемый язык] теперь возвращает правильное значение.
Надеюсь, это поможет.
источник
Обновленный ответ для Swift 4
источник
NSLocale.preferredLanguages
должен вернуть предпочтительные для пользователя, не обращая внимания на то, что поддерживается пакетом.Для Swift 3.0 ниже код может быть использован для ответа на ваш вопрос:
источник
В Swift 4.2 и Xcode 10.1
источник
Согласно документации Apple
источник
Формат двух букв. Apple использует стандарт ISO ISO-3166 .
источник
Для Swift 3:
NSLocale.preferredLanguages [0] as String
источник
Начиная с iOS 9, если вам нужен код языка без кода страны, вам понадобится такая вспомогательная функция, поскольку язык будет содержать код страны.
источник
СВИФТ-4
источник
NSLocale.preferredLanguages
должен вернуть предпочтительные для пользователя, не обращая внимания на то, что поддерживается пакетом.