Spring mvc国际化



Spring mvc国际化

最近工作中有幸接触到国际化,由于系统控制层框架用的是Spring mvc,所以直接用的Spring mvc国际化。

步骤:

1、Spring配置文件

<!– 国际化 –>
<bean id=”localeResolver” class=”org.springframework.web.servlet.i18n.SessionLocaleResolver” />
<bean id=”messageSource” class=”org.springframework.context.support.ReloadableResourceBundleMessageSource”>
<property name=”defaultEncoding” value=”UTF-8″ />
<property name=”useCodeAsDefaultMessage” value=”false” />
<property name=”fallbackToSystemLocale” value=”true” />
<property name=”basenames”>
<list>
<value>classpath:com/test/ecomm/i18n/main_message</value>
</list>
</property>

</bean>
2、properties文件

src/com/test/ecomm/i18n/ 目录下main_message_zh_CN.properties、main_message_en_US.properties等属性文件

ex:

login.head=\u65E0\u7EBFCMS\u7CFB\u7EDF
login.type =\u7C7B \u522B
3、页面

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

<spring:message code=”login.button”/>

4、web.xml

web.xml中


<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!– 一定要加载配置国际化的spring文件 –>
</param-value>
</context-param>

注:我在做的过程中遇到大家常见的错误 No message found under code ‘userlogin’ for locale ‘zh_CN’,就是因为红色部分没有做。
如何在java代码中获取国际化信息。

在Java代码中,获取国际化信息使用org.springframework.web.context.WebApplicationContext的getMessage方法,getMessage方法中需要使用当前的Locale信息,于是,怎样获取国际化信息集中在以下两点:

1. 如何获取WebApplicationContext?

2. 如何获取当前使用的Locale?

首先,如何获取WebApplicationContext呢,很简单,在任何一个类实现org.springframework.web.context.ServletContextAware并重写其setServletContext方法,如下所示:

[java] view plaincopy
public class MenuServiceImpl implements MenuService, ServletContextAware {
private ServletContext servletContext;

/*
* (non-Javadoc)
*
* @see
* org.springframework.web.context.ServletContextAware#setServletContext
* (javax.servlet.ServletContext)
*/
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}

public void test() {
WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
}
}
如此,我们取得了WebApplicationContext信息。

其次,如何获取当前使用的Locale信息?一行代码搞定:

[java] view plaincopy
Locale locale = RequestContextUtils.getLocaleResolver(request).resolveLocale(request);
WebApplicationContext信息和Locale信息都获取到后,再用一行代码获取国际化信息:
[java] view plaincopy
String menuName = applicationContext.getMessage(“text.menu.name”,null, “菜单A”, locale);
在getMessage中有四个变量,依次分别为message_*.properties文件中的key,key中{0}、{1}等对应的值,默认值和Locale。

官网地址:http://viralpatel.net/blogs/spring-3-mvc-internationalization-i18n-localization-tutorial-example/