1、国际化步骤
1)、写好国际化资源文件
2)、让SpringMVC的ResourceBundleMessageSource管理国际化资源文件
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="loginpage/login"></property>
</bean>
3)、去页面利用taglib-fmt标签库取值即可
4)、现象:按照浏览器设置的语言信息来决定的
2、自定义链接国际化
1)、通过点击链接来改变国际化信息
2)、写一个类实现LocaleResolver接口,在resolveLocale内实现方法。
@Override
public Locale resolveLocale(HttpServletRequest req) {
String locale = req.getParameter("locale");
Locale l = null;
if(locale!=null && !locale.equals("")) {
l = new Locale(locale.split("_")[0], locale.split("_")[1]);
}else {
l = req.getLocale();
}
return l;
}
@Override
public void setLocale(HttpServletRequest arg0, HttpServletResponse arg1, Locale arg2) {
throw new UnsupportedOperationException(
"Cannot change HTTP accept header - use a different locale resolution strategy");
}
3)、在SpringMVC上配置LocalResovler,id是固定的,class选择自己定义的类。
<bean id="localeResolver" class="com.wx.springmvc.local.MyLocaleResolver"></bean>
3、使用SessionLocaleResolver
1)、SessionLocaleResolver是SpringMVC定义好的解析器
2)、在SpringMVC中配置
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
3)、在处理方法中给Session中设置Locale信息即可。
Locale l = null;
if(locale!=null && !locale.equals("")) {
l = new Locale(localeStr.split("_")[0], localeStr.split("_")[1]);
}else {
l = req.getLocale();
}
session.setAttribute(SessionLocaleResolver.class.getName() + ".LOCALE", l);
设置的属性名必须是SessionLocaleResolver.class.getName() + ".LOCALE",Value是Locale对象。
4、使用拦截器改变
1)、配置SpringMVC,SessionLocaleResolver可以改变Locale信息所以使用SessionLocaleResolver
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
2)、LocaleChangeInterceptor里的preHandle方法会从 request.getParameter(this.paramName);拿出区域信息,所以跳转时需要带上信息,而且key必须是locale。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws ServletException {
String newLocale = request.getParameter(this.paramName);
if (newLocale != null) {
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
if (localeResolver == null) {
throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
}
localeResolver.setLocale(request, response, StringUtils.parseLocaleString(newLocale));
}
// Proceed in any case.
return true;
}