Платформа J2Me - Страница 69
Конструктор No-arg.
*/
public I18NDemoResources_ru_RU()
super();
}
public Object [][] getContents()
}
return contents;
}
// Необходим статический инициализатор для инициализации
// переменной, которая не может быть инициализирована
// в массиве содержимого. Например, мы не можем выделить
// что-либо в массиве содержимого для создания изображения и
// выполнить требуемую обработку исключений.
static
{
try
{
applcon = Image.createlmage("i!8n-ru_RU.png");
}
catch (lOExce'ption ioe)
{
System.out.print In(ioe.getMessage());
ioe.printStackTrace();
}
}
}
Если вы все еще не убеждены, взгляните на листинг 9.13, который показывает ресурсы того же самого приложения, локализованные на японский язык. Класс I18NdemoResources_ja JP был создан с помощью того же текстового редактора, основанного на ASCII. Японские символы не могут быть введены в традиционном текстовом редакторе без поддержки IME. И, если вы используете IME, вы должны убедиться, что используете уникод для записи строковых литералов в файл. В противном случае вашему приложению придется выполнять преобразование посимвольной кодировки.
Листинг 9.13. Последовательности переключения уникода работают со всеми элементами всех письменных языков мира, включая восгочноазиатские языки, такие, как японский
import javax.microedition.Icdui.Image;
import Java.io.lOException;
/**
Данный класс определяет локализованные ресурсы для приложения I18NDemo3.
Вы извлекаете ресурс, вызывая метод getObject() в классе ResourceBundle.
*/
public class I18NDemoResources_ja_JP
extends ListResourceBundle
{
// Содержит один из локализованных ресурсов. Нам необходимо
// инициализировать эту переменную в статическом инициализаторе
// данного класса.
private static Image applcon;
private Object [][] contents =
{
// "Привет, мир"
{"title", "u24f64u3055u3093, u3053u3093u306bu3061u306f"),
// "Мой третий MID-лет".
("greeting", "u79clu306e 3 u3063u3081u306e MIDlet"},
// "Кнопка нажата".
{"alert_title")
"u30dcu30bfu30f3u304cu62bcu3055u308cu307eu3057u305f"},
// "Кнопка была нажата".
"alert_text",
"u30dcu30bfu30f3u304cu62bcu3055u308cu3C7eu3057u305f!"}
// Пункт меню «Выход», {"exit", "u51fa53e3"},
// Экранная клавиша «Меню».
("menu", "u30elu30cbu30e6u30fc"),
// Пункт меню «Отмена».
("cancel", "u3Cadu30e4u30f3u30bbu30eb"),
// Пункт меню «Стоп». {"stop", "u505cu6b62"),
// Пункт меню «ОК». ("ok", "OK"},
// Экранная клавиша «Предупреждение», {"alert", "Alert"),
// Пункт меню "Скажи привет", ("sayhi","u30cfu30a4"},
// Пункт меню «Экран».
{"screen", "u30b9u30afu30eau30f3"),
// Пункт меню «Предмет», {"item", "u9805u76ee"),
// Пункт меню «Помощь».
("help", "u308d"},
// Значок приложения.
{"app_icon", applcon)
/**
Конструктор No-arg.
*/
public I18NDemoResources_ja JP()
{
super();
)
public Object [][] getContents ()
{
return contents;
{
// Необходим статический инициализатор для инициализации
// переменной, которая не может быть инициализирована в
// массиве содержимого. Например, мы не можем выделить что-либо
// в массиве содержимого для создания изображения и выполнить
// требуемую обработку исключений.
static
{
try
{
applcon = Image.createlmage("i!8n-ja_JP.png");
{
catch (lOException ioe)
{
System.out.println(ioe.getMessage());
ioe.printStackTrace();
}
}
}
В листинге 9.14 показан файл I18NDemoResources_zh_CH. Java, который определяет локализованные ресурсы для упрощенного китайского языка.
Листинг 9.14. Этот файл определяет локализованные ресурсы для региональной настройки zh_CN, Китай, приложения I18NDemo3
import javax.microedition.Icdui.Image; import Java.io.lOException;
/**
Данный класс определяет локализованные ресурсы для приложения I18NDemo3.
Вы извлекаете ресурс, вызывая метод getObjectO в классе ResourceBundle.
*/
public class I18NDemoResources_zh_CN
extends ListResourceBundle
{
// Содержит один из локализованных ресурсов. Нам необходимо
// инициализировать эту переменную в статическом инициализаторе
// данного класса.
private static Image applcon;
private Object [][] contents =
{
// Заголовок формы "Hello, World".
("title", "u54c8u7f57u4el6754c"),
// Текст формы "My third MIDlet".
("greeting", "u62llu76847b2cu4e09u4187 MIDlet"},
// Заголовок уведомления "Button Pressed". ("alert_title", "u6309u4eObu6309u9215"],
// Текст уведомления "A button was pressed!". ("alert_text", "u6309u4eOOu4187u6309u9215!"},
// Пункт меню «Exit».
("exit", "u767bu51fa"},
// Экранная клавиша «Menu», ("menu", "u76eeu5f54"},
// Пункт меню «Cancel», {"cancel", "u53d6u6d88"j,
// Пункт меню «Stop», ("stop", "u505cu6b62"},
// Пункт меню «OK». {"ok", "OK"),
// Экранная клавиша «Alert», {"alert", "u8b66u793a"),
// Пункт меню "Say Hi", ("sayhi", "u55e8"},
// Пункт меню «Screen». ("screen", "u87a2u5e55"),
// Пункт меню «Item», ("item", "u9879u76ee"},
// Пункт меню «Help», {"help", "u8bf4u660e"},
// Значок приложения. {"app_icon", applcon}
};
/**
Конструктор No-arg.
*/
public I18NDemoResources_zh CN()
{
super!);
{
public Object [][] getContents ()
{
return contents;
}
// Необходим статический инициализатор для инициализации
// переменной, которая не может быть инициализирована в
// массиве содержимого. Например, мы не можем выделить что-либо
// в массиве содержимого для создания изображения и выполнить
// требуемую обработку исключений.
static
{
try
{
applcon = Imagb.createlraage("i!8n-zh_CN.png");
}
catch (lOException ioe)
{
System.out.println(ioe.getMessage!)); ioe.printStackTrace();
}
}
}
Использование классификационных файлов Java имеет несколько преимуществ перед двумя предыдущими разработками. Прежде всего, оно позволяет избежать создания комплексной структуры потоков и анализа текстовых файлов, которые вы видели в предыдущем подходе. Доступ к ресурсам так же прост, как создание экземпляра класса. Более важно то, что пакеты ресурсов могут быть легко приспособлены к любому из объектов Java — не только к строкам — как локализованные ресурсы. Первым двум подходам, представленным в этой главе, приходилось определять атрибуты, чьи значения были именами классов, экземпляры которых нужно было создавать, и затем создавать экземпляры данных классов после считывания и анализа файла ресурса. Подход, основанный на пакетах ресурсов, создает экземпляры всех объектов неявно, когда пакет ресурсов создан. И классы пакетов ресурсов оставляют небольшой след, используя меньше ресурсов рабочей памяти, чем предыдущий подход.