欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解SpringMVC學(xué)習(xí)系列之國際化

 更新時間:2017年07月03日 10:41:17   作者:Erola  
這篇文章主要介紹了詳解SpringMVC學(xué)習(xí)系列之國際化,詳細的介紹了關(guān)于瀏覽器,Session,Cookie,URL請求的國際化的實現(xiàn),有興趣的可以了解一下

在系列(7)中我們講了數(shù)據(jù)的格式化顯示,Spring在做格式化展示的時候已經(jīng)做了國際化處理,那么如何將我們網(wǎng)站的其它內(nèi)容(如菜單、標題等)做國際化處理呢?這就是本篇要將的內(nèi)容—>國際化。

一.基于瀏覽器請求的國際化實現(xiàn):

首先配置我們項目的springservlet-config.xml文件添加的內(nèi)容如下:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  <!-- 國際化信息所在的文件名 -->           
  <property name="basename" value="messages" />  
  <!-- 如果在國際化資源文件中找不到對應(yīng)代碼的信息,就用這個代碼作為名稱 -->        
  <property name="useCodeAsDefaultMessage" value="true" />      
</bean>

在com.demo.web.controllers包中添加GlobalController.java內(nèi)容如下:

package com.demo.web.controllers;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.support.RequestContext;
import com.demo.web.models.FormatModel;

@Controller
@RequestMapping(value = "/global")
public class GlobalController {
  
  @RequestMapping(value="/test", method = {RequestMethod.GET})
  public String test(HttpServletRequest request,Model model){
    if(!model.containsAttribute("contentModel")){
      
      //從后臺代碼獲取國際化信息
      RequestContext requestContext = new RequestContext(request);
      model.addAttribute("money", requestContext.getMessage("money"));
      model.addAttribute("date", requestContext.getMessage("date"));

      
      FormatModel formatModel=new FormatModel();

      formatModel.setMoney(12345.678);
      formatModel.setDate(new Date());
      
      model.addAttribute("contentModel", formatModel);
    }
    return "globaltest";
  }
  
}

這里展示模型還用系列(7)中的作為演示。

在項目中的源文件夾resources中添加messages.properties、messages_zh_CN.properties、messages_en_US.properties三個文件,其中messages.properties、messages_zh_CN.properties里面的"money", "date",為中文,messages_en_US.properties里面的為英文。

在views文件夾中添加globaltest.jsp視圖,內(nèi)容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

 
  下面展示的是后臺獲取的國際化信息:<br/>
  ${money}<br/>
  ${date}<br/>

  下面展示的是視圖中直接綁定的國際化信息:<br/>
  <spring:message code="money"/>:<br/>
  <spring:eval expression="contentModel.money"></spring:eval><br/>
  <spring:message code="date"/>:<br/>
  <spring:eval expression="contentModel.date"></spring:eval><br/>
  
</body>
</html>

運行測試:

更改瀏覽器語言順序,刷新頁面:

二.基于Session的國際化實現(xiàn):

在項目的springservlet-config.xml文件添加的內(nèi)容如下(第一種時添加的內(nèi)容要保留):

<mvc:interceptors> 
  <!-- 國際化操作攔截器 如果采用基于(請求/Session/Cookie)則必需配置 --> 
  <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> 
</mvc:interceptors> 

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

更改globaltest.jsp視圖為如下內(nèi)容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <a href="test?langType=zh" rel="external nofollow" >中文</a> | <a href="test?langType=en" rel="external nofollow" >英文</a><br/>

  下面展示的是后臺獲取的國際化信息:<br/>
  ${money}<br/>
  ${date}<br/>

  下面展示的是視圖中直接綁定的國際化信息:<br/>
  <spring:message code="money"/>:<br/>
  <spring:eval expression="contentModel.money"></spring:eval><br/>
  <spring:message code="date"/>:<br/>
  <spring:eval expression="contentModel.date"></spring:eval><br/>
  
</body>
</html>

更改GlobalController.java為如下內(nèi)容:

package com.demo.web.controllers;

import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.support.RequestContext;
import com.demo.web.models.FormatModel;

@Controller
@RequestMapping(value = "/global")
public class GlobalController {
  
  @RequestMapping(value="/test", method = {RequestMethod.GET})
  public String test(HttpServletRequest request,Model model, @RequestParam(value="langType", defaultValue="zh") String langType){
    if(!model.containsAttribute("contentModel")){
      
      if(langType.equals("zh")){
        Locale locale = new Locale("zh", "CN"); 
        request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); 
      }
      else if(langType.equals("en")){
        Locale locale = new Locale("en", "US"); 
        request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
      }
      else 
        request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
      
      //從后臺代碼獲取國際化信息
      RequestContext requestContext = new RequestContext(request);
      model.addAttribute("money", requestContext.getMessage("money"));
      model.addAttribute("date", requestContext.getMessage("date"));

      
      FormatModel formatModel=new FormatModel();

      formatModel.setMoney(12345.678);
      formatModel.setDate(new Date());
      
      model.addAttribute("contentModel", formatModel);
    }
    return "globaltest";
  }
  
}

運行測試:

三.基于Cookie的國際化實現(xiàn):

把實現(xiàn)第二種方法時在項目的springservlet-config.xml文件中添加的

復(fù)制代碼 代碼如下:

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

注釋掉,并添加以下內(nèi)容:

復(fù)制代碼 代碼如下:

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

更改GlobalController.java為如下內(nèi)容:

package com.demo.web.controllers;

import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
//import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.support.RequestContext;

import com.demo.web.models.FormatModel;

@Controller
@RequestMapping(value = "/global")
public class GlobalController {
  
  @RequestMapping(value="/test", method = {RequestMethod.GET})
  public String test(HttpServletRequest request, HttpServletResponse response, Model model, @RequestParam(value="langType", defaultValue="zh") String langType){
    if(!model.containsAttribute("contentModel")){
      
      /*if(langType.equals("zh")){
        Locale locale = new Locale("zh", "CN"); 
        request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); 
      }
      else if(langType.equals("en")){
        Locale locale = new Locale("en", "US"); 
        request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
      }
      else 
        request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());*/
      
      if(langType.equals("zh")){
        Locale locale = new Locale("zh", "CN"); 
        //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
        (new CookieLocaleResolver()).setLocale (request, response, locale);
      }
      else if(langType.equals("en")){
        Locale locale = new Locale("en", "US"); 
        //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
        (new CookieLocaleResolver()).setLocale (request, response, locale);
      }
      else 
        //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
        (new CookieLocaleResolver()).setLocale (request, response, LocaleContextHolder.getLocale());
      
      //從后臺代碼獲取國際化信息
      RequestContext requestContext = new RequestContext(request);
      model.addAttribute("money", requestContext.getMessage("money"));
      model.addAttribute("date", requestContext.getMessage("date"));

      
      FormatModel formatModel=new FormatModel();

      formatModel.setMoney(12345.678);
      formatModel.setDate(new Date());
      
      model.addAttribute("contentModel", formatModel);
    }
    return "globaltest";
  }
  
}

運行測試:

關(guān)于<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />3個屬性的說明(可以都不設(shè)置而用其默認值):

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
  <!-- 設(shè)置cookieName名稱,可以根據(jù)名稱通過js來修改設(shè)置,也可以像上面演示的那樣修改設(shè)置,默認的名稱為 類名+LOCALE(即:org.springframework.web.servlet.i18n.CookieLocaleResolver.LOCALE-->
  <property name="cookieName" value="lang"/>
  <!-- 設(shè)置最大有效時間,如果是-1,則不存儲,瀏覽器關(guān)閉后即失效,默認為Integer.MAX_INT-->
  <property name="cookieMaxAge" value="100000">
  <!-- 設(shè)置cookie可見的地址,默認是“/”即對網(wǎng)站所有地址都是可見的,如果設(shè)為其它地址,則只有該地址或其后的地址才可見-->
  <property name="cookiePath" value="/">
</bean>

四.基于URL請求的國際化的實現(xiàn):

首先添加一個類,內(nèi)容如下:

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.LocaleResolver;

public class MyAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver {

  private Locale myLocal;

  public Locale resolveLocale(HttpServletRequest request) {
    return myLocal;
  } 

  public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    myLocal = locale;
  }
 
}

然后把實現(xiàn)第二種方法時在項目的springservlet-config.xml文件中添加的

復(fù)制代碼 代碼如下:

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

注釋掉,并添加以下內(nèi)容:

<bean id="localeResolver" class="xx.xxx.xxx.MyAcceptHeaderLocaleResolver"/>

“xx.xxx.xxx”是剛才添加的MyAcceptHeaderLocaleResolver 類所在的包名。

保存之后就可以在請求的URL后附上 locale=zh_CN 或 locale=en_US 如 http://xxxxxxxx?locale=zh_CN 來改變語言了,具體這里不再做演示了。

國際化部分的內(nèi)容到此結(jié)束。 

代碼下載:SpringMVCi18n_jb51.rar

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java常見的轉(zhuǎn)義字符舉例詳解

    Java常見的轉(zhuǎn)義字符舉例詳解

    在java字符常量中,反斜杠(\)是一個特殊的字符,被稱為轉(zhuǎn)義字符,它的作用是用來轉(zhuǎn)義后面一個字符,這篇文章主要給大吉介紹了關(guān)于Java常見轉(zhuǎn)義字符的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Java 操作Properties配置文件詳解

    Java 操作Properties配置文件詳解

    本篇文章主要介紹了Java 操作Properties配置文件詳解,詳細的介紹了Properties和主要方法,有興趣的可以了解下
    2017-05-05
  • SpringBoot URL帶有特殊字符([]/{}等),報400錯誤的解決

    SpringBoot URL帶有特殊字符([]/{}等),報400錯誤的解決

    這篇文章主要介紹了SpringBoot URL帶有特殊字符([]/{}等),報400錯誤的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JAVA抽象類,接口,內(nèi)部類詳解

    JAVA抽象類,接口,內(nèi)部類詳解

    這篇文章主要給大家介紹了關(guān)于Java中抽象類,接口,內(nèi)部類的相關(guān)資料,文中通過示例代碼介紹的非常詳細,,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • 歸并排序的實現(xiàn)代碼與思路

    歸并排序的實現(xiàn)代碼與思路

    歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用。
    2013-03-03
  • 詳解Java實現(xiàn)LRU緩存

    詳解Java實現(xiàn)LRU緩存

    這篇文章主要介紹了詳解Java實現(xiàn)LRU緩存,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java的Struts框架中的if/else標簽使用詳解

    Java的Struts框架中的if/else標簽使用詳解

    這篇文章主要介紹了Java的Struts框架中的if/else標簽使用詳解,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Java 遍歷取出Map集合key-value數(shù)據(jù)的4種方法

    Java 遍歷取出Map集合key-value數(shù)據(jù)的4種方法

    這篇文章主要介紹了Java 遍歷取出Map集合key-value數(shù)據(jù)的4種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java 多態(tài)性詳解及常見面試題

    java 多態(tài)性詳解及常見面試題

    這篇文章主要介紹了java 多態(tài)性詳解及常見面試題的相關(guān)資料,這里對java 的多態(tài)性做了資料整理,并列舉常見的關(guān)于多態(tài)性的面試題,需要的朋友可以參考下
    2016-11-11
  • Java的二叉樹排序以及遍歷文件展示文本格式的文件樹

    Java的二叉樹排序以及遍歷文件展示文本格式的文件樹

    這篇文章主要介紹了Java的二叉樹排序以及遍歷文件展示文本格式的文件樹,是對二叉樹結(jié)構(gòu)學(xué)習(xí)的兩個很好的實踐,需要的朋友可以參考下
    2015-11-11

最新評論