Spring国际化

   国际化(Internationalization)有时候被简称为i18n,因为有18个字母在国际化的英文单词的字母i和n之间。Spring对国际化的支持示例如下所示。

   需要将spring.tld放到工程的lib目录下,这样才能JSP才能正常使用spring:message标签。 

   web.xml中设置加启动时就要载配置文件applicationContext.xml

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   classpath:applicationContext.xml
  </param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

   在applicationContext.xml中注册资源文件处理类。这里可以注册一个或者多个资源文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 
   <bean id="messageSource"  class="org.springframework.context.support.ResourceBundleMessageSource">

<!-- <property name="basename" value="messages"/> --> 
   
    <property name = "basenames">
       <list>
        <value>messages</value>
        <value>messages2</value>
       </list>
    </property>
</bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> </beans>

  messageSource指明了资源文件的路径,这里的路径是根目录下的名为messages的资源文件件。

  CookieLocaleResolver是资源文件处理类,资源文件处理类有以下三种:

  1. 基于session的

  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>

   2. 基于请求的

  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"/>
   3.基于cookie的

  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />

  以上三种处理器理论上配置任意一个就可以,使用第一种和第三种比较常见。

     第一与第三个用法相同,只不过前者使用session,session过期就需要重新设置,而后者使用cookie,可以根据项目的具体情况进行选择。

    创建资源文件messages_zh.properties和messages_en.properties:    

messages_zh.properties内容如下: 
main.title=你好 

messages_en.properties内容如下:
main.title=Hello World! 

     

      JSP测试页面test.jsp如下:     

<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="WEB-INF/lib/spring.tld"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Spring国际化</title>
  </head>
  <body> 
    <spring:message code="main.title" /><br>
    <input type="button" value='<spring:message code="main.title" />'/><br>
  </body> 
</html>

    在Java代码中使用的例子如下:

//FileSystemXmlApplicationContext与ClassPathXmlApplicationContext的区别,前者需要写路径
  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    
  System.out.println(ctx.getMessage("main.title", null, Locale.getDefault()));

  System.out.println(ctx.getMessage("main.title", null, Locale.US));
原文地址:https://www.cnblogs.com/lnlvinso/p/4100174.html