Разработка многоязычных портлетов в Rational Application DeveloperIBM® WebSphere® Portal поддерживает более 30 языков. Различные международные организации предоставляют свои порталы для пользователей различных стран или регионов посредством многоязычных Web-сайтов. В этом контексте портал параллельно обслуживает запросы большого числа пользователей на предпочитаемых ими языках. WebSphere Portal поддерживает портлеты, отображаемые на разных языках. Если запрашиваемый язык не поддерживается, портал пытается подобрать соответствие языковым предпочтениям пользователя. В этой статье рассматривается разработка многоязычных портлетов при помощи IBM® Rational® Application Developer for WebSphere Software v9 (для работы с приведенными примерами можно использовать версию v7.5 или выше). Ссылки на фрагменты исходного кода для многоязычных портлетов, использующих ResourceBundle, предоставлены в разделе Загрузки. Предварительные условия Для выполнения описанных ниже шагов необходимы:
Как разработать многоязычный портлетМногоязычный портлет можно легко разработать при помощи ResourceBundle. Класс ResourceBundle имеет абстрактный подкласс ListResourceBundle, который локализует ресурсы в виде удобного и простого в использовании списка. ListResourceBundle доступен в библиотеке java.util (java.util.ListResourceBundle). Создание нового проекта портлетаПервым шагом является создание нового проекта портлета в Rational Application Developer.
Рисунок 1. Создание нового проекта портлета
Рисунок 2. Выбор проекта портлета в окне Select a wizard
Рисунок 3. Создание проекта портлета с именем Multilingual
Создание ResourceBundleДля каждого класса конкретного языка необходим пакет. Для создания пакета в Rational Application Developer:
Рисунок 4. Создание нового пакет
Откроется окно New Java Package.
Рисунок 5. Создание нового пакета с именем com.teg.resource
Создание классаТеперь создадим класс для языка по умолчанию. Для создания этого нового класса в Rational Application Developer щелкните правой кнопкой мыши на имени пакета и выберите New > Class (см. рисунок 6). Рисунок 6. Создание нового класса в пакете com.teg.resources
Откроется окно Java Class. В текстовом поле Name введите MyProviderBundle (см. рисунок 7), а затем нажмите Finish. Рисунок 7. Создание нового класса с именем MyProviderBundl
Теперь скопируйте фрагмент кода, приведенный в листинге 1, в MyProviderBundle.java. Листинг 1. MyProviderBundle.java
Примечание. Для хранения связанной с языком информации в классе MyProviderBundle используются переменные. В переменных WELCOME_MSG и INFO_MSG хранится информация, отображающаяся на экране портала (см. рисунок 8). Рисунок 8. Класс набора ресурсов для языка, выбираемого по умолчанию
Создание набора ресурсов для конкретного языкаДля создания набора ресурсов для конкретного языка необходимо создать класс аналогично тому, как это делалось ранее. Назовите этот класс MyProviderBundle_<lang>, где <lang> - это язык. На рисунке 9 показан класс MyProviderBundle_fr, созданный для французского языка. Соответствующее содержимое для французского языка назначается переменным WELCOME_MSG и INFO_MSG. Рисунок 9. Класс набора ресурсов для конкретного языка
Исходный код MyProviderBundle_fr.java приведен в листинге 2. Листинг 2. MyProviderBundle_fr.java
Можно создать классы ResourceBundle для всех языков, поддерживаемых портлетом. Язык, поддерживаемый WebSphere Portal по умолчанию, указывается в файле portlet.xml. Структура пакета портлета в Rational Application DevelopНа рисунке 10 показана структура пакета портлета в Rational Application Developer. Для просмотра созданных наборов ресурсов разверните пакет com.teg.resources. Рисунок 10. Структура пакета портлета в Rational Application Developer
Использование ResourceBundle в JSPПосле создания ResourceBundle для отображения в JSP (MultilingualView.jsp) содержимого на конкретном языке необходимо использовать переменные, объявленные в файлах классов (см. рисунок 11). В JSP локаль определяется в renderRequestobject. Очередность использования локалей следующая:
Например , если при развертывании выбран испанский язык, то при отправке браузером информации о том, что языком пользователя является французский, содержимое все равно возвращается на испанском. Причина в том, что предпочтения пользователя имеют более высокий приоритет, чем информация браузера (accept-language). Рисунок 11. Использование набора ресурсов в JSP
Исходный код MultiLingualPortletView.jsp приведен в листинге 3. Листинг 3. MultilingualPortletView.jsp
Просмотр многоязычного портлетаПосле развертывания портлета на WebSphere Portal и добавления его на страницу (как для неподдерживаемого языка, так и для языка по умолчанию) содержимое в портлете отображается на языке по умолчанию (в данном примере на английском). Рисунок 12. Портлет с содержимым на языке по умолчани
Измените в предпочтениях пользователя язык браузера на французский и обновите страницу. На рисунке 13 показан портлет, отображающий содержимое на французском языке. Рисунок 13. Содержимое портала на французском языке
ЗаключениеВ статье описывалось использование IBM Rational Application Developer для разработки многоязычных портлетов для IBM WebSphere Portal. Я считаю, что на данный момент самым простым способом создания многоязычных порталов является ResourceBundle. БлагодарностиАвтор благодарит руководителя подразделения IBM Social Business в Tata Consultancy Services Панкаджа Бозе (Pankaj Bose) и старшего разработчика Tata Consultancy Services Сушри Пухана (Sushree Puhan) за их рекомендации и поддержку при написании данной статьи. |