Изменить стиль страницы

Получает пакет ресурсов, используемый данным MID-летом.

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

@выдает локализованные ресурсы MID-лета.

*/

public static ListResourceBundle getResourceBundle ()

{

return (ListResourceBundle) bundle;

}

/**

Запускает MID-лет. Определяет текущую региональную настройку среды исполнения и использует ее для создания имени пакета локализованных ресурсов. Использует это имя для создания имени класса Java, который затем загружается с помощью Class. Если нет соответствия пакету ресурсов, по умолчанию используется пакет ресурсов U.S. English.

*/

public void startApp()

{

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

// AMS.Региональная настройка должна быть установлена

// до выполнения данного MID-лета.

locale = System.getProperty("microedition.locale");

bundle = null;

cry

{

bundle =

ResourceBundle.getBundle("IlSNDemoResources", locale);

if (bundle == null)

{

bundle =

ResourceBundle.getBundle("IlBNDemoResources", "en_US");

}

}

catch (MissingResourceException mre)

mre.printStackTrace();

}

try

}

/ Создаем элемент Displayable. Получаем локализованную

// String, которая представляет заголовок Form.

String formTitle = (String)

bundle.getObject("title");

form = new HelloForm3(formTitle);

}

catch (MissingResourceException mre)

{

rare.printStackTrace();

}

// Это приложение просто отображает одну форму, созданную ранее, display = Display.getDisplay(this); display.setCurrent(form);

}

/**

Выдает значение, связанное с указанным ключом из списка определяемых пользователем ресурсов MID-лета в файле JAD приложения.

@param key Ключ пары ключ-значение.

@выдает значение, связанное с указанным ключом.

*/

public Object getResource(String key)

}

Object resource = null;

try

{

resource = bundle.getObject(key);

}

catch (MissingResourceException mre)

}

}

return resource;

/**

Выход из MID-лета. Уведомляет реализацию, что она

может прервать работу всех ресурсов приложения.

Реализация вызывает destroyApp().

*/

public void quit()

{

notifyDestroyed();

/*

public void destroyApp(boolean destroy)

{

{

public void pauseApp()

{

}

}

На рисунке 9.1 показано основное окно, созданное программой I18NDemo3 при ее запуске в региональной настройке en_US. Программа динамически извлекает локализованные ресурсы, описанные в листинге 9.9. На рисунке 9.2 показан экран меню того же приложения, запущенного в региональной настройке fr_FR, которая использует локализованные ресурсы, описанные в листинге 9.10. Код приложения I18NDemo3 абсолютно не изменяется. Он просто динамически определяет контекст региональной настройки при инициализации и загружает соответствующий пакет ресурсов.

Платформа J2Me _65.jpg

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

Платформа J2Me _66.jpg

Рисунок 9.2. Логическая схема приложения извлекает франкоязычные ресурсы из объекта, который определяет франкоязычные ресурсы приложения

Важным моментом этой разработки является прозрачность и организационная простота, осуществленная с помощью использования последовательностей переключения кода Unicode Java для кодирования не-ASCII строковых литералов в подклассах ListResourceBundle. Эти файлы содержат классы Java, которые вы откомпилировали вместе с остальным исходным кодом приложения. Компилятор преобразует последовательности переключения уникода в строковых литералах на двоичные значения уникода. Поскольку компиляторы Java понимают последовательности переключения уникода, вам не придется выполнять какое-либо преобразование кодировки для получения локализованного текста в форме, требуемой при выполнении, а именно в форме двоичных значений символьной кодировки уникода.

Исследование листингов 9.9 и 9.10 может не убедить вас в выгодах использования последовательностей переключения уникода. Как-никак, большинство текстовых редакторов и операционных систем изначально поддерживают западноевропейские языки, такие, как французский. По этой причине легче создавать локализованные ресурсы для западноевропейских региональных настроек без повторной сортировки последовательностей переключения уникода. Например, пользователи могут создавать французские символы, вводя двухклавишные последовательности переключения в большинстве текстовых редакторов или вставляя их с помощью специальной функции меню.

Возможно, следующий пример более явно отразит выгоды использования последовательностей переключения уникода. В листинге 9.12 показан класс I18NDemoResources_ru_RU, который определяет локализованные ресурсы для русского языка. На рисунке 9.3 показан внешний вид экрана, показанного на рисунке 9.2, когда региональная настройка устанавливается на ru_RU, которая представляет собой русский язык. Ввод русских символов с помощью системы западных языков более сложен, чем ввод французских символов. Однако структуру класса I18NDemoResources_ru_RU и инструменты, требуемые для его создания, не приходится изменять для поддержки использования кириллицы.

Платформа J2Me _67.jpg

Рисунок 9.3. Последовательности переключения уникода легко поддерживают все письменные языки. С помощью простого текстового редактора вы можете создавать локализованные ресурсы для языков, которые не представлены на вашей компьютерной клавиатуре

Листинг 9.12. Файл русского локализированного ресурса также содержит последовательности переключения уникода, которые дают вам возможность представлять символы кириллицы без использования каких-либо специальных текстовых редакторов или инструментов

import javax.microedition.Icdui.Image;

import Java.io.lOException;

/*

Данный класс определяет локализованные ресурсы для приложения I18NDemo3. Вы извлекаете ресурс, вызывая метод getObject() в классе ResourceBundle.

*/

public class I18NDemoResources_ru_RU

extends ListResourceBundle

{

// Содержит один из локализованных ресурсов. Нам необходимо

// инициализировать эту переменную в статическом инициализаторе

// данного класса.

private static Image applcon;

private Object [][] contents =

// "Привет, мир".

("title", "\u0417\u0434\u0440\u0430\u0441\u0442\u0432\u0443\u0439,

\u041c\u0446\uO*440!"),

// "Мой третий MID-лет".

{"greeting", "\u041c\043e\u0439 \u0442\u0440\u0435\u0442\u0438\u0439 MIDlet!"},

// "Кнопка нажата".

{"alert_title",

"\u041a\u043d\u043e\u043f\u043a\u0430 \u041d\u0430\u0436\u0430\u0442\u0430"},

// "Кнопка была нажата!".

("alert_text", "\u041a\u043e\u043e\u043f\u043a\u0430

\u0411\u044b\u043b\u0430 \u043d\u0430\u0436\u0430\u0442\u0430!"},

// Экранная клавиша «Выход».

("exit", "\u0412\u044b\u0445\u043e\u0434"},

{

// Экранная клавиша «Меню».

("menu", "\u041c\u0435\u043d\u044e"},

// Пункт меню «Отмена».

{"cancel",

"\u041f\u0440\u0435\u043a\u0440\u0430\u0442\u0446\u0442\u044c"),

// Пункт меню «Стоп».

("stop", "\u0421\u0442\u043e\u043f"},

// Пункт меню «ОК». {"ok", "OK"},

// Экранная клавиша «Предупреждение».

("alert", "\u0412\u043d\u0446\u043c\u0430\u043d\u0446\u0435"),

// Пункт меню "Скажи привет".

("sayhi","\u0421\u043a\u0430\u0436\u0446

\u043f\u0440\u0446\u0432\u0435\u0442"),

it Пункт меню «Экран».

{"screen", "\u042d\u043a\u0440\u0430\u043d"),

// Пункт меню «Предмет».

("item", "\u041f\u0440\u0435\u0434\u04c3\u0435\u0442"),

// Пункт меню «Помощь».

("help", "\u041f\u043e\u043c\u043e\u0449\u044c"},

// Значок приложения. ("app_icon", applcon} };

/**