八、springMVC之国际化
作者:互联网
一、关于国际化使用场景:
1.在页面上能够根据浏览器语言设置的情况对文本(不是内容),时间,数值进行本地化处理,显示对应语言的版本;
2.可以在bean中获取国际化资源文件LOCAL对应的消息,即在bean中获取当前消息,对应的语言版本;
3.可以通过超链接切换locale,而不再依赖浏览器的语言设置情况
二、场景实现
1.目录结构:
2.配置
web.xml:只配置了springDispatcherServlet;
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 id="WebApp_ID" version="3.1"> 6 <servlet> 7 <servlet-name>springDispatcherServlet</servlet-name> 8 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 9 <!-- 配置DispatcherServletd 一个初始化参数:配置springmvc配置文件的位置和名称 --> 10 <!-- 实际上也可以不通过 contextConfigLocation 来配置Springmvc的配置文件,而是用默认的 即默认的配置文件为 11 /WEB-INF/<servlet-name>-servlet.xml 本项目默认位置配置文件即为: /WEB-INF/springDispatcherServlet-servlet.xml --> 12 <init-param> 13 <param-name>contextConfigLocation</param-name> 14 <param-value>classpath:spring.xml</param-value> 15 </init-param> 16 <!-- 表示springDispatcherServlet在加载的时候被创建 --> 17 <load-on-startup>1</load-on-startup> 18 </servlet> 19 20 <!-- Map all requests to the DispatcherServlet for handling --> 21 <servlet-mapping> 22 <servlet-name>springDispatcherServlet</servlet-name> 23 <url-pattern>/</url-pattern> 24 </servlet-mapping> 25 </web-app>View Code
spring.xml基础配置(适用于场景1、2):
包扫描的配置、视图解析器配置,国际化资源文件配置、<mvc:annotation-driven></mvc:annotation-driven>;
1 <context:component-scan base-package="handler"></context:component-scan> 2 <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 --> 3 <bean 4 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 5 <property name="prefix" value="/"></property> 6 <property name="suffix" value=".jsp"></property> 7 </bean> 8 9 <bean id="messageSource" 10 class="org.springframework.context.support.ResourceBundleMessageSource"> 11 <property name="basename" value="message"></property> 12 </bean> 13 14 <mvc:annotation-driven></mvc:annotation-driven>View Code
spring.xml配置(适用于场景3):
实现 通过超链接切换locale,而不再依赖浏览器的语言设置,需要配置
1 <!-- 配置SessionLocalResolver(locale切换语言配置1) --> 2 <bean id="localeResolver" 3 class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean> 4 <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> 5 <mvc:interceptors> 6 <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/> 7 </mvc:interceptors>
完整配置为:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 9 10 <context:component-scan base-package="handler"></context:component-scan> 11 <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 --> 12 <bean 13 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 14 <property name="prefix" value="/"></property> 15 <property name="suffix" value=".jsp"></property> 16 </bean> 17 18 <bean id="messageSource" 19 class="org.springframework.context.support.ResourceBundleMessageSource"> 20 <property name="basename" value="message"></property> 21 </bean> 22 23 <mvc:annotation-driven></mvc:annotation-driven> 24 25 <!-- 配置SessionLocalResolver(locale切换语言配置1) --> 26 <bean id="localeResolver" 27 class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean> 28 <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> 29 <mvc:interceptors> 30 <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/> 31 </mvc:interceptors> 32 33 </beans>View Code
3.国际化文件message_en_US.properties&message_zh_CN.properties
1 I18N.TEST_EN_US=TEST_EN_US
I18N.TEST_EN_US = 测试语言
4.EmployeeController.java
1 package handler; 2 3 import java.util.Locale; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.context.support.ResourceBundleMessageSource; 7 import org.springframework.stereotype.Controller; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 10 @RequestMapping("/emp") 11 @Controller 12 public class EmployeeController { 13 @Autowired 14 private ResourceBundleMessageSource messageSource; 15 16 @RequestMapping("/testLang1") 17 public String testLang1() { 18 return "forward:/index.jsp"; 19 } 20 21 @RequestMapping("/testLang") 22 public String testLang(Locale locale) { 23 String val = messageSource.getMessage("I18N.TEST_EN_US", null, locale); 24 System.out.println(val); 25 return "forward:/index.jsp"; 26 } 27 28 }
5.index.jsp
分别使用 fmt 和spring tag;两种标签实现的结果是一致的,可以任意选择一种;
场景1、2测试页面;
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@page import="java.util.*"%> 4 <%@ taglib prefix="s" uri="http://www.springframework.org/tags"%> 5 <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 6 <!DOCTYPE html> 7 <html> 8 <head> 9 <meta charset="UTF-8"> 10 <title>Insert title here</title> 11 </head> 12 <body> 13 <p> 14 <fmt:bundle basename="message"> 15 <fmt:message key="I18N.TEST_EN_US"></fmt:message> 16 </fmt:bundle> 17 </p> 18 19 <p><s:message code="I18N.TEST_EN_US"></s:message></p> 20 21 </body> 22 </html>View Code
场景3的测试页面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@page import="java.util.*"%> 4 <%@ taglib prefix="s" uri="http://www.springframework.org/tags"%> 5 <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 6 <!DOCTYPE html> 7 <html> 8 <head> 9 <meta charset="UTF-8"> 10 <title>Insert title here</title> 11 </head> 12 <body> 13 <p> 14 <fmt:setLocale value="${param.locale}"/> 15 <fmt:bundle basename="message"> 16 <fmt:message key="I18N.TEST_EN_US"></fmt:message> 17 </fmt:bundle> 18 </p> 19 20 <p><s:message code="I18N.TEST_EN_US"></s:message></p> 21 22 </body> 23 </html>
运行结果:
场景1,2的配置方式下的运行结果:
访问:http://localhost:8080/DataOperate/emp/testLang1,此时chrome浏览器语言为中文,测试页面显示中文,如下图且控制台;语言切换到英语时,显示为英语;,显示如下图;
访问:http://localhost:8080/DataOperate/emp/testLang,此时chrome浏览器语言为中文,测试页面显示中文且控制台TEST_EN_US,语言切换到英语时,显示为英语,且控制台打印:测试语言;
场景3的配置方式下的运行结果:
访问http://localhost:8080/DataOperate/emp/testLang?locale=en_US 页面显示英文;访问http://localhost:8080/DataOperate/emp/testLang?locale=zh_CN 页面显示中文;
标签:xml,12,14,springMVC,US,locale,国际化,页面 来源: https://www.cnblogs.com/lixiuming521125/p/16021546.html