Интернализация Java - Краткое руководство
Интернализация
Интернализация или I18N относится к способности приложения обслуживать пользователей на нескольких и разных языках. В Java есть встроенная поддержка интернализации. Java также обеспечивает форматирование чисел, валют и соответствующую настройку даты и времени.
Интернационализация Java помогает заставить приложение Java обрабатывать различные языки, числовые форматы, валюты, форматирование времени в зависимости от региона.
Локализация
Локализация или L10N - это адаптируемость приложения, то есть то, как приложение адаптируется к определенному языку, форматам чисел, настройкам даты и времени и т. Д.
Приложение Java должно быть интернационализировано, чтобы иметь возможность локализовать себя.
Культурно-зависимая информация
Следующие информационные элементы часто различаются в зависимости от часовых поясов или культур.
Messages
Date
Time
Number
Currency
Measurements
Телефонные номера
Почтовые адреса
Метки графического интерфейса пользователя
Классы интернационализации
Java имеет набор встроенных классов, которые помогают в интернационализации приложения. Эти классы следующие:
Sr. No. | Класс и описание |
---|---|
1 | Locale Представляет язык вместе со страной / регионом. |
2 | ResourceBundle Содержит локализованный текст или объекты. |
3 | NumberFormat Используется для форматирования чисел / валют в соответствии с региональным стандартом. |
4 | DecimalFormat Используется для форматирования чисел в соответствии с индивидуальным форматом и локалью. |
5 | DateFormat Используйте для форматирования дат в соответствии с региональными настройками. |
6 | SimpleDateFormat Используется для форматирования дат в соответствии с индивидуальным форматом и локалью. |
Интернализация Java - Настройка среды
В этой главе мы обсудим различные аспекты создания благоприятной среды для Java.
Настройка локальной среды
Если вы все еще хотите настроить свою среду для языка программирования Java, то в этом разделе вы узнаете, как загрузить и установить Java на свой компьютер. Ниже приведены шаги по настройке среды.
Java SE бесплатно доступен по ссылке Загрузить Java . Вы можете скачать версию, соответствующую вашей операционной системе.
Следуйте инструкциям, чтобы загрузить Java и запустить .exeчтобы установить Java на свой компьютер. После того, как вы установили Java на свой компьютер, вам нужно будет установить переменные среды, чтобы они указывали на правильные каталоги установки -
Настройка пути для Windows
Предполагая, что вы установили Java в каталог c: \ Program Files \ java \ jdk -
Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».
Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».
Теперь измените переменную Path, чтобы она также содержала путь к исполняемому файлу Java. Например, если в настоящее время задан путь «C: \ WINDOWS \ SYSTEM32», измените путь на «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».
Настройка пути для Linux, UNIX, Solaris, FreeBSD
Переменная среды PATH должна указывать на место установки двоичных файлов Java. Обратитесь к документации вашей оболочки, если у вас возникли проблемы с этим.
Например, если вы используете bash в качестве оболочки, вы должны добавить следующую строку в конец вашего '.bashrc: export PATH = / path / to / java: $ PATH'
Популярные редакторы Java
Для написания программ на Java вам понадобится текстовый редактор. На рынке доступны даже более сложные IDE. Но пока вы можете рассмотреть одно из следующих:
Notepad - На компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.
Netbeans - Java IDE с открытым исходным кодом и бесплатно, которую можно загрузить с https://www.netbeans.org/index.html.
Eclipse - Java IDE, разработанная сообществом разработчиков ПО с открытым исходным кодом eclipse, которую можно загрузить с https://www.eclipse.org/.
Что следующее?
В следующей главе вы узнаете, как написать и запустить свою первую программу на Java, а также научить некоторым важным базовым синтаксисам Java, необходимым для разработки приложений.
Интернализация Java - класс локали
Объект Locale представляет определенный географический / политический / культурный регион. Любая операция, требующая для выполнения своей задачи языкового стандарта, называется операцией, зависящей от языкового стандарта, и использует языковой стандарт для управления информацией, относящейся к пользователю. Например, отображение числа зависит от языкового стандарта. Номер должен быть отформатирован в соответствии с обычаями и условностями страны, региона или культуры страны происхождения пользователя.
Локаль Содержание
Объект Locale содержит следующее:
Language- Код языка ISO 639 alpha-2 или alpha-3, или зарегистрированные языковые субтеги, содержащие до 8 буквенных букв. Код альфа-2 должен использоваться, если присутствуют коды альфа-2 и альфа-3. Поле языка не чувствительно к регистру, но языковой стандарт всегда переводится в нижний регистр.
Script- Код скрипта ISO 15924 alpha-4. Поле скрипта не чувствительно к регистру, но Locale всегда канонизирует к регистру заголовка.
Country (region)- Код страны по стандарту ISO 3166 alpha-2 или код зоны 3 по стандарту UN M.49. В поле страны регистр не учитывается, но в Locale всегда используется верхний регистр.
Variant- Любое произвольное значение, используемое для обозначения варианта языкового стандарта. Если имеется два или более значений варианта, каждое из которых указывает свою собственную семантику, эти значения следует упорядочить по важности, причем наиболее важные сначала должны быть разделены подчеркиванием ('_'). Поле варианта чувствительно к регистру.
Extensions- Карта от односимвольных ключей до строковых значений с указанием расширений, кроме идентификации языка. Расширения в Locale реализуют семантику и синтаксис вложенных тегов расширения BCP 47 и вложенных тегов частного использования. В расширениях не учитывается регистр, но Locale переводит все ключи и значения расширения в нижний регистр.
Интернализация Java - пример - сведения о локали
В этом примере мы получим локаль по умолчанию и распечатаем ее детали. Затем создайте языковой стандарт для "fr" и распечатайте его детали.
I18NTester.java
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale locale =Locale.getDefault();
System.out.println("Default Locale Properties:\n");
System.out.println(locale.getDisplayCountry());
System.out.println(locale.getDisplayLanguage());
System.out.println(locale.getDisplayName());
System.out.println(locale.getISO3Country());
System.out.println(locale.getISO3Language());
System.out.println(locale.getLanguage());
System.out.println(locale.getCountry());
Locale frenchLocale = new Locale("fr","fr");
System.out.println("\nfr Locale Properties:\n");
System.out.println(frenchLocale.getDisplayCountry());
System.out.println(frenchLocale.getDisplayLanguage());
System.out.println(frenchLocale.getDisplayName());
System.out.println(frenchLocale.getISO3Country());
System.out.println(frenchLocale.getISO3Language());
System.out.println(frenchLocale.getLanguage());
System.out.println(frenchLocale.getCountry());
}
}
Вывод
Он напечатает следующий результат.
Default Locale Properties:
United States
English
English (United States)
USA
eng
en
US
fr Locale Properties:
France
French
French (France)
FRA
fra
fr
FR
Интернализация Java - пример - язык отображения
В этом примере мы получим язык отображения для каждой локали, переданной в качестве аргумента.
I18NTester.java
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale defaultLocale = Locale.getDefault();
Locale enLocale = new Locale("en", "US");
Locale frLocale = new Locale("fr", "FR");
Locale esLocale = new Locale("es", "ES");
System.out.println(defaultLocale.getDisplayLanguage(enLocale));
System.out.println(defaultLocale.getDisplayLanguage(frLocale));
System.out.println(defaultLocale.getDisplayLanguage(esLocale));
}
}
Вывод
Он напечатает следующий результат.
English
anglais
inglés
Интернализация Java - класс ResourceBundle
Класс ResourceBundle используется для хранения текста и объектов, которые зависят от языкового стандарта. Обычно мы используем файлы свойств для хранения текста, специфичного для локали, а затем представляем их с помощью объекта ResourceBundle. Ниже приведены шаги по использованию файла свойств для конкретной локали в приложении на основе Java.
Шаг 1. Создайте файлы свойств.
Предположим, нам нужен файл свойств для английского языка. Затем создайте файл свойств с именем XXX_en_US.properties, где XXX - это имя файла, а en_US - языковой стандарт для английского языка (США).
Messages_ru_US.properties
message=Welcome to TutorialsPoint.COM!
Теперь создадим файл свойств для французского языка. Затем создайте файл свойств с именем XXX_fr_FR.properties, где XXX - это имя файла, а fr_FR - языковой стандарт для французского языка (Франция).
Messages_fr_FR.properties
message=Bienvenue sur TutorialsPoint.COM!
Здесь вы можете понять, что ключ тот же, но значение зависит от локали в обоих файлах свойств.
Шаг 2. Создайте объект ResourceBundle
Создайте объект ResourceBundle с именем файла свойств и локалью, используя следующий синтаксис.
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
Шаг 3: Получите значение из объекта ResourceBundle.
Получите значение из объекта ResourceBundle, передав ключ.
String value = bundle.getString("message");
пример
В следующем примере показано использование объектов ResourceBundle для отображения значений языкового стандарта из файлов свойств.
IOTester.java
import java.util.Locale;
import java.util.ResourceBundle;
public class I18NTester {
public static void main(String[] args) {
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
System.out.println("Message in "+Locale.US +": "+bundle.getString("message"));
bundle = ResourceBundle.getBundle("Messages", Locale.FRANCE);
System.out.println("Message in "+Locale.FRANCE +": "+bundle.getString("message"));
}
}
Вывод
Он напечатает следующий результат.
Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!
Примечания к соглашениям об именах
Ниже приведены соглашения об именах для файла свойств.
Для файла свойств, отображаемого на локаль по умолчанию, префикс не является обязательным. message_en_US.properties эквивалентно message.properties.
Для файла свойств, отображаемого на локаль, префикс можно добавить двумя способами. message_fr.properties эквивалентен message_fr_FR.properties.
Интернализация Java - класс NumberFormat
Класс java.text.NumberFormat используется для форматирования чисел и валют в соответствии с определенной локалью. Числовые форматы различаются от страны к стране. Например, в Дании дроби числа отделяются от целой части запятой, тогда как в Англии в качестве разделителя используется точка.
Пример - форматирование чисел
В этом примере мы форматируем числа на основе локали США и датской локали.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(daLocale);
System.out.println(numberFormat.format(100.76));
numberFormat = NumberFormat.getInstance(enLocale);
System.out.println(numberFormat.format(100.76));
}
}
Вывод
Он напечатает следующий результат.
100,76
100.76
Интернализация Java - Форматирование валют
В этом примере мы форматируем валюты на основе локали США и датской локали.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(daLocale);
System.out.println(numberFormat.format(100.76));
numberFormat = NumberFormat.getCurrencyInstance(enLocale);
System.out.println(numberFormat.format(100.76));
}
}
Вывод
Он напечатает следующий результат.
kr 100,76
$100.76
Интернализация Java - форматирование в процентах
В этом примере мы форматируем числа в процентном формате.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getPercentInstance(enLocale);
System.out.println(numberFormat.format(0.76));
}
}
Вывод
Он напечатает следующий результат.
76%
Интернализация Java - установка минимальной / максимальной точности
В этом примере мы устанавливаем минимальные и максимальные цифры как для целой, так и для дробной части числа.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
numberFormat.setMinimumIntegerDigits(2);
numberFormat.setMaximumIntegerDigits(3);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(3);
System.out.println(numberFormat.format(12234.763443));
}
}
Вывод
Он напечатает следующий результат.
234.763
Интернализация Java - установка режима округления
В этом примере мы демонстрируем режим округления.
IOTester.java
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
numberFormat.setMinimumFractionDigits(0);
numberFormat.setMaximumFractionDigits(0);
System.out.println(numberFormat.format(99.50));
numberFormat.setRoundingMode(RoundingMode.HALF_DOWN);
System.out.println(numberFormat.format(99.50));
}
}
Вывод
Он напечатает следующий результат.
100
99
Интернализация Java - анализ чисел
В этом примере мы демонстрируем синтаксический анализ числа, присутствующего в разных языковых стандартах.
IOTester.java
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(daLocale);
System.out.println(numberFormat.parse("100,76"));
numberFormat = NumberFormat.getInstance(enLocale);
System.out.println(numberFormat.parse("100,76"));
}
}
Вывод
Он напечатает следующий результат.
100.76
10076
Интернализация Java - класс DecimalFormat
Класс java.text.DecimalFormat используется для форматирования чисел в соответствии с индивидуальным форматом и в соответствии с локалью.
Пример - форматирование чисел
В этом примере мы форматируем числа на основе заданного шаблона.
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
String pattern = "####,####.##";
double number = 123456789.123;
DecimalFormat numberFormat = new DecimalFormat(pattern);
System.out.println(number);
System.out.println(numberFormat.format(number));
}
}
Вывод
Он напечатает следующий результат.
1.23456789123E8
1,2345,6789.12
Интернализация Java - шаблоны формата
Далее следует использование символов в шаблонах форматирования.
Sr. No. | Класс и описание |
---|---|
1 | 0 Чтобы отобразить 0, если присутствует меньше цифр. |
2 | # Для отображения цифры без начальных нулей. |
3 | . Десятичный разделитель. |
4 | , Разделитель группировки. |
5 | E Разделитель мантиссы и экспоненты для экспоненциальных форматов. |
6 | ; Разделитель формата. |
7 | - Префикс отрицательного числа. |
8 | % Показывает число в процентах после умножения на 100. |
9 | ? Показывает число в миллиметрах после умножения на 1000. |
10 | X Чтобы отметить символ как префикс / суффикс номера. |
11 | ' Чтобы выделить кавычки вокруг специальных символов. |
В этом примере мы форматируем числа на основе разных шаблонов.
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
String pattern = "###.###";
double number = 123456789.123;
DecimalFormat numberFormat = new DecimalFormat(pattern);
System.out.println(number);
//pattern ###.###
System.out.println(numberFormat.format(number));
//pattern ###.#
numberFormat.applyPattern("###.#");
System.out.println(numberFormat.format(number));
//pattern ###,###.##
numberFormat.applyPattern("###,###.##");
System.out.println(numberFormat.format(number));
number = 9.34;
//pattern 000.###
numberFormat.applyPattern("000.##");
System.out.println(numberFormat.format(number));
}
}
Вывод
Он напечатает следующий результат.
1.23456789123E8
1,2345,6789.12
Интернализация Java - DecimalFormat, специфичный для локали
По умолчанию объект DecimalFormat использует локаль JVM. Мы можем изменить языковой стандарт по умолчанию при создании объекта DecimalFormat с помощью класса NumberFormat. В приведенном ниже примере мы будем использовать один и тот же шаблон для двух разных локалей, и вы можете заметить разницу в выводе.
IOTester.java
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
String pattern = "###.##";
double number = 123.45;
Locale enlocale = new Locale("en", "US");
Locale dalocale = new Locale("da", "DK");
DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(enlocale);
decimalFormat.applyPattern(pattern);
System.out.println(decimalFormat.format(number));
decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(dalocale);
decimalFormat.applyPattern(pattern);
System.out.println(decimalFormat.format(number));
}
}
Вывод
Он напечатает следующий результат.
123.45
123,45
Интернализация Java - класс DecimalFormatSymbols
Используя класс DecimalFormatSymbols, можно изменить символы разделителя по умолчанию, символы разделителя групп и т. Д. Следующий пример иллюстрирует то же самое.
IOTester.java
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class I18NTester {
public static void main(String[] args) {
String pattern = "#,###.###";
double number = 126473.4567;
DecimalFormat decimalFormat = new DecimalFormat(pattern);
System.out.println(decimalFormat.format(number));
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(';');
decimalFormatSymbols.setGroupingSeparator(':');
decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);
System.out.println(decimalFormat.format(number));
}
}
Вывод
Он напечатает следующий результат.
126,473.457
126:473;457
Интернализация Java - Группировка цифр
Используя метод setGroupingSize () DecimalFormat, можно изменить группировку чисел по умолчанию. Следующий пример иллюстрирует то же самое.
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
double number = 121223232473.4567;
DecimalFormat decimalFormat = new DecimalFormat();
System.out.println(number);
System.out.println(decimalFormat.format(number));
decimalFormat.setGroupingSize(4);
System.out.println(decimalFormat.format(number));
}
}
Вывод
Он напечатает следующий результат.
1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457
Интернализация Java - класс DateFormat
Класс java.text.DateFormat форматирует даты в соответствии с локалью. Поскольку разные страны используют разные форматы для отображения дат. Этот класс чрезвычайно полезен при работе с датами при интернализации приложения. В следующем примере показано, как создать и использовать класс DateFormat.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale locale = new Locale("da","DK");
DateFormat dateFormat = DateFormat.getDateInstance();
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
System.out.println(dateFormat.format(new Date()));
}
}
Вывод
Он напечатает следующий результат.
Nov 29, 2017
29-11-2017
Интернализация Java - даты форматирования
Класс DateFormat предоставляет различные форматы для форматирования даты. Ниже приводится список некоторых форматов.
DateFormat.DEFAULT
DateFormat.SHORT
DateFormat.MEDIUM
DateFormat.LONG
DateFormat.FULL
В следующем примере мы покажем, как использовать разные форматы.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
Вывод
Он напечатает следующий результат.
Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017
Интернализация Java - время форматирования
Класс DateFormat предоставляет различные форматы для форматирования времени. Необходимо использовать метод DateFormat.getTimeInstance (). См. Пример ниже.
В следующем примере мы покажем, как использовать разные форматы для форматирования времени.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
Вывод
Он напечатает следующий результат.
4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST
Интернализация Java - форматирование даты и времени
Класс DateFormat предоставляет различные форматы для одновременного форматирования даты и времени. Необходимо использовать метод DateFormat.getDateTimeInstance (). См. Пример ниже.
В следующем примере мы покажем, как использовать разные форматы для форматирования даты и времени.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
Вывод
Он напечатает следующий результат.
Nov 29, 2017 4:16:13 PM
11/29/17 4:16 PM
Nov 29, 2017 4:16:13 PM
November 29, 2017 4:16:13 PM IST
Wednesday, November 29, 2017 4:16:13 PM IST
Интернализация Java - класс SimpleDateFormat
Класс java.text.SimpleDateFormat форматирует даты в соответствии с заданным шаблоном. Он также используется для анализа дат из строки, где строка содержит дату в указанном формате. См. Следующий пример использования класса SimpleDateFormat.
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String pattern = "dd-MM-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(date);
System.out.println(simpleDateFormat.format(date));
String dateText = "29-11-2017";
date = simpleDateFormat.parse(dateText);
System.out.println(simpleDateFormat.format(date));
}
}
Вывод
Он напечатает следующий результат.
Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017
Интернализация Java - SimpleDateFormat, зависящий от локали
Локаль можно использовать для создания форматирования, специфичного для локали, поверх шаблона в классе SimpleDateFormat. См. Следующий пример использования класса SimpleDateFormat для конкретной локали.
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Locale locale = new Locale("da", "DK");
String pattern = "EEEEE MMMMM yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(date);
System.out.println(simpleDateFormat.format(date));
simpleDateFormat = new SimpleDateFormat(pattern,locale);
System.out.println(simpleDateFormat.format(date));
}
}
Вывод
Он напечатает следующий результат.
Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017
Интернализация Java - класс DecimalFormatSymbols
Используя класс DecimalFormatSymbols, можно изменить символы разделителя по умолчанию, символы разделителя групп и т. Д. Следующий пример иллюстрирует то же самое.
IOTester.java
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class I18NTester {
public static void main(String[] args) {
String pattern = "#,###.###";
double number = 126473.4567;
DecimalFormat decimalFormat = new DecimalFormat(pattern);
System.out.println(decimalFormat.format(number));
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(';');
decimalFormatSymbols.setGroupingSeparator(':');
decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);
System.out.println(decimalFormat.format(number));
}
}
Вывод
Он напечатает следующий результат.
126,473.457
126:473;457
Интернализация Java - шаблоны формата даты
Далее следует использование символов в шаблонах форматирования даты.
Sr. No. | Класс и описание |
---|---|
1 | G Чтобы отобразить Era. |
2 | y Для отображения года. Допустимые значения yy, yyyy. |
3 | M Для отображения месяца. Допустимые значения MM, MMM или MMMMM. |
4 | d Для отображения дня месяца. Допустимые значения d, dd. |
5 | h Для отображения часа дня (1-12 AM / PM). Допустимое значение hh. |
6 | H Для отображения часа дня (0–23). Действительное значение HH. |
7 | m Для отображения минут часа (0-59). Действительное значение мм. |
8 | s Для отображения секунды минуты (0-59). Допустимое значение ss. |
9 | S Для отображения миллисекунд минут (0-999). Действительное значение SSS. |
10 | E Для отображения дня недели (например, понедельник, вторник и т. Д.) |
11 | D Для отображения дня в году (1-366). |
12 | F Для отображения дня недели в месяце (например, 1-й четверг декабря). |
13 | w Для отображения недели в году (1-53). |
14 | W Для отображения недели в месяце (0-5) |
15 | a Для отображения AM / PM |
16 | k Для отображения часа в день (1-24). |
17 | K Для отображения часов в день AM / PM (0-11). |
18 | z Для отображения часового пояса. |
В этом примере мы форматируем даты на основе разных шаблонов.
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String pattern = "dd-MM-yy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(simpleDateFormat.format(date));
pattern = "MM-dd-yyyy";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
pattern = "yyyy-MM-dd HH:mm:ss";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
}
}
Вывод
Он напечатает следующий результат.
29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530
Интернализация Java - UTC
UTC означает всемирное координированное время. Это стандарт времени и широко используется во всем мире. Все часовые пояса вычисляются относительно UTC в качестве смещения. Например, время в Копенгагене, Дания - UTC + 1, что означает время UTC плюс один час. Он не зависит от дневного света и должен использоваться для хранения даты и времени в базах данных.
Преобразование часовых поясов
В следующем примере будет продемонстрировано преобразование различных часовых поясов. Будем печатать час дня и время в миллисекундах. Первый будет отличаться, а второй останется прежним.
IOTester.java
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Calendar date = new GregorianCalendar();
date.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
date.set(Calendar.HOUR_OF_DAY, 12);
System.out.println("UTC: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("UTC: " + date.getTimeInMillis());
date.setTimeZone(TimeZone.getTimeZone("Europe/Copenhagen"));
System.out.println("CPH: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("CPH: " + date.getTimeInMillis());
date.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println("NYC: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("NYC: " + date.getTimeInMillis());
}
}
Вывод
Он напечатает следующий результат.
UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540
Доступные часовые пояса
В следующем примере будут показаны часовые пояса, доступные в системе.
IOTester.java
import java.text.ParseException;
import java.util.TimeZone;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String[] availableIDs = TimeZone.getAvailableIDs();
for(String id : availableIDs) {
System.out.println("Timezone = " + id);
}
}
}
Вывод
Он напечатает следующий результат.
Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST
Интернализация Java - преобразование Unicode из / в строку
В Java текст внутри хранится в формате Unicode. Если ввод / вывод в другом формате, требуется преобразование.
Преобразование
В следующем примере будет продемонстрировано преобразование строки Unicode в байт [] UTF8 и байт [] UTF8 в байт [] Unicode.
IOTester.java
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.ParseException;
public class I18NTester {
public static void main(String[] args) throws ParseException, UnsupportedEncodingException {
String unicodeString = "\u00C6\u00D8\u00C5" ;
//convert Unicode to UTF8 format
byte[] utf8Bytes = unicodeString.getBytes(Charset.forName("UTF-8"));
printBytes(utf8Bytes, "UTF 8 Bytes");
//convert UTF8 format to Unicode
String converted = new String(utf8Bytes, "UTF8");
byte[] unicodeBytes = converted.getBytes();
printBytes(unicodeBytes, "Unicode Bytes");
}
public static void printBytes(byte[] array, String name) {
for (int k = 0; k < array.length; k++) {
System.out.println(name + "[" + k + "] = " + array[k]);
}
}
}
Вывод
Он напечатает следующий результат.
UTF 8 Bytes[0] = -61
UTF 8 Bytes[1] = -122
UTF 8 Bytes[2] = -61
UTF 8 Bytes[3] = -104
UTF 8 Bytes[4] = -61
UTF 8 Bytes[5] = -123
Unicode Bytes[0] = -58
Unicode Bytes[1] = -40
Unicode Bytes[2] = -59
Интернализация Java - преобразование Unicode из / в Reader / Writer
Классы Reader и Writer - это символьно-ориентированные классы потоков. Их можно использовать для чтения и преобразования символов Юникода.
Преобразование
В следующем примере будет продемонстрировано преобразование строки Unicode в байт [] UTF8 и байт [] UTF8 в байт [] Unicode с использованием классов Reader и Writer.
IOTester.java
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.ParseException;
public class I18NTester {
public static void main(String[] args) throws ParseException, IOException {
String input = "This is a sample text" ;
InputStream inputStream = new ByteArrayInputStream(input.getBytes());
//get the UTF-8 data
Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
//convert UTF-8 to Unicode
int data = reader.read();
while(data != -1){
char theChar = (char) data;
System.out.print(theChar);
data = reader.read();
}
reader.close();
System.out.println();
//Convert Unicode to UTF-8 Bytes
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
writer.write(input);
writer.close();
String out = new String(outputStream.toByteArray());
System.out.println(out);
}
}
Вывод
Он напечатает следующий результат.
This is a sample text
This is a sample text
Распечатать