Учебники

Интернализация Java — Краткое руководство

Интернализация Java — Обзор

Интернализация или I18N относится к возможностям Applicatyion, чтобы иметь возможность сервера пользователей на нескольких и разных языках. Java имеет встроенную поддержку интернализации. Java также обеспечивает форматирование чисел, валют и корректировку даты и времени соответственно.

Интернационализация Java помогает настроить Java-приложение для работы с разными языками, форматами чисел, валютами, региональным форматированием времени.

локализация

Локализация или L10N — это адаптивность приложения, которая позволяет адаптировать приложение к определенному языку, форматам чисел, настройкам даты и времени и т. Д.

Java-приложение должно быть интернационализировано, чтобы иметь возможность локализовать себя.

Культурно-зависимая информация

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

  • Сообщения

  • Дата

  • Время

  • Число

  • валюта

  • измерения

  • Телефонные номера

  • Почтовые адреса

  • GUI метки

Сообщения

Дата

Время

Число

валюта

измерения

Телефонные номера

Почтовые адреса

GUI метки

Классы интернационализации

Java имеет набор встроенных классов, которые помогают в интернационализации приложения. Эти классы следующие:

Sr.No. Класс и описание
1

место действия

Представляет язык вместе со страной / регионом.

2

ResourceBundle

Содержит локализованный текст или объекты.

3

NumberFormat

Используйте для форматирования чисел / валют согласно локали.

4

DecimalFormat

Используйте для форматирования чисел в соответствии с индивидуальным форматом и согласно локали.

5

Формат даты

Используйте для форматирования даты в соответствии с локалью.

6

SimpleDateFormat

Используется для форматирования дат в соответствии с индивидуальным форматом и в соответствии с локалью.

место действия

Представляет язык вместе со страной / регионом.

ResourceBundle

Содержит локализованный текст или объекты.

NumberFormat

Используйте для форматирования чисел / валют согласно локали.

DecimalFormat

Используйте для форматирования чисел в соответствии с индивидуальным форматом и согласно локали.

Формат даты

Используйте для форматирования даты в соответствии с локалью.

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».

Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».

Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».

Теперь измените переменную 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. Но сейчас вы можете рассмотреть один из следующих —

  • Блокнот — на компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.

  • Netbeans — Java IDE с открытым исходным кодом, который можно загрузить по адресу https://www.netbeans.org/index.html .

  • Eclipse — Java IDE, разработанная сообществом open source eclipse и может быть загружена с https://www.eclipse.org/ .

Блокнот — на компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.

Netbeans — Java IDE с открытым исходным кодом, который можно загрузить по адресу https://www.netbeans.org/index.html .

Eclipse — Java IDE, разработанная сообществом open source eclipse и может быть загружена с https://www.eclipse.org/ .

Что дальше?

В следующей главе вы узнаете, как написать и запустить свою первую программу на Java, а также некоторые важные базовые синтаксисы на Java, необходимые для разработки приложений.

Интернализация Java — класс локали

Объект Locale представляет определенный географический / политический / культурный регион. Любая операция, требующая, чтобы языковой стандарт выполнял свою задачу, называется чувствительной к языку операцией и использует языковой стандарт для управления информацией, относящейся к пользователю. Например, отображение числа является чувствительной к локали операцией. Номер должен быть отформатирован в соответствии с обычаями и соглашениями страны, региона или культуры пользователя.

Содержание локали

Объект Locale содержит следующее:

  • Язык — ISO 639 альфа-2 или альфа-3 код языка, или зарегистрированные языковые субтеги до 8 букв алфавита. Код альфа-2 должен использоваться, если присутствует код альфа-2 и альфа-3. Поле языка нечувствительно к регистру, но Locale всегда канонизируется строчными буквами.

  • Скрипт — ISO 15924 код альфа-4 скрипта. Поле сценария нечувствительно к регистру, но Locale всегда канонизируется регистру заголовка.

  • Страна (регион) — код страны ISO 3166 alpha-2 или код зоны ООН M.49 цифра-3. Поле страны нечувствительно к регистру, но Locale всегда канонизируется заглавными буквами.

  • Вариант — любое произвольное значение, используемое для обозначения варианта локали. Там, где есть два или более варианта значения, каждое из которых указывает свою семантику, эти значения должны быть упорядочены по важности, причем наиболее важными являются первые, разделенные подчеркиванием (‘_’). Вариант поля чувствителен к регистру.

  • Расширения — Карта от односимвольных ключей до строковых значений, указывающая расширения помимо идентификации языка. Расширения в Locale реализуют семантику и синтаксис вложенных тегов расширения BCP 47 и вложенных тегов частного использования. Расширения нечувствительны к регистру, но Locale канонизирует все ключи расширения и значения в нижний регистр.

Язык — ISO 639 альфа-2 или альфа-3 код языка, или зарегистрированные языковые субтеги до 8 букв алфавита. Код альфа-2 должен использоваться, если присутствует код альфа-2 и альфа-3. Поле языка нечувствительно к регистру, но Locale всегда канонизируется строчными буквами.

Скрипт — ISO 15924 код альфа-4 скрипта. Поле сценария нечувствительно к регистру, но Locale всегда канонизируется регистру заголовка.

Страна (регион) — код страны ISO 3166 alpha-2 или код зоны ООН M.49 цифра-3. Поле страны нечувствительно к регистру, но Locale всегда канонизируется заглавными буквами.

Вариант — любое произвольное значение, используемое для обозначения варианта локали. Там, где есть два или более варианта значения, каждое из которых указывает свою семантику, эти значения должны быть упорядочены по важности, причем наиболее важными являются первые, разделенные подчеркиванием (‘_’). Вариант поля чувствителен к регистру.

Расширения — Карта от односимвольных ключей до строковых значений, указывающая расширения помимо идентификации языка. Расширения в 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());  
   }
}

Выход

Будет напечатан следующий результат.

 Свойства локали по умолчанию:

 Соединенные Штаты
 английский
 Английский Соединенные Штаты)
 Соединенные Штаты Америки
 анг
 ан
 НАС

 Свойства локали:

 Франция
 Французский
 Французский (франция)
 FRA
 Фра
 фр
 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));
   }
}

Выход

Будет напечатан следующий результат.

 английский
 Английский рожок
 inglés

Интернализация Java — класс ResourceBundle

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

Шаг 1: Создайте файлы свойств.

Предположим, нам нужен файл свойств для английской локали. Затем создайте имя файла свойств XXX_en_US.properties, где XXX — это имя файла, а en_US — языковой стандарт для английского языка (США).

Messages_en_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"));
   }
}

Выход

Будет напечатан следующий результат.

 Сообщение в en_US: Добро пожаловать в TutorialsPoint.COM!
 Сообщение в fr_FR: Bienvenue sur TutorialsPoint.COM!

Примечания для соглашений об именах

Ниже приведены соглашения об именах для файла свойств.

  • Для файла свойств, сопоставленного с локалью по умолчанию, префикс не является обязательным. message_en_US.properties эквивалентно message.properties.

  • Для файла свойств, сопоставленного с локалью, префикс можно прикрепить двумя способами. message_fr.properties эквивалентно message_fr_FR.properties.

Для файла свойств, сопоставленного с локалью по умолчанию, префикс не является обязательным. 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));
   }
}

Выход

Будет напечатан следующий результат.

 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

Е

Мантисса и Экспонент разделитель для экспоненциальных форматов.

6

;

Разделитель формата.

7

Префикс отрицательного числа.

8

%

Показывает число в процентах после умножения на 100.

9

?

Показывает число в милле после умножения на 1000.

10

Икс

Чтобы отметить символ как префикс номера / суффикс.

11

Чтобы отметить цитату вокруг специальных символов.

0

Для отображения 0, если меньше цифр.

#

Для отображения цифры, пропускающей ведущие нули.

,

Десятичный разделитель

,

Группировка разделителя.

Е

Мантисса и Экспонент разделитель для экспоненциальных форматов.

;

Разделитель формата.

Префикс отрицательного числа.

%

Показывает число в процентах после умножения на 100.

?

Показывает число в милле после умножения на 1000.

Икс

Чтобы отметить символ как префикс номера / суффикс.

Чтобы отметить цитату вокруг специальных символов.

В этом примере мы форматируем числа на основе разных шаблонов.

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 использует локаль 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()));
   }
}

Выход

Будет напечатан следующий результат.

 29 ноября 2017 г.
 29-11-2017

Интернализация Java — форматирование дат

Класс DateFormat предоставляет различные форматы для форматирования даты. Ниже приведен список некоторых форматов.

  • DateFormat.DEFAULT

  • DateFormat.SHORT

  • DateFormat.MEDIUM

  • DateFormat.LONG

  • DateFormat.FULL

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()));
  
  
   }
}

Выход

Будет напечатан следующий результат.

 29 ноября 2017 г.
 11/29/17
 29 ноября 2017 г.
 29 ноября 2017 г.
 Среда, 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
 16:11
 4:11:21
 4:11:21 IST
 4:11:21 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()));
  

   }
}

Выход

Будет напечатан следующий результат.

 29 ноября 2017 г. 16:16:13
 29.11.17 16:16
 29 ноября 2017 г. 16:16:13
 29 ноября 2017 г. 16:16:13 IST
 Среда, 29 ноября 2017 г. 16:16:13 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));
   }
}

Выход

Будет напечатан следующий результат.

 Ср 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));
   }
}

Выход

Будет напечатан следующий результат.

 Ср 29 Ноября 17:48:14 IST 2017
 Среда ноябрь 2017
 онсдаг ноябрь 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

г

Для отображения Эры.

2

Y

Для отображения года. Допустимые значения yy, yyyy.

3

M

Для отображения Месяца. Допустимые значения MM, MMM или MMMMM.

4

d

Для отображения дня месяца. Допустимые значения d, dd.

5

час

Для отображения часа дня (1-12 AM / PM). Допустимое значение чч.

6

ЧАС

Для отображения часа дня (0-23). Допустимое значение ЧЧ.

7

м

Для отображения минуты часа (0-59). Допустимое значение мм.

8

s

Для отображения секунды минуты (0-59). Допустимое значение сс.

9

S

Для отображения миллисекунд минуты (0-999). Допустимое значение SSS.

10

Е

Для отображения дня в неделе (например, понедельник, вторник и т. Д.)

11

D

Для отображения дня в году (1-366).

12

F

Для отображения дня недели в месяце (например, 1-й четверг декабря).

13

вес

Для отображения недели в году (1-53).

14

W

Для отображения недели в месяце (0-5)

15

Для отображения AM / PM

16

К

Отображать Час в день (1-24).

17

К

Для отображения часа в дне AM / PM (0-11).

18

Z

Для отображения часового пояса.

г

Для отображения Эры.

Y

Для отображения года. Допустимые значения yy, yyyy.

M

Для отображения Месяца. Допустимые значения MM, MMM или MMMMM.

d

Для отображения дня месяца. Допустимые значения d, dd.

час

Для отображения часа дня (1-12 AM / PM). Допустимое значение чч.

ЧАС

Для отображения часа дня (0-23). Допустимое значение ЧЧ.

м

Для отображения минуты часа (0-59). Допустимое значение мм.

s

Для отображения секунды минуты (0-59). Допустимое значение сс.

S

Для отображения миллисекунд минуты (0-999). Допустимое значение SSS.

Е

Для отображения дня в неделе (например, понедельник, вторник и т. Д.)

D

Для отображения дня в году (1-366).

F

Для отображения дня недели в месяце (например, 1-й четверг декабря).

вес

Для отображения недели в году (1-53).

W

Для отображения недели в месяце (0-5)

Для отображения AM / PM

К

Отображать Час в день (1-24).

К

Для отображения часа в дне AM / PM (0-11).

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
 Среда, ноябрь 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
 Нью-Йорк: 7
 Нью-Йорк: 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);
      }
   }
}

Выход

Будет напечатан следующий результат.

 Часовой пояс = Африка / Абиджан
 Часовой пояс = Африка / Аккра
 ...
 Часовой пояс = 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 байт [0] = -61
 UTF 8 байт [1] = -122
 UTF 8 байт [2] = -61
 UTF 8 байт [3] = -104
 UTF 8 байт [4] = -61
 UTF 8 байт [5] = -123
 Unicode Bytes [0] = -58
 Unicode Bytes [1] = -40
 Unicode Bytes [2] = -59

Интернализация Java — преобразование Unicode из / в Reader / Writer

Классы Reader и Writer являются символьно-ориентированными потоковыми классами. Их можно использовать для чтения и преобразования символов Юникода.

преобразование

В следующем примере будет показано преобразование строки Unicode в байты UTF8 [] и byte [] 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);
   }  
}

Выход

Будет напечатан следующий результат.