Получить название страны из кода страны

Мне нужно получить полное название страны из кода страны. Например, для Нидерландов мне понадобится the Netherlands из кода страны NL.

Я думал, что смогу сделать это с помощью Locale, например:

Locale loc = new Locale("NL");
loc.getCountry();

но loc.getCountry(); пусто.

Есть идеи, как это сделать, пожалуйста? Заранее спасибо!


person noloman    schedule 11.01.2013    source источник


Ответы (5)


попробуй вот так

Locale loc = new Locale("","NL");
loc.getDisplayCountry();

Надеюсь, это поможет.

person Rahul Baradia    schedule 11.01.2013
comment
Вышеупомянутая версия с одним параметром конструктора Locale принимает первый параметр как язык, а не код страны. В моем случае это не сработало. Это должно быть примерно так, если нужно использовать код страны. Locale loc = new Locale (, NL); - person Rajat Sharma; 10.10.2013
comment
Это сработало для меня, я просто потратил много времени, думая, что не так с Local (OneParam) .... моя проблема, я не проверял документацию ... но спасибо, что поделился - person anoop4real; 29.11.2017

Это должно работать:

Locale l = new Locale("", "NL");
String country = l.getDisplayCountry();

Первый параметр Locale - это язык, который в вашем случае бесполезен.

person assylias    schedule 11.01.2013
comment
если я это сделаю, он получит NL, поэтому он недействителен - person noloman; 11.01.2013

Я хотел бы добавить больше информации к ответам выше.

Если вы хотите указать язык для результатов, вы можете использовать Locale("your language") в качестве параметра getDisplayCountry().

Например:

(new Locale("","NL")).getDisplayCountry(new Locale("ZH"));

«ZH» - это языковой код китайского языка. Вы получите «荷兰», это китайское название Нидерландов.

И вы можете использовать Locale("languages", "ISO-3166 code"), чтобы указать свой языковой вариант.

Например:

(new Locale("","NL")).getDisplayCountry(new Locale("ZH", "TW"));

Locale("ZH", "TW") означает вариант китайского языка на Тайване (традиционный китайский). Он имеет много отличий от варианта материкового Китая.

Вы получите «荷蘭», традиционное китайское название Нидерландов.

(Даже если вы не понимаете китайский язык, я думаю, очевидно, что второй китайский иероглиф в этих двух именах отличается.)

Если вы не укажете язык, вы получите название Нидерландов на языке дисплея устройства, который можно изменить в настройках телефона. Код такой:

(new Locale("","NL")).getDisplayCountry();

Вы можете получить список всех языков и вариантов, поддерживаемых Android в этом вопросе:

Если вы используете котлин:

Locale("", "NL").getDisplayCountry(Locale("ZH"))
Locale("", "NL").getDisplayCountry(Locale("ZH", "TW"))
Locale("", "NL").displayCountry
person Sun Jiao    schedule 01.05.2020

Попробуйте использовать другой конструктор

Locale loc = new Locale("NL", "The Netherlands");

Locale Похоже, что предопределенный языковой стандарт для The Netherlands отсутствует

person Ruben    schedule 11.01.2013
comment
но я не могу знать, что NL это the Netherlands, на самом деле это то, что я хочу получить, the Netherlands от NL :) - person noloman; 11.01.2013

для полного решения TelephonyManager (из этого решения):

TelephonyManager teleMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String localeCountry = teleMgr.getNetworkCountryIso();
if (localeCountry != null) {
    Locale loc = new Locale("",localeCountry);
    Log.d(TAG, "User is from " + loc);
}
person Odaym    schedule 28.04.2016
comment
Это возвращает текущий ISO устройства. Вопрос не в этом. - person Chad Bingham; 28.12.2018