SpringMVC 国际化

本文介绍如何在Spring MVC项目中实现国际化功能,包括配置国际化资源文件、使用MessageSource对象获取不同语言的消息、实现登录页面的国际化以及通过URL参数控制网站本地化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

步骤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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值