Elettracompany.com

Компьютерный справочник
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Locale english java

Интернационализация, i18n, l10n

Вопрос интернационализации пользовательского интерфейса — один из важных вопросов при разработке приложения. Для этого недостаточно использовать Unicode и перевести на нужный язык все сообщения пользовательского интерфейса. Интернационализация приложения означает нечто большее, чем поддержка Unicode. Дата, время, денежные суммы и даже числа могут по-разному представляться на различных языках.

Широкое распространение получили условные сокращения терминов интернационализации и локализации приложений i18n и l10n, в которых цифра означает количество символов между первой и последней позицией:

  • i18n — интернационализация (internationalization);
  • l10n — локализация (localization).

В отдельной литературе делают акцент на этих двух определениях, под которыми понимается :

  1. Интернационализация — это процесс разработки приложения такой структуры, при которой дополнение нового языка не требует перестройки и перекомпиляции (сборки) всего приложения.
  2. Локализация предполагает адаптацию интерфейса приложения под несколько языков. Добавление нового языка может внести определенные сложности в локализацию интерфейса.

Java — первый язык программирования, в котором изначально были предусмотрены средства интернационализации. Строки формируются из символов Unicode. Поддержка этого стандарта кодирования позволяет создавать Java-приложения, обрабатывающие тексты на любом из существующих в мире языков.

Большинство фреймворков, используемые в Java 2EE, поддерживает интернационализацию приложений с использованием Java-технологии, существенно снижая трудозатраты при разработке Web-приложения, «говорящего» на нескольких языках.

Региональные стандарты Locale

Приложение, которое адаптировано для международного рынка, легко определить по возможности выбора языка, для работы с ним. Но профессионально адаптированные приложения могут иметь разные региональные настройки даже для тех стран, в которых используется одинаковый язык. В любом случае команды меню, надписи на кнопках и программные сообщения должны быть переведены на местный язык, возможно с использованием специального национального алфавита. Но существует еще много других более тонких различий, которые касаются форматов представления вещественных чисел (разделители целой и дробной частей, разделителей групп тысяч) и денежных сумм (включение и местоположения денежного знака), а также формата даты (порядок следования и символы разделители дней, месяцев и лет).

Существует ряд классов, которые выполняют форматирование, принимая во внимание указанные выше различия. Для управления форматированием используется класс Locale.

Региональный стандарт Locale определяет язык. Кроме этого могут быть указаны географическое расположение и вариант языка. Например, в США используется следующий региональный стандарт:

language=English, location=United States

В Германии региональный стандарт имеет вид :

В Швейцарии используются четыре официальных языка : немецкий, французский, итальянский и ретороманский. Поэтому немецкие пользователи в Швейцарии, вероятно, захотят использовать следующий региональный стандарт:

В данном случае текст, даты и числа будут форматироваться так же, как и для Германии, но денежные суммы будут отображаться в швейцарских франках, а не в евро. Если задавать только язык, например language=German, то особенности конкретной страны (например, формат представления денежных единиц) не будут учтены.

Вариант языка используется довольно редко. Например, в настоящее время в норвежском языке (производном от датского) определены два набора правил правописания (Bokmel) и новый (Nynorsk). В этом случае, для задания традиционных правил орфографии используется параметр, определяющий вариант:

language=Norwegian, location=Norway, variant=Bokmel

Для выражения языка и расположения в компактной и стандартной форме в Java используются коды, определенные Международной организацией по стандартизации (ISO). Язык обозначается двумя строчными буквами в соответствии со стандартом ISO-639, а страна ( расположение)- двумя прописными буквами согласно стандарту ISO-3166.

Чтобы задать региональный стандарт, необходимо объединить код языка, код страны и вариант (если он есть), а затем передать полученную строку в конструктор класса Locale.

Для удобства пользователей в JDK предусмотрено несколько предопределенных объектов с региональными настройками, а для некоторых языков также имеются объекты, позволяющие указать язык без указания страны:

java.util.Locale Example

Posted by: Rohit Joshi in Locale June 3rd, 2014 1 Comment Views

In this article we will discuss about the Locale class from java.util package. The Locale is used to make the system relevant and usable for the users from different cultures. In other words, it is used to customize the system for different people of different region, culture and language.

A Locale object represents a specific geographical, political, or cultural region.

Let’s discuss about the Locale class and how to create, query and use a Locale object.

1. Locale Instantiation

There are many ways to create a Locale object. As of JDK 7, there are four ways to create a Locale object. In the following example, we will see different ways of creating it and differences between them.

1.1 Using constructor

1.1a. Locale(String language) : Construct a locale from a language code. For e.g. “fr” is a language code for French.

1.1.b. Locale(String language, String country) : When you have a language code and a country, you can use this constructor with two parameters that takes a language as first parameter and a country as second parameter to create a locale object.

1.1c. Locale(String language, String country, String variant) : Construct a locale from language, country and variant. Any arbitrary value can be used to indicate a variation of a Locale .

1.2 Using Builder method

From JDK 7 releases, the Locale provides a Builder to create an instance of the Locale class. Using Locale.Builder you can instantiate an object that conforms to BCP 47 syntax.

Locale localeFromBuilder = new Locale.Builder().setLanguage(«en»).setRegion(«GB»).build();

1.3 Using forLanguageTag method:

forLanguageTag (String languageTag) returns a locale for the specified IETF BCP 47 language tag string. If the specified language tag contains any ill-formed subtags, the first such subtag and all the following subtags are ignored.

Locale forLangLocale = Locale.forLanguageTag(«en-GB»);

1.4 Locale constants

Java provides a set of pre-defined constants for some languages and countries. If a language constant is specified, then the regional portion of that locale is undefined.

Locale localeCosnt = Locale.FRANCE;

  • If we run the above code, we will have the following results:

Although, you can use any of these ways to create a locale object. But it is recommended to use forLanguageTag and Locale.Builder methods. The reason is these two methods return a locale for the specified IETF BCP 47 language tag string. BCP 47 imposes syntax restrictions that are not imposed by Locale’s constructors. This means that conversions between some Locales and BCP 47 language tags cannot be made without losing information.

2. Methods

In this section, we will discuss about some of the important methods of the Locale class. You can use these methods on a locale object to get some information about the Locale .

  • If we run the above code, we will have the following results:

Please note that in the above example, we have printed only that script and variant which are specified for the locale object.

Читать еще:  Console log javascript

Locale.getDefault() gets the current value of the default locale for current instance of the Java Virtual Machine. The Java Virtual Machine sets the default locale during startup based on the host environment.

Locale.getAvailableLocales() returns an array of all available locales installed on that particular JVM machine.

String getDisplayName() is an instance method which returns the name of the locale object (appropriate to display) in string form. The name contains values returned by getDisplayLanguage(), getDisplayScript(),getDisplayCountry(), and getDisplayVariant() methods .

String getLanguage() returns the language code of the locale object.

String getDisplayLanguage() returns the name of the locale’s language. It shows an appropriate name for display to the user.

String getCountry() returns the country/region code for this locale, which should either be the empty string, an uppercase ISO 3166 2-letter code, or a UN M.49 3-digit code.

String getDisplayCountry() returns the name of the locale’s country. It shows an appropriate name for display to the user.

String getScript() returns the script code for this locale. It should either be the empty string or an ISO 15924 4-letter script code. The first letter is uppercase and the rest are lowercase, for example, ‘Latn’, ‘Cyrl’.

String getDisplayScript() returns the name of the locale’s script appropriate for display to the user.

String getVariant() returns the variant code, or the empty string if none is defined.

String getDisplayVariant() returns a name for the locale’s variant code that is appropriate for display to the user.

3. Locale sensitive classes

The Locale is the mechanism for identifying the kind of object that you would like to get. Java provides certain classes which provide locale specific operations. For example, they provide methods to format values that represent dates, currency and numbers according to a specific locale. These classes are known as Locale sensitive classes.

In the following example, we will use NumberFormat , Currency , and DateFormat classes to illustrate about locale sensitive operations.

  • If we run the above code, we will have the following results:

In the above example, we have used the getInstance() static method to get the instance about the respective class. The getInstance() methods used in two variety one without locale (which uses the default locale set in the current instance of the JVM) and another with a Locale as its parameter.

You can clearly see the differences in the output due to difference in the locale object used.

This was an example of how to use the Locale class and some of its basic methods.

Java.util.Locale Class в Java | Комплект 1

Как следует из названия, util.Locale Class используется для выполнения задачи локали и предоставляет информацию о локали для пользователя.
Декларация:

Конструкторы:

  • Locale (String L): создает языковой стандарт для данного кода языка.
  • Locale (String L, String C): создает языковой стандарт для данного языка и кода страны.
  • Языковой стандарт (строка L, строка C, строка V): создает языковой стандарт для данного языка, страны, кода варианта.

Методы:

  1. getDisplayCountry ():java.util.Locale.getDisplayCountry () возвращает страну, которой принадлежит локаль.
    Синтаксис:
  2. getDefault ():java.util.Locale.getDefault () возвращает текущее значение по умолчанию для локали согласно экземпляру JVM.
    Синтаксис:
  3. getCountry ():java.util.Locale.getCountry () возвращает страну для локали, которая может быть пустой, или двухбуквенный код ISO 3166.
    Синтаксис:
  4. equals (Object locale2):java.util.Locale.equals (Object locale2) проверяет, равны ли две локали или нет.
    Синтаксис:
  5. clone ():java.util.Locale.clone () создает клон локали.
    Синтаксис:
  6. getAvailableLocales ():java.util.Locale.getAvailableLocales () возвращает массив всех установленных языковых стандартов.
    Синтаксис:
  7. getDisplayLanguage ():java.util.Locale.getDisplayLanguage () возвращает язык с локалью.
    Синтаксис:
  8. getDisplayLanguage (Locale in):java.util.Locale.getDisplayLanguage (Locale in) возвращает язык, локализованный в соответствии с «in» Locale, если это возможно.
    Синтаксис:
  9. getDisplayName ():java.util.Locale.getDisplayName () отображает имя локали
    Синтаксис:
  10. getDisplayLanguage (Locale in):java.util.Locale.getDisplayLanguage (Locale in) возвращает язык «in» локали.
    Синтаксис:
  11. getISO3Country ():java.util.Locale.getISO3Country () отображает трехбуквенное сокращение страны локали.
    Синтаксис:

// Java-программа, иллюстрирующая использование методов:
// getDisplayCountry (), getCountry (), equal (), clone (),
// getAvailableLocales (), getDefault (),
// getDisplayLanguage (Locale in), getDisplayLanguage (),
// getDisplayName (Locale in), getDisplayName (),
// getISO3Country ()

public class NewClass

public static void main(String[] args)

// Создание новой локали

Locale geek1 = new Locale( «English» , «IN» );

Locale geek2 = Locale.getDefault();

System.out.println( «Locale name : » + geek1);

System.out.println( «Locale name Default : » + geek2);

System.out.println( «nCountry Name : «

System.out.println( «Country Name ISO 3166 2-letter code : «

System.out.println( «nIs geek1 equals geek2 : «

// clone (): geek3 является клоном geek2

Locale geek3 = (Locale) geek2.clone();

System.out.println( «Locale geek3 same as geek2 : «

Locale[] geek4 = Locale.getAvailableLocales();

// Мы не печатаем все локали.

System.out.println( «nInstalled locales are : » );

for ( int i = 1 ; i 10 ; i++)

System.out.println( «ngeek2 Language : «

// Использование getDisplayLanguage (Locale in):

System.out.println( «Language of in Locale : «

+ geek1.getDisplayLanguage( new Locale( «France» , «French» )));

System.out.println( «nUse of getDisplayName : «

// Использование getDisplayName (Locale in):

System.out.println( «Name of in Locale : «

+ geek2.getDisplayName( new Locale( «English» , «english» )));

System.out.println( «nISO3 Country Name of geek3 : «

Выход :

Эта статья предоставлена Mohit Gupta_OMG . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Internationalization with Java Locale

We emphasize quite often the importance and value of respecting the user’s language and geographical region when developing software applications. Allowing the user to communicate with the software in their own language could be a serious boost to the software’s sales. When it comes to Java, it is the concept of Java locale that spells out the internationalization process.

The Java locale consists of three main elements: language, country, and variants. Language and country are quite self-explanatory, but variant code is slightly different. Sometimes, software vendors, be it operating systems or browsers, can use the code for additional functionalities. In Java locale, you can provide these additional details using variant codes. An example of a locale with three components would be de_DE_WIN — a locale for Windows for German speakers in Germany.

What Is Locale Object?

The concept of Java locale is implemented by the java.util.Locale class. To define the locale for the application(language, country, and variant), you would use the Locale object, which is only an identifier. Real localization is done by locale-sensitive classes. Objects that you create from locale-sensitive classes customize themselves as to how to format and present data to the user. These classes use the Locale object to understand which locale is being used in the application; a good example would be the NumberFormat class. Thus, NumberFormat may return a number as 302 400 for France; 302 .400 for Germany; 302, 400 for the United States.

Some of the Local-sensitive classes defined in the Java Standard API are:

  • NumberFormat
  • DateFormat
  • DecimalFormat

Creating Java Locale Objects

Let’s dive into the code now. There are four ways to create Locale objects.

  • Locale Constructors
  • Locale.Builder Class
  • Locale.forLanguageTag Factory Method
  • Locale Constants

Using Locale Constructors

There are three constructors available for the creation of Locale objects.

  • Locale(String language) – you can use only the language to create the locale object: Locale locale = new Locale(«en»);
  • Locale(String language, String country) – you can use both language and country to create the locale object: Locale locale = new Locale(«en», «US»);
  • Locale(String language, String country, String variant) – you can use all three components – language, country, and variant – to create the locale object: Locale locale = new Locale(«en», «US», «SiliconValley»);

Here’s a complete example of using Locale constructors:

In the output, you can see how German and US English display large numbers and dates:

March 28, 2019 12:30:07 PM UTC

28. März 2019 12:30:07 UTC

Using Locale.Builder class

You can also use the Locale.Builder class to create Locale objects. This class has only one constructor and doesn’t take any arguments. You have to use a chain of setter methods to specify the language, country, and variant.

Using the Locale.forLanguageTag Factory Method

IETF BCP 47 is a standard that defines Language tags to identify locales, and the Java SE 7 package conforms to it. You can use the IETF BCP 47 standard language tags to create Locale objects with the Locale.forLanguageTag Factory Method. For example:

We will go through language tags later on; the code below shows you how to use the Locale.forLanguageTag Factory Method to create locale objects.

The output would be:

Locale Constants

This is probably the easiest way to create the Locale object. To make things more convenient, Java has pre-defined constants for some languages and countries. For instance: Japan is the constant for Japan, the country, while Japanese is the constant for the Japanese language. You simply need to use a constant to create a locale of that kind. The following code is an example of how to use Locale constants.

This code basically does the same thing as the previous example, the only difference is how it creates the Locale object. The output is:

Java Locale Codes

You might have noticed that we are using codes when creating objects with Locale constructors and the Locale.Builder method. There is a list of available Language codes and Country codes for Java. A full list of available codes will make this article unnecessarily long. What you get to see here is an overview of the more common ones:

  • English — en
  • German — de
  • French — fr
  • Russian –ru
  • Japanese — ja
  • Chinese — zh
  • Arabic — ar

The same language could be spoken in several countries. How the language is used could be different from country to country. For instance, English used in the USA is different from the English used in the UK. That’s why it’s important to specify the country in your Locale object. The country is specified with unique country codes…

  • United States — US
  • Germany — DE
  • France — FR
  • United Kingdom — UK
  • Canada — CA

Java Locale Language Tags

Language tags are strings with a special format used to give information on a particular locale. It can be as simple as “en” for English or as complex as “zh-cmn-Hans-CN” for Chinese, Mandarin, Simplified script, used in China.

Language tags are used by Locale.forLanguageTag(LanguageTag) to create Locale objects.

This code does nothing but creating a Locale object using the “en-US” language tag.

Language Ranges

Language range is a set of Language tags that share certain attributes. For example, “es-*” can be used to recognize Spanish in any region.

The Locale.LanguageRange constructor used in the above example takes two arguments. The first argument is the language range, and the second argument is weight. Usually, this weight is used to express the user’s preference. In this example, we’ve created three ranges from the highest user preference to the lowest user preference.

Creating Priority Lists

You can create a priority list using a set of language ranges.

rangeString is a valid string with a set of locales and their weights. Then we parse it using the parse() method in Locale.LanguageRange class to create a Language priority list.

Using Priority Lists to Filter Tags

In the previous example, we created a Language priority list. In the Language tag filtering process, we match a set of language tags against a Priority list.

The output of this program is:

The Scope of Locale

One of the most important aspects of using locale in Java is its scope. You don’t have to use the same locale in one single program. Actually, you can give a different locale to each locale-sensitive object used in your application.

An interesting case would be the development of distributed applications. Suppose your application receives requests from different countries. How do you decide on the locale of the application? What you can do here is using separate threads to serve requests and assign a locale for each thread.

Retrieving Locale Information

The Locale object offers many methods for obtaining information about the locale being used. Let’s get to know some of them.

Get the Language of the Locale

The getLanguage() and getISO3Language() method can be used to retrieve the language of the locale. Here, getLanguage() returns an ISO2 letter while getISO3Language() an ISO3 letter.

First, I created a locale object using Locale constants. Then, I called the getLanguage() method on that object. It returns an ISO2 code for the German language which is de. Next, I called locale.getISO3Language() . It returned an ISO3 code for the German language which is deu.

Get the Country of the Locale

The getCountry() and getISO3Country() can be used to retrieve the language of the locale. Here, getCountry() returns ISO2 letter while getISO3Country() returns ISO3 letter.

The output of this code will be quite similar to the previous example:

ISO 2 letter: DE

ISO 3 letter: DEU

If you check the output in the above examples, those short form tags are not suitable for users. Java Local object provides methods which return that above details in more readable fashion.

Get Display Language

The getDisplayLanguage method is used to get the language in a more common fashion. There are two overriding getDisplayLanguage methods. If you use an empty-argument method, it will return the value in the default locale. If you pass the target locale as an argument, this method will return value from target locale.

In the first case, you haven’t passed any argument to the getDisplayLanguage method. Therefore, the locale value (German) is displayed in the default locale, which is en_US. Next, I attributed the target locale to the getDisplayLanguage method. Therefore Deutsch is displayed.

Get Display Country

The getDisplayCountry method will return the locale called in a readable form. The getDisplayCountry method works similarly to the getDisplayLanguage Method.

The output will be quite similar to the previous example, except that this time the country will be displayed.

Get Display Name

The getDisplayName method can be used to get the full locale name on which it is called. It works similar to the previous two methods:

The output would look like this:

Wrapping Up

If you are comfortable with Java internationalization, you may want to go a few steps further and learn how to internationalize JSP applications or how to internationalize a Spring boot application. If you find it difficult to Internationalize your Java application, read this article to find out if you can make use of a professional localization service. PhraseApp can help you to manage your localization projects in many ways. Besides Java, PhraseApp also supports other programming languages including PHP, Python, Ruby or JavaScript. Sign up for a free 14-day trial and try it for yourself.

Locale english java

Кто о чем, а я опять о джаве. На этот раз речь пойдет о локализации. Под локализацией подразумевается отображение данных (прежде всего пользовательского интерфейса) на языке пользователя. Наиболее ярким примером различия представления данных, по-моему, является отображение даты — в России принят формат День, Месяц, Год, а в США — Месяц, День, Год. Грамотно написанная программа должна эти различия учитывать.

Основным классом, отвечающим за разное представление данных в разных странах, является в java класс java.util.Locale . Существует целый набор стандартных локалей, идентифицируются они в основном по двум параметрам — языку и стране, иногда может добавляться платформа — Windows или Unix. Все доступные локали можно посмотреть следующей программкой.

Список будет выглядеть примерно так: en_US, en_UK, en, ru_RU и т.д. Первая часть каждого слова — язык, вторая часть — страна. Иногда встречаются конструкции вида ru_RU_UNIX . Т.е. локаль для русских юникс-машин, расположенных в России. На каждом компьютере своя локаль по умолчанию, у меня, да и большинства российских пользователей, полагаю — ru_RU . Узнать собственную локаль можно следующей командой: System.out.println(Locale.getDefault());

А вот теперь самое интересное. Допустим, мы хотим написать программу, которая приветствует пользователя на его языке. Как это сделать? Наиболее очевидный и неправильный способ — воспользоваться условными конструкциями типа if или switch . Работать будет, но при необходимости добавить не предусмотренный заранее язык придется править программу, а это неправильно. Более правильный способ — вынести все требующие перевода фразы в текстовый файл. Тогда добавление нового языка не потребует редактирования программы. Для этих целей в java существует класс java.util.ResourceBundle . Он работает с парами ключ-значение, которые хранятся в специальных файлах ресурсов — текстовых файлах с расширением .properties . Вот как можно его использовать в нашей программе-приветствии:

Если запустить программу в приведенном виде, получим исключение MissingResourceException . О том, как исправить положение — ниже, пока же о том, что должен делать код.

Класс ResourceBundle абстрактный, поэтому получить его экземпляр можно исключительно с помощью статического метода getBundle . Последний имеет несколько перегруженных реализаций, в данном случае использован вариант, который принимает на вход только имя файла ресурсов.

Конструкция res.getString(«greetings») получает из файла ресурсов значение пары ключ-значение по известному ключу, в данном случае — greetings . Отсюда вывод — в различный файлах ресурсов ключ должен быть одинаковым.

Теперь, чтобы программа заработала, создадим файл ресурсов. В любом текстовом редакторе создайте новый файл и запишите туда следующее:

Сохраните файл под именем data.properties в папку с программой и запустите программу снова. Теперь программа отработает без исключений и выдаст на экран «Hello!». Создадим теперь текстовый файл data_ru.properties с содержанием

Если ваша локаль по умолчанию отличается от ru_RU , то и файл вам надо назвать по другому: data_ .pro perties. Т.е. в случае локали en_UK файл надо назвать data_en.properties, в случае fr_CA — data_fr.properties и т.д. Запустите программу снова. Будет выдано «Hello, World!», не так ли?

Дело в том, что java будет искать файл ресурсов от более частного к более общему. Если ресурс называется data, а локаль — ru_RU_UNIX , то поиск файла ресурсов будет вестись в следующем порядке:

Поэтому, чтобы избежать исключения MissingResourceException , подобные локализованные программы всегда надо снабжать файлом ресурсов по умолчанию, т.е. без указания языка и страны. В нашем случае это файл data.properties. Также понятно, что для локализации достаточно снабдить пользователя соответствующим файлом ресурсов, выбран же он будет автоматически. В случае больших программ целесообразно иметь несколько файлов с ресурсами. В одном хранить, скажем, данные пользовательского интерфейса, в другом — локализованные сообщения об ошибках и т.д.

При использовании этого способа локализации могут возникнуть проблемы с не-английским языком. Создайте файл data_ru_RU.properties, и запишите туда

При запуске программы место ожидаемого «Привет!» получим что-то вроде «. «, т.е. нечто абсолютно нечитаемое. Получается эта ерунда из-за проблем с кодировкой, а решается применением стандартной утилиты native2ascii. Переименуйте ваш файл data_ru_RU.properties например, в data.txt и запустите команду

native2ascii data.txt data_ru_RU.properties

На выходе получите файл ресурсов, в которых все не-латинские буквы будут заменены их шестнадцатеричными кодами. И вот теперь при запуске программы получим правильный результат — «Привет!».

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector