- •Лекция 9
- •Субъекты локализации
- •Различия в дате и времени
- •Различия в числах
- •Региональный стандарт
- •Региональный стандарт
- •Региональный стандарт
- •Региональный стандарт в Java
- •Создание объекта Locale
- •Создание объекта Locale
- •Формат вывода чисел
- •Форматирование числа
- •Форматирование денежных единиц
- •Преобразование строки в число
- •Класс NumberFormat
- •Денежные единицы
- •Денежные единицы
- •Дата и время
- •Форматирование даты и времени
- •Форматирование и анализ даты/времени
- •Календари
- •Calendar.get(field)
- •Calendar.set(field, value)
- •Calendar.add(field,delta)
- •Calendar.roll(field, delta)
- •Сравнение строк
- •Сравнение строк
- •Форматирование строк
- •Спецификатор формата
- •Категории типов преобразования
- •Форматирование даты/времени
- •Форматирование даты/времени
- •Ошибки форматирования
- •Форматирование сообщений
- •Указание типа и стиля
- •Типы и стили
- •Формат выбора
- •Формат выбора
- •Ресурсы
- •Поиск ресурсов
- •Ресурсы - файлы свойств
- •Создание файлов свойств
- •Ресурсы — class файлы
Форматирование даты/времени
Тип преобразования даты/времени — двухсимвольный. (Второй символ — GNU date и POSIX strftime)
H — час 00-23, k — час 0-23
M — минуты 00-59
S — секунды 00-59
L — миллисекунды 000-999
z — смещение GMT (RFC 822)
Z — часовой пояс
B — месяц (полное название)
b — месяц (аббревиатура)
A — день недели (полное название)
a — месяц (аббревиатура)
C — год (00-99)
Y — год (0000-9999)
d — день месяца (01-31)
e — день месяца (1-31)
Форматирование даты/времени
Пример форматирования с использованием индекса аргумента:
Calendar c = ...;
String s1 = String.format("Duke's Birthday:
%1$tm %1$te,%1$tY", c);
Ошибки форматирования
Исключения:
UnknownFormatConversionException или UnknownFormatFlagsException - если указан неизвестный спецификатор или флаг
IllegalFormatWidthException или IllegalFormatPrecisionException если указана неправильная длина или точность
IllegalFormatConversionException если аргумент метода format не может быть преобразован
Форматирование сообщений
Класс MessageFormat форматирует текст, содержащий фрагменты, представленные переменными.
String msg =
MessageFormat.format("On {2}, a {0} destroyed {1} houses and caused {3} of damage", 99, new
GregorianCalendar(1999, 0,
1).getTime(), 10.0E7);
Результат:
On 1/1/99 12:00 AM, a hurricane destroyed 99 houses and caused 100,000,000 of damage
Указание типа и стиля
String msg =
MessageFormat.format("On
{2,date,long}, a {0} destroyed {1} houses and caused
{3,number,currency} of damage", 99, new GregorianCalendar(1999, 0,
1).getTime(), 10.0E7); Результат:
On January 1,1999, a hurricane destroyed 99 houses and caused $100,000,000 of damage
Типы и стили
Типы: |
Стили (date и time) |
number |
short |
time |
medium |
date |
long |
choice |
Full |
|
Стили (number) |
|
integer |
|
currency |
|
percent |
Формат выбора
Если переменная {1} = 1, результат:
On January 1,1999, a hurricane destroyed 1 houses and...
Необходимо: 0 – no houses 1 – one house 2 – 2 houses
...
{1, choice, 0#no houses|1#one house|2#{1}houses}
Формат выбора
Можно указать нестрогую границу: {-̃∞<no houses|0<one house|2≤{1} houses}
String pattern = "On {2,date,long}, {0} destroyed " + "{1,choice,0#no houses|1#one house|2#{1} houses}" + "and caused {3,number,currency} of damage.";
String pattern = "{0} zerstörte am {2,date,long} " +
"{1,choise,0#kein Haus|1#ein Haus|2#{1} Häuser}" + "und richtete einen Schaden von" +
"{3,number,currency} an.";
Методу format передается один и тот же массив с данными
Ресурсы
Все локализованные данные (текст, картинки и пр.) находятся в пакетах ресурсов (Resource Bundle)
Каждый пакет размещается в файле (файл свойств или класс)
Файл именуется по принципу: имя_пакета_язык_страна
Поиск ресурсов
ResourceBundle currentResources = ResourceBundle.getBundle("mystrings", currentLocale);
Последовательность попыток загрузки:
имя_пакета_трс_язык_трс_страна_трс_вариант
имя_пакета_трс_язык_трс_страна
имя_пакета_трс_язык
имя_пакета_рсу_язык_рсу_страна_рсу_вариант
имя_пакета_рсу_язык_рсу_страна
имя_пакета_рса_язык
имя_пакета
Найденные пакеты уровнем «ниже» становятся «родительскими»