Spring FreeMarkerローカライズ動的設定の統合
13039 ワード
SpringはFreeMarkerを統合して国際化する過程は簡単で、spring-webmvcのorg/springframework/web/servlet/view/freemarkerの下のspring.ftl includeは、このspringなど、国際化するftlファイルに入ればいいです.ftlはftlファイルディレクトリのcommonの下でコピーして、このように直接ftlの中でincludeが入ってくることができます
もちろんspringプロファイルでfreemarkerConfigを構成するときに自動的にインポートすることもできます
そしてspringのプロファイルに宣言します
ソースファイルディレクトリresourceの下に対応するMessageResourcesがあります.zh_CN.义齿en_US.propertesなどのプロパティファイル
ftlファイルでこのように使用します
これにより、システムは、ユーザーの現在の環境下のlocaleに基づいて国際化されます.しかし、自分でユーザーのlocaleを手動で指定するにはどうすればいいのでしょうか.
参考にしてください.springframework.web.servlet.i18n.LocaleChangeInterceptorによるlocaleの設定は、まずspringのプロファイルにLocaleResolver(CookieLocaleResolverなど)を宣言します.ここでLocaleの設定はセッションの範囲内であればいいのです
次にspringのcontrollerでlocaleを制御する方法に次のコードを入れればいいです
最後に私のやり方をまとめます
1.springの構成に必須
2.ユーザーLocaleを設定するControllerでLocaleを設定する
3.ftlでこのように使う
ソース:http://yvonxiao.iteye.com/blog/1005183
<#import "/common/spring.ftl" as spring/>
もちろんspringプロファイルでfreemarkerConfigを構成するときに自動的にインポートすることもできます
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
...
<property name="freemarkerSettings">
<props>
<prop key="defaultEncoding">UTF-8prop>
...
<prop key="auto_import">common/spring.ftl as springprop>
props>
property>
そしてspringのプロファイルに宣言します
class="org.springframework.context.support.ResourceBundleMessageSource">
MessageResources
ソースファイルディレクトリresourceの下に対応するMessageResourcesがあります.zh_CN.义齿en_US.propertesなどのプロパティファイル
ftlファイルでこのように使用します
<@spring.message "hello"/>
これにより、システムは、ユーザーの現在の環境下のlocaleに基づいて国際化されます.しかし、自分でユーザーのlocaleを手動で指定するにはどうすればいいのでしょうか.
参考にしてください.springframework.web.servlet.i18n.LocaleChangeInterceptorによるlocaleの設定は、まずspringのプロファイルにLocaleResolver(CookieLocaleResolverなど)を宣言します.ここでLocaleの設定はセッションの範囲内であればいいのです
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="zh" />
bean>
次にspringのcontrollerでlocaleを制御する方法に次のコードを入れればいいです
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
if (localeResolver == null) {
throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
}
LocaleEditor localeEditor = new LocaleEditor();
localeEditor.setAsText(lang);
localeResolver.setLocale(request, response, (Locale) localeEditor.getValue());
最後に私のやり方をまとめます
1.springの構成に必須
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
<property name="freemarkerSettings">
<props>
<prop key="defaultEncoding">UTF-8prop>
<prop key="template_update_delay">5prop>
<prop key="auto_import">common/website.ftl as websiteprop>
props>
property>
bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
<property name="contentType" value="text/html;charset=utf-8">property>
bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="zh" />
bean>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>MessageResourcesvalue>
list>
property>
bean>
2.ユーザーLocaleを設定するControllerでLocaleを設定する
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
if (localeResolver == null) {
throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
}
LocaleEditor localeEditor = new LocaleEditor();
localeEditor.setAsText(lang);
localeResolver.setLocale(request, response, (Locale) localeEditor.getValue());
3.ftlでこのように使う
<@website.message "hello"/>
ソース:http://yvonxiao.iteye.com/blog/1005183