Spring3 MVC国际化和本地化教程

这个部分,讨论Spring3.0 MVC的国际化(I18N)和本地化(L10N)。

什么是i18n和L10n?

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

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

目标

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



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

消息资源文件

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



文件夹中创建两个文件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 </p><p>label.menu=Menu<br />label.title=Contact Manager </p><p>label.footer=© ViralPatel.net<br />

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  </p><p>label.title=Kontakt Manager<br />label.menu=Menü </p><p>label.footer=© ViralPatel.net<br />

配置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 /><bean id="messageSource"<br />    class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> </p><property name="basename" value="classpath:messages" /><property name="defaultEncoding" value="UTF-8"/></bean> </p><p><bean id="localeChangeInterceptor"<br />    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> </p><property name="paramName" value="lang" /></bean> </p><p><bean id="localeResolver"<br />    class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> </p><property name="defaultLocale" value="en"/></bean> </p><p><bean id="handlerMapping"<br />    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> </p><property name="interceptors">        <ref bean="localeChangeInterceptor" />    </property>


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

修改视图-JSP

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

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

WebContent/WEB-INF/jsp/menu.jsp

<br /><%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> </p><p><spring:message code="label.menu"/></p><p>

WebContent/WEB-INF/jsp/menu.jsp

<br /><%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>   </p><p><spring:message code="label.menu"/></p><p>

WebConteng/WEB-INF/jsp/footer.jsp

<br />?</p><p>	<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> </p><p><spring:message code="label.footer"/><br />

WebContent/WEB-INF/jsp/contact.jsp

<br /><%@taglib uri="http://www.springframework.org/tags" prefix="spring"%><br /><%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%><br /><html><br /><head> </p><p></head><br /><body> </p><form:form method="post" action="addContact.html"><table><tr><td><form:label path="firstname"><spring:message code="label.firstname"/></form:label></td><td><form:input path="firstname" /></td></tr><tr><td><form:label path="lastname"><spring:message code="label.lastname"/></form:label></td><td><form:input path="lastname" /></td></tr><tr><td><form:label path="lastname"><spring:message code="label.email"/></form:label></td><td><form:input path="email" /></td></tr><tr><td><form:label path="lastname"><spring:message code="label.telephone"/></form:label></td><td><form:input path="telephone" /></td></tr><tr><td colspan="2"><input type="submit" value="<spring:message code="label.addcontact"/>“/>        </td></tr></table></form:form></body><br />


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

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

</p><property name="paramName" value="lang" />


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

完成

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





下一步

展示如何添加国际化i18n和本地化L10n。使用了LocaleChangeInterceptor截取本地的改变,并ReloadableResourceBundleMessageSource类添加消息资源到属性中。下一步讨论Spring MVC的主题,如何实施。
原文地址: http://www.easyigloo.org/?p=1364

你可能感兴趣的:(spring,mvc,input,语言,Path,resources)