• 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
  • 相关阅读:
    Oracle script to check the database growth
    VUE 项目本地没有问题,部署到服务器上提示错误
    Spring 最常用的几个注解
    Spring @Repository 注解
    VUE 如何将父组件中的数据传递到子组件中
    Spring @Autowired 注解静态变量
    VUE 如何格式化数字
    MySQL原理介绍
    大数据Hadoop之——DorisDB核心概念介绍与简单使用(StarRocks)
    Redis原理介绍
  • 原文地址:https://www.cnblogs.com/softidea/p/6065768.html
Copyright © 2020-2023  润新知