SpringMVC 国际化

来源:互联网 发布:string数组倒序 编辑:程序博客网 时间:2024/06/12 18:58

步骤1:applicationContext.xml声明:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">        <property name="basename" value="/cn/et/lesson04/resource/I18n"></property></bean>

注意:id请使用 'messageSource',Spring容器获取这个对象时默认是以这个名字去获取的,不要乱动哈。basename指的是i18n的资源文件 , value填的是路径 + 配置文件前缀:


只加前缀就好了,zh_CN、en_GB是给程序自己识别的。


2.在控制层中装配MessageSource

 @Autowired        // 自动装配        private MessageSource ms;                @RequestMapping(value = "i18n" , method = RequestMethod.GET)        public String i18n(HttpServletResponse response , Locale locale) throws Exception{                response.setContentType("text/html;charset=UTF-8");                response.getOutputStream().write(ms.getMessage("key", null, locale).getBytes("UTF-8"));                return null;        }
getMessage方法是通过这个MessageSource对象获取properties中的消息,需要三个参数,第一个填消息的key,第二个可以为null,第三个是个Locale,Spring会根据请求头信息中的Accept-Language自动初始化好这个Locale,只需要在参数列表中声明即可。


资源文件:



浏览器中直接访问这个action,因为地区选的是中国(简体中文),输出结果自然是从zh_CN资源文件中获取的:



替换成en_GB:



en_GB是英式英语,美式英语则是en_US,按需求来定。输出结果:


下面做个小例子,国际化登录页面:


1.首先在需要国际化处理的页面中,引入标签库:



2.把需要国际化的地方,用message标签取出的值替换掉:



我在页面上用的是placeholder作为提示,所以直接把标签放在里边了。code属性指向的是国际化资源文件中的键:




重启一下tomcat,刷新页面即可:



将浏览器语言替换成中文,再刷新页面:


OK。


超链接实现国际化:

很多国际型的网站都允许通过一个请求参数控制网站的本地化,如www.xxx.com? locale=zh_CN返回对应中国大陆的本地化网页,而www.xxx.com?locale=en返回本地化为英语的网页。这样,网站使用者可以通过URL的控制返回不同本地化的页面,非常灵活,相应配置:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>

locale参数需要被临时存储在一个地方,这个地方就是session,通过sessionLocaleResolver实现,这个东西就是个偏好设置吧,意思就是只要不关闭浏览器,点击英文之后在网站的所有页面都显示英文,要结合下面这个拦截器使用:  

 <!--                 MVC本地化拦截器,中间定义localeChangeInterceptor,再定义                paramName,value就是页面超链接中的参数:                ${pageContext.request.contextPath}/reg?locale=zh_CN  默认是locale         -->        <mvc:interceptors>                <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">                        <property name="paramName" value="locale"></property>                </bean>        </mvc:interceptors>
请求需要通过action -> JSP才会生效,直接访问JSP,session中的偏好设置是不会生效的。

错误消息国际化:


  1. applicationContext.xml中指定资源文件的位置,实例化messageSource


2.mvc-servlet.xml中实例化验证器,注入messageSource:



3.指定验证器



4.Bean配置:



5.页面声明:


bean初始化默认以类名首字母小写作为bean的名称,如果Controller中没有用ModelAttribute修改过Bean名,直接就用类名小写.验证字段即可。


6.controller:



效果:



英文环境:


OK。

原创粉丝点击