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

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

Жанры

Шрифт:

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

I18NDemo-number_forraat-fr_FR: NumberFormat_FR

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

try

{

String name =

getAppProperty("I18NDemo-number_format-fr_FR");

// «name» теперь эквивалентно «NumberFormat_FR»

Class с = Class.forName(name);

NumberFormat_FR nf =

(NumberFormat_FR) с. new Instance;

}

catch (InstantiationException ie)

{

}

catch (IllegalAccessException iae)

{

catch (ClassNotFoundException cnfe)

{

}

Конечно, вы должны предоставить MIDP-совместимый классификационный файл Java с файлом JAR вашего приложения для того, чтобы эта схема работала.

Другой недостаток использования дескрипторов приложения заключается в том, что они неправильно обращаются с файлами JAD и манифеста для программно определяемых свойств. Вы, возможно, думаете, что это просто философское размышление, но это отражается на производительности. Чтобы прочитать файлы JAD или манифеста, вы должны привлечь помощь AMS. Единственный вызов вовлекает несколько компонентов реализации. Файл JAD на самом деле не предназначен для подобного частого доступа. Вы могли заметить, что происходит снижение производительности при попытке прочесть большой файл локализованных ресурсов — или любого другого типа программно определяемых ресурсов.

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

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

Использование текстовых файлов приложения для определения локализованных ресурсов

Второй подход к локализации использует программно определяемые текстовые файлы, которые содержат локализуемые атрибуты. Приложение с помощью данной схемы может, например, определить один файл локализованных атрибутов для каждой региональной настройки. Схема имен может соответствовать обозначению региональной настройки, например, en_US.txt для английской, fr_FR.txt для французской, ja_JP.txt для японской и так далее. В листинге 9.4 показан один пример такого файла, содержащего пары «ключ-значение» локализованных строк.

Листинг 9.4. Имя данного файла — fr_FR.txt. Он состоит из франкоязычных версий строк приложения

alert: Alerte

alert_title: Bouton Presse alert_text: Le bouton a ete presse

cancel: Quitter exit: Sortie

greeting: Mon troisieme MIDlet!

help: Aider

item: Item

menu: Menu

ok: OK

sayhi: Dis bonjour

screen: Ecran

stop: Arreter

Mtle: A116, tout le Monde

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

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

В листингах 9.5 и 9.6 содержится код, который реализует одну возможную разработку, которая использует файлы текстовых ресурсов. Этот код считывает файлы, отформатированные подобно тому, что показан в листинге 9.4.

Листинг 9.5. Класс I18NDemo2 использует потоки для чтения файлов текстового ресурса. Реализация getResource теперь отражает новую разработку для извлечения ресурсов из файлов, находящихся в файле JAR приложения

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 import java.io.DatalnputStream;

8 import Java.io.InputStream;

9 import Java.io.InputStreamReader;

10 import Java. io. EOFException;

11 import Java.io.lOException;

12 import Java.io.Reader;

13 import Java.io.UTFDataFormatException;

14 import Java.io.UnsupportedEncodingException;

15

16 import Java.util.Hashtable;

17

18 /**

19 Вторая версия приложения HSNDemo.

20

21 <р>Эта версия'также дехонстрирует простой способ определения

22 локализованных ресурсов. Она считывает файл, который является

23 частью файла JAR приложения (не файла JAD)

24 для загрузки локализованных ресурсов. Файл

25 состоит из набора пар «ключ-значение», одной на строку,

26 которые представляют локализованные строки.

27 MID-лет должен затем проанализировать содержимое файла

28 и создать внутреннюю хэшированную таблицу для поиска.

29

30 <р>Этот подход требует слишком много усилий по обработке

31 потока, который содержит файл

32 локализованных ресурсов. Более того, этот подход

33 не отвечает за локализацию ресурсов, которые

34 не являются строками.

35 */

36 public class I18NDemo2 extends MIDlet

37 {

38 // Файл, который содержит ресурсы для

39 // активной локальной настройки.

40 private String resourceFile;

41

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

43 // MID-лета.

44 private String locale;

45

46 // Символьная кодировка, установленная по умолчанию,

47 // используемая данной платформой.

48 private String encoding;

49

50 // HashTable, которая содержит локализованные

51 // ресурсы.

52 private Hashtable resources = new Hashtable ;

53

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

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

56 private HelloForm2 form;

57

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

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

60 private Display display;

61

62 // Экземпляр данного MID-лета.

63 private static I18NDemo2 instance;

64

65 /**

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

67 */

68 public I18NDemo2

69 {

70 super;

71 instance = this;

72 }

73

74 /*"

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

76 в действующем приложении.

77

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

79 приложения…

80 */

81 public static I18NDemo2 getlnstance

82 {

83 return instance;

84 {

85

86 /**

87 Запускает MID-лет. Получает текущее название

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

89 имени файла, который содержит локализованные

90 ресурсы региональной настройки. Файл ресурса

91 находится в файле JAR приложения.

92 */

93 public void startApp

94 {

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

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

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

98 locale =

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

100

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

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Мастер 11

Чащин Валерий
11. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер 11

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

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

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

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3

Черный Маг Императора 20

Герда Александр
20. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 20

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Эйзенштейн

Шкловский Виктор Борисович
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Эйзенштейн

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

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

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

Эпоха Опустошителя. Том VII

Павлов Вел
7. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VII

Наследие Маозари 9

Панежин Евгений
9. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
сказочная фантастика
6.25
рейтинг книги
Наследие Маозари 9

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

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