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
101 // Названия файлов локализованных ресурсов, соответствующих
102 // форме: <���язык>_<���страна>.txt.
103 // Создает строку имени файла и передает ее в
104 // метод, который открывает файл и извлекает
105 // содержимое.
106 resourceFile = locale +".txt";
107 int status = loadResources(resourceFile);
108
109 if (status < 0)
110 {
111 quit();
112 return;
113 }
114
115 // Создаем элемент Displayable. Получаем
116 // локализованную String, которая представляет
117 // заголовок Form.
118 String formTitle = getResource ("title");
119 form = new HelloForm2(formTitle);
120
121 // Это приложение просто отображает одну.
122 // форму, созданную выше.
123 display = Display.getDisplay (this);
124 display.setCurrent(form);
125 }
126
127 /**
128 Загружает определенные пользователем ресурсы приложения
129 из указанного файла. Файл является частью файла JAR
130 приложения, расположенного на реальном устройстве.
131 J2MEWTK хранит файл в файле JAR приложения, расположенном
132 в директории приложения bin/.
133
134 @param file — имя определенного пользователем файла
135 ресурса приложения.
136 */
137 private int loadResources(String file)
138 {
139. Class с = getClass ();
140
141 if (file == null)
142 {
143 return -1;
144 }
145 InputStream is = null;
146 is = с. getResourceAsStream(file);
147 if (is == null)
148 {
149 return -1;
150 }
151 Reader reader = new InputStreamReader(is);
152 processStream(reader);
153 return 0;
154 }
155
156 /**
157
158 */
159 private void processStream(Reader stream)
160 {
161 if (stream == null)
162 {
163 return;
164 }
165 StringBuffer key = new StringBuffer();;
166 StringBuffer value = new StringBuffer ();;
167 while (true)
168 {
169 // Считываем строку. Предполагается, что каждая строка
170 // содержит ключ и значение,
171 // отделенные двоеточием. Если -1, значит
172 // мы достигли конца файла.
173 key.deletef(), key.length());
174 value.delete(0, value.length());
175 int status = readLine(key, value, stream);
176 if (status == -1)
177 {
178 break;
179 }
180
181 // Вставляем этот ресурс в хэшированную таблицу
Читать дальше