SpringMVC国际化

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;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值