Чтение онлайн

на главную

Жанры

Шрифт:

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

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

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

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

Рисунок 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} };

/**

Конструктор 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;

}

}

}

Поделиться:
Популярные книги

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2

Приручитель женщин-монстров. Том 5

Дорничев Дмитрий
5. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 5

Бездомыш. Предземье

Рымин Андрей Олегович
3. К Вершине
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Бездомыш. Предземье

Идеальный мир для Социопата 3

Сапфир Олег
3. Социопат
Фантастика:
боевая фантастика
6.17
рейтинг книги
Идеальный мир для Социопата 3

Сонный лекарь 4

Голд Джон
4. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Сонный лекарь 4

(Противо)показаны друг другу

Юнина Наталья
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
(Противо)показаны друг другу

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

"Фантастика 2023-123". Компиляция. Книги 1-25

Харников Александр Петрович
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Фантастика 2023-123. Компиляция. Книги 1-25

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10

Вперед в прошлое 5

Ратманов Денис
5. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 5

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Системный Нуб

Тактарин Ринат
1. Ловец душ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Системный Нуб

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Путь Шамана. Шаг 1: Начало

Маханенко Василий Михайлович
1. Мир Барлионы
Фантастика:
фэнтези
рпг
попаданцы
9.42
рейтинг книги
Путь Шамана. Шаг 1: Начало