Spring3 MVC国际化和本地化教程

本文介绍如何在Spring MVC应用中实现国际化(i18n)与本地化(L10n),包括配置消息资源文件、使用拦截器处理语言切换及在视图中展示多语言内容。

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

 

欢迎到本系列教程的第5章节,前一篇文章中看到了如何配置Tiles框架。在bean定义中使用了org.springframework.web.servlet.view.tiles2.TilesConfigurer类定义了tiles配置文件。

这个部分,讨论Spring3.0 MVC的国际化(I18N)和本地化(L10N)。建议下载前面的文章和代码。

什么是i18n和L10n?

国际化和本地化意味着调试软件适应不同语言和地区。国际化是设计软件应用的过程,这样应用才能被适用于不同语言和地区,不需要做更改。本地化是添加地区特定的组件和翻译文本,使得国际化软件适合特定地区或语言。

i18n是Internation首字母和尾字母的组成,字母长度组成的。

目标

我们的目标是添加国际化和本地化支持到Spring MVC应用中。一旦应用完成之后,应用的运行应该如下所示:

国际化,本地化,spring,j2ee

添加两种语言的支持:英语和德语。决定于用户浏览器的本地设置,将会选择合适的语言。用户也能从应用的右上角选择语言。

消息资源文件

创建两个属性文件,包含了要显示在web中的所有消息。这些文件保存在“resources”源文件中。项目中创建一个源文件夹,右击项目名称>New>Source Folder,然后命名为resources。

资源文件,spring,j2ee

文件夹中创建两个文件messages_en.properties和messages_de.properties。拷贝下面内容到文件中。

resources/messages_en.properties

<br />label.firstname=First Name<br />label.lastname=Last Name<br />label.email=Email<br />label.telephone=Telephone<br />label.addcontact=Add Contact 

label.menu=Menu
label.title=Contact Manager

label.footer=© ViralPatel.net

resources/messages_de.properties

<br />label.firstname=Vorname<br />label.lastname=Familiename<br />label.email=Email<br />label.telephone=Telefon<br />label.addcontact=Addieren Kontakt  

label.title=Kontakt Manager
label.menu=Menü

label.footer=© ViralPatel.net

配置Spring MVC中的国际化和本地化

已经创建了应用的消息资源属性。需要在spring配置文件中声明这些文件。使用类org.springframework.context.support.ReloadableResourceBundleMessageSource,定义消息资源。

另外,提供一个功能能让用户选择应用的语言。这通过
org.springframework.web.servlet.i18n.LocaleChangeInterceptor类实现。LocaleChangeInterceptor类将会截取所有locale中的任何变化。这些变换将会保存到cookie中,以被将来请求。org.springframework.web.servlet.i18n.CookieLocaleResolver类将被用于在cookie中保存本地化信息。

添加下面代码到spring-servlet.xml文件中

WebContent/WEB-INF/spring-servlet.xml

<br />&lt;bean id=&quot;messageSource&quot;<br />    class=&quot;org.springframework.context.support.ReloadableResourceBundleMessageSource&quot;&gt; 

<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">

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

<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">



注意到,上面的配置中,定义了basename属性,值为classpath:messages。这样,就能使用应用中定义的消息资源。

修改视图-JSP

已经创建了两个消息资源文件,并在Spring MVC中配置,我将在JSP文件中使用这些消息。打开所有的JSP文件,更新如下代码。

WebContent/WEB-INF/jsp/head.jsp
<br />&lt;%@taglib uri=&quot;http://www.springframework.org/tags&quot; prefix=&quot;spring&quot;%&gt; <h3><spring:message code="label.title"></spring:message></h3><p><span style="float: right"><br />    <a href="?lang=en">en</a><br />    |<br />    <a href="?lang=de">de</a><br /></span><br /></p>

WebContent/WEB-INF/jsp/menu.jsp

<br />&lt;%@taglib uri=&quot;http://www.springframework.org/tags&quot; prefix=&quot;spring&quot;%&gt; 

WebContent/WEB-INF/jsp/menu.jsp

<br />&lt;%@taglib uri=&quot;http://www.springframework.org/tags&quot; prefix=&quot;spring&quot;%&gt;   

WebConteng/WEB-INF/jsp/footer.jsp

<br />?

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>


WebContent/WEB-INF/jsp/contact.jsp

<br />&lt;%@taglib uri=&quot;http://www.springframework.org/tags&quot; prefix=&quot;spring&quot;%&gt;<br />&lt;%@taglib uri=&quot;http://www.springframework.org/tags/form&quot; prefix=&quot;form&quot;%&gt;<br /><br /><br /> 

  
  
  
  
<input type="submit" value="“/>



上面JSP文件中,使用了标签显示了从资源绑定中的消息。

另一件事,是在header.jsp文件中,指定了两个链接,选择语言。链接设置了请求参数“?lang=”,当用户点击这个链接时,Spring通过LocaleChangeInterceptor识别这个参数,相应地更改了本地信息。spring-servlet.xml文件中配置LocaleChangeInterceptor,指定了属性“paramName”,值为“lang”。

 
   



因此Spring框架将会从请求中查找名称为“lang”的参数。

完成

添加了国际化和本地化支持之后,执行项目,快捷键Alt+Shift+X,R。

国际化,本地化,spring,mvc,j2ee

国际化,本地化,spring,j2ee

下一步

展示如何添加国际化i18n和本地化L10n。使用了LocaleChangeInterceptor截取本地的改变,并ReloadableResourceBundleMessageSource类添加消息资源到属性中。下一步讨论Spring MVC的主题,如何实施。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值