Это действительно зависит от используемой вами версии Java.Когда вы говорите конвертировать в строку, я предполагаю, что вам может понадобиться:
- Преобразовать его в идентификатор локали, чтобы вы могли легко воссоздать локаль в будущем.
- Передать какСтроковое представление некоторой части системы.
- Получить (возможно, родное) имя языка, страны или объекта Locale.
Другие указали вам документацию, но я думаю, что этоЛучше пройтись по нескольким возможностям.
Объявление 1. Если вам нужно преобразовать в идентификатор Locale, лучший метод для Java 7 (который на самом деле не существовал в предыдущих выпусках) - toLanguageTag() .
Это потому, что вы можете легко хранить идентификатор локали в строке (включая все параметры, такие как сценарий, расширения Unicode и т. Д.) И воссоздать объект локали, используя forLanguageTag (String) без потери информации.Simple toString()
не содержит этого свойства.
Следующий фрагмент кода иллюстрирует мою точку зрения:
Locale locale = Locale.getDefault(Locale.Category.DISPLAY);
String localeId = locale.toLanguageTag();
Locale recreatedLocale = Locale.forLanguageTag(localeId);
До Java 7 вам действительно нужно было использовать toString()
и вручную обрабатывать страны и варианты (дляЛокаль состоит из трех идентификаторов, разделенных и подчеркивания, т.е. no_NO_NY.)
Ad 2. Если вам нужно передать Локаль в другую часть системы (например, веб-сервис), toString()
может и может бытьЭто не то что вы ищете.Это из-за того, что я написал выше - если вам нужен dash в качестве разделителя и вас не особо волнуют варианты, я бы предпочел методы getLanguage () и getCountry () чем обычный toString()
:
Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY);
String localeId = MessageFormat.format("{0}-{1}",
uiLocale.getLanguage(),
uiLocale.getCountry());
Этот метод должен хорошо работать с версиями Java начиная с версии 1.4.
Объявление 3. Если вы хотите представить отображаемое имя языка, страны или языка, поэтомуэтот пользователь может выбрать действительную локаль (то есть в своем профиле), которую вы, вероятно, ищете: getDisplayCountry (локаль) , getDisplayLanguage (локаль) и getDisplayName (локаль)) .Вы можете использовать их для отображения имен на целевом языке пользователя (при условии, что JVM имеет соответствующие переводы, что верно для многих языков):
Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY);
String languageName = uiLocale.getDisplayLanguage(uiLocale);
String countryName = uiLocale.getDisplayLanguage(uiLocale);
// usually something like langage (country), i.e. polski (Polska)
String localeName = uiLocale.getDisplayName(uiLocale);