首页 > 编程 > Java > 正文

Java SpringMVC实现国际化整合案例分析(i18n)

2019-11-26 12:24:26
字体:
来源:转载
供稿:网友

所谓国际化就是支持多种语言,web应用在不同的浏览环境中可以显示出不同的语言,比如说汉语、英语等。下面我将以具体的实例来举例说明:

(1)新建动态Java web项目,并导入几个SpringMVC必需的几个jar包,项目结构图和所需jar包如下:

wKioL1cswV2Q15n3AAAe96yM-S0863.png

(2)配置web.xml:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"     version="3.1">   <servlet>    <servlet-name>springmvc</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <load-on-startup>1</load-on-startup>  </servlet>   <servlet-mapping>    <servlet-name>springmvc</servlet-name>    <url-pattern>*.html</url-pattern>  </servlet-mapping>     <filter>    <filter-name>characterEncodingFilter</filter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    <init-param>      <param-name>encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>characterEncodingFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping> </web-app>

常规配置,没有什么特殊的地方,不多解释

(3)SpringMVC的配置文件springmvc-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  xmlns:mvc="http://www.springframework.org/schema/mvc"  xsi:schemaLocation="http://www.springframework.org/schema/beans               http://www.springframework.org/schema/beans/spring-beans-4.0.xsd               http://www.springframework.org/schema/context              http://www.springframework.org/schema/context/spring-context-4.0.xsd              http://www.springframework.org/schema/mvc               http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">   <context:component-scan base-package="cn.zifangsky.* *.controller" />   <context:annotation-config /> <!-- 激活Bean中定义的注解 -->  <mvc:annotation-driven />   <!-- 视图相关配置 -->  <bean    class="org.springframework.web.servlet.view.InternalResourceViewResolver">    <property name="prefix" value="/WEB-INF/pages/" /> <!-- 视图前缀 -->    <property name="suffix" value=".jsp" /> <!-- 视图后缀 -->  </bean>  <!-- 存储区域设置信息 -->  <bean id="localeResolver"    class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />  <!-- 国际化资源文件 -->  <bean id="messageSource"    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">    <property name="basename" value="classpath:messages" />  </bean>   <mvc:interceptors>    <bean id="localeChangeInterceptor"      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">      <property name="paramName" value="lang" />    </bean>  </mvc:interceptors></beans>

在上面的配置中,SessionLocaleResolver类通过一个预定义会话名将区域化信息存储在会话中。紧接着的“messageSource”配置的是国际化资源文件的路径,”classpath:messages”指的是classpath路径下的messages_zh_CN.properties文件和messages_en_US.properties文件。在这个配置文件的最后配置的是一个拦截器,该拦截器通过名为”lang”的参数来拦截HTTP请求,使其重新设置页面的区域化信息

(4)两个国际化资源文件:

i)messages_zh_CN.properties文件:

language.cn = /u4e2d/u6587language.en = /u82f1/u6587internationalisation = /u56fd/u9645/u5316welcome = /u6b22/u8fce/u8bbf/u95ee/u201c/u007a/u0069/u0066/u0061/u006e/u0067/u0073/u006b/u0079/u7684/u4e2a/u4eba/u535a/u5ba2/u201d/uff0c/u0055/u0052/u004c/uff1a/u0068/u0074/u0074/u0070/u003a/u002f/u002f/u0077/u0077/u0077/u002e/u007a/u0069/u0066/u0061/u006e/u0067/u0073/u006b/u0079/u002e/u0063/u006e

ii)messages_en_US.properties文件:

language.cn = Chineselanguage.en = Englishinternationalisation = /u0020Internationalisationwelcome = Welcome to visit "zifangsky's personal blog",URL/uff1ahttp://www.zifangsky.cn

注:上面一些看起来“乱码”的地方实际上是经过Unicode编码的

(5)后台处理请求的controller:

package cn.zifangsky.controller; import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView; @Controllerpublic class I18nController {   @RequestMapping(value = "/hello")  public ModelAndView welcome() {    ModelAndView modelAndView = new ModelAndView("welcome");     return modelAndView;  } }

这个controller很简单,就是转到一个视图页面welcome.jsp

(6)首页的index.jsp:

<% response.sendRedirect("hello.html"); %>

意思很简单,就是项目启动之后就请求htllo.html,也就是让controller中的welcome方法处理这个请求

(7)welcome.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><%@taglib prefix="mvc" uri="http://www.springframework.org/tags/form" %><%@taglib prefix="spring" uri="http://www.springframework.org/tags" %><html><head><title>SpringMVC<spring:message code="internationalisation" /></title></head><body>  Language: <a href="?lang=zh_CN" rel="external nofollow" ><spring:message code="language.cn" /></a> - <a href="?lang=en_US" rel="external nofollow" ><spring:message code="language.en" /></a>  <h2>    <spring:message code="welcome" />  </h2>  Locale: ${pageContext.response.locale }</body></html>

可以看出,在需要使用国际化处理的地方都使用了spring的message标签,code属性对应资源文件中的“键”名称

(8)最后的显示效果如下:

i)中文:

ii)英文:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表