Главная » Spring » Извлечение текстовых сообщений Spring

0

Часто бывает нежелательно жестко определять некоторый текст, который будет отображаться перед пользователем приложения. При- чиной тому может быть необходимость изменения текста с течением времени, или, возможно, приложение должно поддерживать интер- национализацию и отображать текст на родном языке пользователя.

Поддержка параметризации и интернационализации сообщений в Java позволяет определить один или несколько файлов с описа- ниями свойств, содержащими текст для отображения в приложе- нии. Вместе с файлами свойств, содержащими сообщения на других языках, в приложении всегда должен иметься файл с сообщениями, используемый по умолчанию. Например, если пакет сообщений для приложения называется «trainingtext», то в приложении может при- сутствовать следующий набор файлов с сообщениями:

# trainingtext.properties – сообщения по умолчанию, когда язы-

ковые не определены или когда для конкретного языка отсут- ствует файл со свойствами;

# trainingtext_en_US.properties  – сообщения для пользователей

в США, говорящих на английском языке;

#  trainingtext_es_MX.properties   –  сообщения  для  пользователей в Мексике, говорящих на испанском языке;

# trainingtext_de_DE.properties  – сообщения для пользователей

в Германии, говорящих на немецком языке.

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

course=class student=student computer=computer

а файл с сообщениями на испанском языке:

course=clase student=estudiante computer=computadora

Контекст приложения Spring поддерживает параметризацию со- общений, обеспечивая доступ к ним через интерфейс MessageSource:

public interface MessageSource { String getMessage(

MessageSourceResolvable   resolvable,   Locale   locale) throws NoSuchMessageException;

String getMessage(

String  code,  Object[]  args,  Locale  locale) throws NoSuchMessageException;

String getMessage(

String code, Object[] args, String defaultMessage, Locale  locale);

}

В состав фреймворка Spring входит готовая к использованию реа- лизация интерфейса MessageSource. Класс ResourceBundleMessageSource просто извлекает сообщения, используя для этого уже имеющийся в Java класс java.util.ResourceBundle. Чтобы воспользоваться классом ResourceBundleMessageSource, надо добавить следующее определение компонента:

<bean  id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

<property name="basename">

<value>trainingtext</value>

</property>

</bean>

Очень важно, чтобы данный компонент назывался именно message- Source, потому что ApplicationContext будет искать его по имени, при настройке внутреннего источника сообщений. Зато вам не придет- ся явно внедрять компонент messageSource в компоненты приложе- ния. Вместо этого вы получите доступ к сообщениям через метод getMessage() контекста приложения ApplicationContext. Например, по- лучить сообщение с именем computer можно так:

Locale locale = … ; // определить языковые настройки

String  text  =  context.getMessage("computer",  new  Object[0],  locale);

Вам наверняка придется использовать параметризованные со- общения в контексте веб-приложения, чтобы отобразить их на веб- странице. В этом случае для извлечения сообщений можно исполь- зовать специальный JSP-тег <spring:message>, и тогда не потребуется непосредственно обращаться к ApplicationContext:

<spring:message code="computer" />

Но если извлекать сообщения потребуется в компонентах, а не в JSP, то как получить доступ к ApplicationContext? Для этого надо не- много подождать или сразу перейти к разделу 3.5.6, где я расскажу, как обеспечить доступность контейнера в компонентах.

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

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии