2015-07-06 2 views
2

Мне нужно использовать ICU (Международные компоненты для Unicode). Поскольку мое приложение должно поддерживать локали, которые не поддерживаются в JDK, например, «fa_IR».Локализация с ICU в Spring-MVC с использованием файла cookie

Я нашел часть конфигурации, которая предоставляет эту функцию, используя Spring и Cookie.

<beans:bean id="localeResolver" 
      class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> 
    <beans:property name="defaultLocale" value="en" /> 
    <beans:property name="cookieName" value="myAppLocaleCookie"/> 
    <beans:property name="cookieMaxAge" value="3600"/> 
</beans:bean> 

<interceptors> 
    <beans:bean 
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
     <beans:property name="paramName" value="locale" /> 
    </beans:bean> 
</interceptors> 

Есть ли способ с использованием аналогичной конфигурации для ICU?

Если эта конфигурация невозможна, это любой другой способ (скажем, изменение контроллера и т. Д.)?

ответ

0

Пример в вопросе Op является конфигурацией CookieLocaleResolver, что позволяет решить запрашиваемую локаль из печенья (он разрешен из Accept-Language заголовка по умолчанию) и LocaleChangeInterceptor, что позволяет изменить локаль по запросу.

ICU не имеет к этому никакого отношения. ICU - это библиотека, которая позволяет вам форматировать и переводить сообщения. Это не волнует изменение локали, это весна.

Я предполагаю, что вы хотите использовать ICU для форматирования сообщений, поддерживающих локали, в качестве замены класса Java java.text.MessageFormat.

Spring использует MessageFormat в своем классе MessageSourceSupport, который распространяется на AbstractMessageSource, который также распространяется на ResourceBundleMessageSource.

Чтобы включить класс com.ibm.icu.text.MessageFormat ICU в ваше приложение, вам нужно будет реализовать свой собственный класс MessageSrouce, который предоставляет MessageFormats. А затем настройте свой механизм шаблонов, чтобы использовать его. Следующий фрагмент показывает конфигурацию Thymeleaf с пользовательским номером MessageSource.

SpringTemplateEngine engine = new SpringTemplateEngine(); 
// ... 
engine.setTemplateEngineMessageSource(myCustomMessageSource); 
return engine; 

Ну, по крайней мере, я пока не нашел лучшего решения.

Возможно, вас заинтересует моя статья Spring Boot internationalisation with database stored messages and IBM ICU

Смежные вопросы