Интернационализация (i18n) в Struts |
||
Last updated: March 7, 2002 Автор – Aaron Rustad Перевод – Алексей Ковязин |
||
|
||
После многих попыток заставить интернационализацию в Struts работать, я решил написать это краткое руководство в надежде спасти остальных от тех мук, который я испытал. OK, это не было так уж плохо, но это должно было быть документировано лучше. В данном начальном документе я не собираюсь углубляться в многочисленные “как” и “почему” процесса интернационализации. Я могу расширить этот документ в будущем, если люди действительно захотят узнать больше или я снова устану от работы. В любом случае, не стесняйтесь задавать мне (emal внизу страницы) вопросы. |
||
|
|
|
1. |
Первым делом, прочтите и поймите базовое объяснение интернационализации сообщений в Struts, затем читайте дальше. |
|
|
|
|
2. |
Создайте альтернативный файл ApplicationResource.properties и сохраните его в том же каталоге, что и исходный. Например, мой исходный файл выглядит вот так (MyResources.properties), а вот так – русская версия(MyResources_ru.properties). Очень важно для Struts (точнее, для Java) указать правильный ISO код языка – в данном случае это “ru”. |
|
|
|
|
3. |
Преобразуйте ваш альтернативный файл ApplicationResources.properties в UTF. Чтобы сделать это, используйте инструмент native2ascii, который поставляется с вашим JDK. Он преобразует файл с символами национальной кодировки (не-Латинские и не-Unicode символы) в точно такой же файл с Unicode-символами. Я пользовался следующей командой: native2ascii -encoding UTF-8 MyResources_ru.properties MyResources_ru.propertiesX. Взгляните на результат (output file), и увидите, что ваши слова преобразованы в Unicode (UTF-8) и теперь ваш браузер может их прочитать! |
|
|
|
|
4. |
В начале каждой JSP-страницы, на которой предполагается использование i18n-сообщений, включите следующую директиву: <%@ page contentType="text/html; charset=UTF-8" %> Это укажет браузеру, что для отображения данной страницы следует использовать UTF-8, и ваши Unicode-символы будут соответствующе показаны |
|
|
|
|
5. |
Проверьте работу i18n, используя браузер, который позволяет выбирать различные языки по умолчанию: |
|
|
IE |
"Tools" -> "Internet Options", и выберите кнопку "Language..." внизу диалога. Смените язык на тот, который вы желаете видеть. Обновите страницу и взгляните на результат. |
NS 6.3 |
"Edit" -> "Preferences", раскройте в дереве "Navigator" и выберите "Languages". Добавьте языки, используя кнопку "Add..." и переместите желаемый язык в верх списка. Затем обновите страницу или перезапустите браузер. |
|
|
|
|
|
Это все, что касается отображения сообщений на JSP. Однако, проблема возникает, когда вы посылаете (submit) интернационализованные символы через формы. Шаги, приведенные ниже, показывают простое решение данной проблемы. |
|
|
||
7. |
Добавьте этот фильтр к вашему web-приложению, это часть документации Tomcat, поставляемого нашими друзьями из Jakarta Project и Apache. Обычно этот фильтр говорит вашему ActionServlet'у, что все запросы приходят к нему из форм с кодировкой UTF-8, и что посланные атрибуты должны обрабатываться именно таким образом. |
|
|
NOTE: |
WebSphere AS 4 не позволяет такого решения, смотрите подробности здесь. |
|
||
8. |
Добавьте этот код в ваш web.xml deployment descriptor, он предполагает, что ваш ActionServlet ссылается на имя action (это принято по умолчанию в дистрибутиве Struts). <!-- Example filter
to set character encoding on each request
--> <!-- Define filter
mappings for the defined filters
--> |
|
|
|
|
9. |
Перегрузите ваш app-сервер и протестируйте его... должно работать. |
|
|
|
|
|
|
|
Динамический выбор языка |
||
|
Было бы здорово позволять пользователю динамически менять язык приложения в веб-приложении. Все что вам нужно сделать – это создать новый объект java.util.Locale и положить его в сессию. Предположительно лучше это сделать в Action-классе. Вот пример кода: |
|
|
|
|
|
java.util.Locale newLocale = new java.util.Locale( "ru" ); request.getSession().setAttribute( Action.LOCALE_KEY, newLocale ); |
|
|
|
|
|
Note: В классе Action есть метод setLocale( HttpServletRequest, Locale ) который ликвидирует необходимость руками устанавливать класть Locale в сессию. |
|
|
|
|
Ресурсы |
||
|
|
|
1. |
Пример Applicaction War, и Source Jar использующих Кириллицу |
|
|
||
|
|
|
Если есть вопросы, пожелания, комментарии, пожалуйста отправляйте их на arustad@anassina.com и я попытаюсь помочь вам или изменить этот документ для вящей пользы всем остальным. Aaron Rustad. |
||
© 2002 Anassina Inc, All Rights Reserved |
||
|
||
|