zoukankan      html  css  js  c++  java
  • Java SpringMVC实现国际化整合案例分析(i18n) 专题

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

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

      wKioL1cswV2Q15n3AAAe96yM-S0863.png

    (2)配置web.xml:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <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:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?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文件:

    1
    2
    3
    4
    language.cn = u4e2du6587
    language.en = u82f1u6587
    internationalisation = u56fdu9645u5316
    welcome = u6b22u8fceu8bbfu95eeu201cu007au0069u0066u0061u006eu0067u0073u006bu0079u7684u4e2au4ebau535au5ba2u201duff0cu0055u0052u004cuff1au0068u0074u0074u0070u003au002fu002fu0077u0077u0077u002eu007au0069u0066u0061u006eu0067u0073u006bu0079u002eu0063u006e

    上面的中文描述是经过编码,不方便校对,可以通过这种方法解决:
    (1)设定messages_zh_CN.properties文件的编码为utf-8


    (2)完成上面的操作后,再确保这个文件中相关属性是正确的中文

    (3)可以看到title的值已经设置正确了


    ii)messages_en_US.properties文件:

    1
    2
    3
    4
    language.cn = Chinese
    language.en = English
    internationalisation = u0020Internationalisation
    welcome = Welcome to visit "zifangsky's personal blog",URLuff1ahttp://www.zifangsky.cn

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package cn.zifangsky.controller;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
     
    @Controller
    public class I18nController {
     
        @RequestMapping(value = "/hello")
        public ModelAndView welcome() {
            ModelAndView modelAndView = new ModelAndView("welcome");
     
            return modelAndView;
        }
     
    }

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

    (6)首页的index.jsp:

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

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

    (7)welcome.jsp:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <%@ 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"><spring:message code="language.cn" /></a> - <a href="?lang=en_US"><spring:message code="language.en" /></a>
        <h2>
            <spring:message code="welcome" />
        </h2>
        Locale: ${pageContext.response.locale }
    </body>
    </html>

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

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

    i)中文:

    ii)英文:

     
     http://blog.csdn.net/hj7jay/article/details/51383248
  • 相关阅读:
    UVA 1513
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:.geodatabase创建,创建时内容缺失问题总结
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
    《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用
    《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)
    《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境
    《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述
    《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用
    《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
  • 原文地址:https://www.cnblogs.com/softidea/p/6065768.html
Copyright © 2011-2022 走看看