Конструктор 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", "\u24f64\u3055\u3093, \u3053\u3093\u306b\u3061\u306f"),
// "Мой третий MID-лет".
("greeting", "\u79cl\u306e 3 \u3063\u3081\u306e MIDlet"},
// "Кнопка нажата".
{"alert_title")
"\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u307e\u3057\u305f"},
// "Кнопка была нажата".
"alert_text",
"\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u3C7e\u3057\u305f!"}
// Пункт меню «Выход», {"exit", "\u51fa\53e3"},
// Экранная клавиша «Меню».
("menu", "\u30el\u30cb\u30e6\u30fc"),
// Пункт меню «Отмена».
("cancel", "\u3Cad\u30e4\u30f3\u30bb\u30eb"),
// Пункт меню «Стоп». {"stop", "\u505c\u6b62"),
// Пункт меню «ОК». ("ok", "OK"},
// Экранная клавиша «Предупреждение», {"alert", "Alert"),
// Пункт меню "Скажи привет", ("sayhi","\u30cf\u30a4"},
// Пункт меню «Экран».
{"screen", "\u30b9\u30af\u30ea\u30f3"),
// Пункт меню «Предмет», {"item", "\u9805\u76ee"),
// Пункт меню «Помощь».
("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", "\u54c8\u7f57\u4el6\754c"),
// Текст формы "My third MIDlet".
("greeting", "\u62ll\u7684\7b2c\u4e09\u4187 MIDlet"},
// Заголовок уведомления "Button Pressed". ("alert_title", "\u6309\u4eOb\u6309\u9215"],
// Текст уведомления "A button was pressed!". ("alert_text", "\u6309\u4eOO\u4187\u6309\u9215!"},
// Пункт меню «Exit».
("exit", "\u767b\u51fa"},
// Экранная клавиша «Menu», ("menu", "\u76ee\u5f54"},
// Пункт меню «Cancel», {"cancel", "\u53d6\u6d88"j,
// Пункт меню «Stop», ("stop", "\u505c\u6b62"},
// Пункт меню «OK». {"ok", "OK"),
// Экранная клавиша «Alert», {"alert", "\u8b66\u793a"),
// Пункт меню "Say Hi", ("sayhi", "\u55e8"},
// Пункт меню «Screen». ("screen", "\u87a2\u5e55"),
// Пункт меню «Item», ("item", "\u9879\u76ee"},
// Пункт меню «Help», {"help", "\u8bf4\u660e"},
// Значок приложения. {"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 — не только к строкам — как локализованные ресурсы. Первым двум подходам, представленным в этой главе, приходилось определять атрибуты, чьи значения были именами классов, экземпляры которых нужно было создавать, и затем создавать экземпляры данных классов после считывания и анализа файла ресурса. Подход, основанный на пакетах ресурсов, создает экземпляры всех объектов неявно, когда пакет ресурсов создан. И классы пакетов ресурсов оставляют небольшой след, используя меньше ресурсов рабочей памяти, чем предыдущий подход.