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

на главную - закладки

Жанры

Шрифт:

Класс Date просто представляет определенный экземпляр формата времени в Универсальном синхронизированном времени (UTC). В MIDP нет поддержки изменения значения Date на представление временного значения в любой другой временной зоне или для форматирования временных значений при отображении пользователям. Платформа J2SE, однако, имеет связанные классы (такие, как DateFormat), которые могут форматировать значения даты в манере, принятой в данном регионе. В MIDP нет таких классов.

MIDP поддерживает временные зоны с помощью своего класса java.util.TimeZone. Этот класс абстрактен. Ваша реализация MIDP предоставит, по крайней мере, один конкретный подкласс, который представляет временную зону GMT. Спецификация MIDP требует поддержки только временной зоны GMT, однако ваша реализация может также поддерживать другие зоны.

Метод TimeZone.getDefault выдает объект TimeZone, который представляет временную зону, устанавливаемую по умолчанию, для сервера, на котором ваше приложение запущено. Убедитесь,

что он может определить временную зону GMT, даже если это не временная зона, в которой работает приложение вашего компьютера.

Метод TimeZone.getTimeZone(String id) выдает объект TimeZone для трехбуквенного обозначения аргумента временной зоны, указанного в вызове. Имейте в виду, что выдаваемый объект может не представлять временную зону, которую вы запрашивали, потому что реализация не поддерживает ее. Очевидно, для вас как для разработчика приложения важно знать, в каких временных зонах поддерживается ваша платформа.

Поддержка календаря и временных зон

Опять же в отличие от платформы J2SE в MIDP есть только ограниченная поддержка календаря. Класс java.util.Calendar абстрактен. Поэтому каждая платформа MIDP будет предоставлять, по крайней мере, одну конкретную реализацию. Скорее всего, она не будет интернационализирована.

Конкретный подкласс платформы Calendar, вероятнее всего, реализует один определенный календарь, такой, как грегорианский или лунный. Он может соответствовать контекстам региональных настроек, в которых вы размещаете ваши приложения, а может и не соответствовать. Метод Calendar.getlnstance(TimeZone zone) выдает объект Calendar, который использует указанную временную зону и региональную настройку платформы, установленную по умолчанию. Обратите внимание, что этот фабричный метод не делает класс Calendar полностью интернационализированным классом. Он все еще не выдает соответствующий календарь, основываясь на региональном контексте. Например, если вы укажете китайское стандартное время (Chinese Standard Time), вы не получите объект, который представляет лунный календарь, используемый в Китае, во всех реализациях MIDP. Это означает, что вам нужно знать, какой календарь поддерживается вашей платформой, и согласуется ли он с региональной настройкой, поддерживаемой реализацией.

Разработка решения интернационализации приложения MIDP

В этом разделе представлены три подхода к разработке поддержки интернационализации и локализации приложений MIDP. Эти подходы были отобраны на основе доступных в MIDP API, которые могут предоставить некоторый уровень поддержки интернационализации, или тех, что включены в MIDP для работы с интернационализацией.

Использование атрибутов МID-лета для определения локализованных ресурсов

Как вы знаете, вы можете размещать определяемые пользователем атрибуты в файле JAD вашего приложения. Это означает, что вы можете использовать файл JAD для определения атрибутов MID-лета, которые представляют локализованные ресурсы, используемые вашим приложением.

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

Для демонстрации данного подхода я вновь использовал демонстрационную программу HelloWorld из главы 3. Приложение переименовано на IISNDemo для отличия его от оригинальной версии.

В листинге 9.1 показан файл дескриптора приложения, используемый программой IISNDemo. Несколько новых атрибутов были добавлены в файл JAD. Они представляют собой текстовые строки, которые пользователь видит во время исполнения приложения. Обратите внимание, что существует две версии каждой из данных строк: одна английская и одна французская. Этот файл поддерживает выполнение приложения в английской и французской языковых средах.

Листинг 9.1. Файл JAD содержит один атрибут на строку приложения на поддерживаемую региональную настройку

I18NDerao-alert-en_US: Alert

I18NDemo-alert-fr_FR: Alerce

H8NDemo-alert_text-en_US: The button was pressed

I18NDemo-alert_text-flb_FR: Le bouton a ete presse

I18NDemo-alert_title-en_US: Button Pressed

I18NDemo-alert_title-fr_FR: Eouton a ete Presse

I18NDemo-cancel-en_US: Cancel!18NDemo-cancel-fr_FR: Quitter

I18NDemo-exit-en_US: Exit IlSNDemo-exit-fr_FR: Sortie

I18NDemo-greeting-en_US: Another MIDlet!

I18NDerao-greeting-fr_FR: Un autre MIDlet!

I18NDemo-help-en_US: Help I18NDemo-help-fr_FR: Aider

I18NDemo-item-en_US: Item I18NDemo-item-fr_FR: Item,

I18NDemo-menu-en US: Menu

I18NDemo-menu-fr_Fr: Menu

I18NDemo-ok-en_US: OK

I18NDemo-ok-fr_FR: OK

I18NDe: r.o-sayhi-en_US: Say hi

I18NDemo-sayhi-fr_FR: Dis bonjour

I18NDemo-screen-en_US: Screen

I18NDemc-screen-fr_FR: Ecran I18NDemo-stop-en_US: Stop

I18NDemo-stop-fr_FR: Arreter I18NDemo-title-en_US: Hello, World

I18NDemo-title-fr_FR: A116, tout le Monde MIDlet-1: I18N Demo 1,

I18n.png, I18NDemo MIDlet-Info-URL:

MIDlet-Jar-Size: 19101 MIDlet-Jar-URL: ilSn.jar MIDlet-Name:

I18n MIDlet-Vendor: Vartan Piroumian MIDlet-Version: 1.0

Имена

атрибутов в файле JAD, показанные в листинге 9.1, приобретают следующую форму:

<название МID-лета>-<ключ>-<обозначение региональной настройки>

Например, следующие два атрибута определяют заголовок MID-лета на английском и французском языках:

I18NDemo-title-en_US: Hello, World.

I18NDemo-title-fr_FR: A116, tout le Monde

В листингах 9.2 и 9.3 показаны два файла, которые составляют исходный код приложения. Они определяют и реализуют схему поиска атрибутов, отражаемую именами атрибутов в файле JAD. Программа извлекает версию атрибута, связанного с контекстом региональной настройки, в котором приложение работает.

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

Листинг 9.2. Измененный класс HelloWorld называется IlSNDemo. Он использует схему поиска для извлечения правильной версии атрибутов строки приложения, базируясь на региональной настройке

1 import javax.microedition.midlet.MIDlet;

2

3 import javax.microedition.Icdui.Display;

4 import javax.microedition.Icdui.Displayable;

5 import javax.microedition.Icdui.Form;

6

7 /**

8 Первая версия приложения IlSNDemo.

9

10 <р>Данная версия демонстрирует простейший подход к

11 загрузке локализованных ресурсов из файла JAD MID-лета.

12 этот подход быстро становится непригодным при большом

13 количестве ресурсов. И он полезен только для текстовых

14 сообщений, но не для других видов локализованных

15 ресурсов.

16 */

17 public class IlSNDemo extends MIDlet

18 {

19 // Региональная настройка, указанная для выполнения в

20 // данном MID-лете.

21 private String locale;

22

23 // Displayable. Этот компонент отображается

24 // на экране.

25 private HelloForm form;

26

27 // Экземпляр Display. Данный объект управляет всеми

28 // компонентами Displayable данного MID-лета.

29 private Display display;

30

31 // Экземпляр MID-лета.

32 private static IlSNDemo instance;

33

34 // Префикс имен атрибутов локализуемых

35 // ресурсов.

36 String attrPrefix = new String("I18NDemo-");

37

38 /**

39 Конструктор No-arg.

40 */

41 public I18NDemo

42 {

43 super;

44 instance = this;

45 }

46

47 /*

48 Получает экземпляр данного класса, который существует в

49 работающем приложении.

50

51 Звоззращает экземпляр, созданный при запуске

52 приложения.

53 */

54 public static IlSNDemo getlnstance

55 {

56 if (instance == null)

57 {

58 instance = new IlSNDemo ;

59 }

60 return instance;

61 }

62

63 /**

64 Запускает. MID-лет. Получает текущую региональную

65 настройку для реализации. Использует ее для

66 создания префикса ключей атрибутов всех

67 локализованных ресурсов. Названия локализованных

68 ресурсов в файле JAD соответствуют

69 совместимой схеме имен.

70 */

71 public void startApp

72 {

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

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

75 // установлена прежде, чем данный MID-лет начнет выполняться.

76 locale =

77 System.get Property("microedition.locale");

78

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

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

81 // Form, из определенных пользователем атрибутов файла

82 // JAD. Получает все локализованные строки таким

83 // образом.

84 String formTitle = getResource("title");

85 form = new HelloForm(formTitle);

86

87 // Это приложение просто отображает единственную форму,

88 // созданную ранее.

89 display = Display.getDisplay(this);

90 display.setCurrent(form);

91 }

92

93 /**

94 Выдает значение, связанное с указанным

95 ключом из списка определяемых пользователем

96 ресурсов MID-лета в файле JAD приложения.

97

98 @param key — ключ пары «ключ-значение».

99

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

101 ключом.

102 */

103 public String getResource(String key)

104 {

105 StringBuffer index = new

106 StringBuffer(«ttrPrefix);

107 String value;

108

109 index.append(key);

110 index.append(-);

111 index.append(locale);

112

113 value = getAppProperty(index.toString );

114 return value;

115 }

116

117 /**

118 Закрываем приложение. Уведомляем

119 реализацию о выходе.

120 */

121 public void quit,

122 {

123 notifyDestroyed ;

124 }

125

126 public void destroyApp(boolean destroy)

127 {

128

129 }

130

131 public void pauseApp

132 (

133

134 }

135 }

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

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

Монстр из прошлого тысячелетия

Еслер Андрей
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Монстр из прошлого тысячелетия

Тринадцатый VI

NikL
6. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VI

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Печать Пожирателя

Соломенный Илья
4. Пожиратель
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Печать Пожирателя

Туполев

Бодрихин Николай Георгиевич
1327. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Туполев

Кодекс Охотника. Книга XXIX

Винокуров Юрий
29. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXIX

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Дважды одаренный. Том III

Тарс Элиан
3. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
юмористическое фэнтези
5.00
рейтинг книги
Дважды одаренный. Том III

Инженер Петра Великого 2

Гросов Виктор
2. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Инженер Петра Великого 2

Язычник

Мазин Александр Владимирович
5. Варяг
Приключения:
исторические приключения
8.91
рейтинг книги
Язычник

Древесный маг Орловского княжества 3

Павлов Игорь Васильевич
3. Орловское княжество
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Древесный маг Орловского княжества 3

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

Викинг

Мазин Александр Владимирович
1. Викинг
Приключения:
исторические приключения
8.92
рейтинг книги
Викинг