- •Лекция 9
- •Форматирование строк
- •Спецификатор формата
- •Категории типов преобразования
- •Форматирование даты/времени
- •Форматирование даты/времени
- •Ошибки форматирования
- •Форматирование сообщений
- •Указание типа и стиля
- •Типы и стили
- •Формат выбора
- •Формат выбора
- •Ресурсы
- •Поиск ресурсов
- •Ресурсы - файлы свойств
- •Создание файлов свойств
- •Ресурсы — class файлы
- •Загрузка ресурсов
- •Создание класса ресурсов
Формат выбора
Если переменная {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);
Последовательность попыток загрузки:
имя_пакета_трс_язык_трс_страна_трс_вариант
имя_пакета_трс_язык_трс_страна
имя_пакета_трс_язык
имя_пакета_рсу_язык_рсу_страна_рсу_вариант
имя_пакета_рсу_язык_рсу_страна
имя_пакета_рса_язык
имя_пакета
Найденные пакеты уровнем «ниже» становятся «родительскими»
Ресурсы - файлы свойств
Файл свойств — обычный текстовый файл, каждая строка которого содержит пару «ключ=значение»
Файл myresources.properties: hello=Hello, world!
ResourceBundle bundle = ResourceBundle.getBundle("myresource s", locale);
System.out.println(bundle.getString("
hello"));
Создание файлов свойств
С ASCII проблем нет
Не ASCII символы должны быть записаны в виде \uxxxx, где xxxx — код Unicode.
Пример myresources_ru.properties:
\u041f\u0440\u0438\u0432\u0435\u0442,
\u041c\u0438\u0440!
Для преобразования файла можно использовать утилиту native2ascii:
native2ascii [-encoding кодировка] <исходный файл> <конечный файл>
Ресурсы — class файлы
Для поддержки ресурсов, не являющихся строками необходимо определить класс (наследник от ResourceBundle)
Примеры названий:
MyProgramResources.java
MyProgramResources_en.java MyProgramResources_en_US.java MyProgramResources_ru_RU.java
Загрузка ресурсов
Загрузка класса ресурсов:
ResourceBundle bundle = ResourceBundle.getBundle("MyProgram Resources", locale);
Сначала производится поиск .class ресурсов, затем .properties
Создание класса ресурсов
public class MyRes_ru_RU extends ListResourceBundle
{
public Object[][] getContents() {return contents;} private static final Object[][] contents =
{
{"backgroundColor", Color.black}, {"defaultPaperSize", new double[]{210,297}},
...
}
}
Использование:
Color backgroundColor = (Color) bundle.getObject("backgroundColor");
double[] paperSize = (double[])bundle.getObject("defaultPaperSize");
