SpringMVC学習シリーズ(8) 国際コードの詳しい紹介

黄舟
リリース: 2017-03-03 11:04:46
オリジナル
1656 人が閲覧しました

シリーズ (7) では、Spring は表示をフォーマットするときにすでに国際化処理を行っています。では、Web サイトの他のコンテンツ (メニュー、タイトルなど) を国際化するにはどうすればよいでしょうか。この記事の内容→国際化です。

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介. ブラウザー要求に基づく国際化の実装:

まず、プロジェクトの springservlet-config.xml ファイルを構成し、次の内容を追加します:

<bean>
    <!-- 国际化信息所在的文件名 -->                     
    <property></property>   
    <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称  -->               
    <property></property>           </bean>
ログイン後にコピー


com.demo.web.controllers パッケージに GlobalController を追加します。 Java の内容は次のとおりです。

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(SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介.SpringMVC学習シリーズ(8) 国際コードの詳しい紹介78);
            formatModel.setDate(new Date());
            
            model.addAttribute("contentModel", formatModel);
        }        return "globaltest";
    }
    
}
ログイン後にコピー


ここで示されているモデルは、シリーズ (7) のモデルもデモンストレーションとして使用しています。

messages.properties、messages_zh_CN.properties、messages_en_US.properties の SpringMVC学習シリーズ(8) 国際コードの詳しい紹介 つのファイルをプロジェクトのソース フォルダー リソースに追加します。このうち、messages.properties とmessages_zh_CN.properties の「money」と「date」は中国語のmessages_en_USです。プロパティ内の単語は英語です。

次の内容を含む globaltest.jsp ビューを views フォルダーに追加します:

nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(8) 国際コードの詳しい紹介C//DTD HTML SpringMVC学習シリーズ(8) 国際コードの詳しい紹介.0SpringMVC学習シリーズ(8) 国際コードの詳しい紹介 Transitional//EN" "http://www.wSpringMVC学習シリーズ(8) 国際コードの詳しい紹介.org/TR/htmlSpringMVC学習シリーズ(8) 国際コードの詳しい紹介/loose.dtd"><meta><title>Insert title here</title>

    下面展示的是后台获取的国际化信息:<br>
    ${money}<br>
    ${date}<br>

    下面展示的是视图中直接绑定的国际化信息:<br>
    <message></message>:<br>
    <eval></eval><br>
    <message></message>:<br>
    <eval></eval><br>
    
ログイン後にコピー


テストを実行します:

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介

ブラウザーの言語順序を変更し、ページを更新します:

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介セッション インターナショナルの実装に基づいて:

次のコンテンツをプロジェクトの springservlet-config.xml ファイルに追加します (最初のメソッドで追加されたコンテンツは保持する必要があります):

<interceptors>  
    <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> 
    <bean></bean>  </interceptors>  <bean></bean>
ログイン後にコピー


globaltest.jsp ビューを次のように変更します。次の内容:

nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(8) 国際コードの詳しい紹介C//DTD HTML SpringMVC学習シリーズ(8) 国際コードの詳しい紹介.0SpringMVC学習シリーズ(8) 国際コードの詳しい紹介 Transitional//EN" "http://www.wSpringMVC学習シリーズ(8) 国際コードの詳しい紹介.org/TR/htmlSpringMVC学習シリーズ(8) 国際コードの詳しい紹介/loose.dtd"><meta><title>Insert title here</title>
    <a>中文</a> | <a>英文</a><br>

    下面展示的是后台获取的国际化信息:<br>
    ${money}<br>
    ${date}<br>

    下面展示的是视图中直接绑定的国际化信息:<br>
    <message></message>:<br>
    <eval></eval><br>
    <message></message>:<br>
    <eval></eval><br>
    
ログイン後にコピー


GlobalController.java を次の内容に変更します:

package com.demo.web.controllers;import java.util.Date;import java.util.Locale;import javax.servlet.http.HttpServletRequest;import org.springframework.context.iSpringMVC学習シリーズ(8) 国際コードの詳しい紹介8n.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.iSpringMVC学習シリーズ(8) 国際コードの詳しい紹介8n.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(SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介.SpringMVC学習シリーズ(8) 国際コードの詳しい紹介78);
            formatModel.setDate(new Date());
            
            model.addAttribute("contentModel", formatModel);
        }        return "globaltest";
    }
    
}
ログイン後にコピー


テストを実行します:

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介. Cookie ベースの国際化実装:

を実装するプロジェクトの SpringMVC学習シリーズ(8) 国際コードの詳しい紹介 番目のメソッド springservlet-config.xml ファイルに追加された

<bean></bean>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー


をコメントアウトし、次の内容を追加します:

<bean></bean>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー


GlobalController.java を次の内容に変更します:

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.iSpringMVC学習シリーズ(8) 国際コードの詳しい紹介8n.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.iSpringMVC学習シリーズ(8) 国際コードの詳しい紹介8n.CookieLocaleResolver;//import org.springframework.web.servlet.iSpringMVC学習シリーズ(8) 国際コードの詳しい紹介8n.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(SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介SpringMVC学習シリーズ(8) 国際コードの詳しい紹介.SpringMVC学習シリーズ(8) 国際コードの詳しい紹介78);
            formatModel.setDate(new Date());
            
            model.addAttribute("contentModel", formatModel);
        }        return "globaltest";
    }
    
}
ログイン後にコピー

运行测试:

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介

SpringMVC学習シリーズ(8) 国際コードの詳しい紹介

关于bean id="localeResolver" class="org.springframework.web.servlet.iSpringMVC学習シリーズ(8) 国際コードの詳しい紹介8n.CookieLocaleResolver" />SpringMVC学習シリーズ(8) 国際コードの詳しい紹介个属性的说明(可以都不设置而用其默认值):

<bean>
    <!-- 设置cookieName名称,可以根据名称通过js来修改设置,也可以像上面演示的那样修改设置,默认的名称为 类名+LOCALE(即:org.springframework.web.servlet.iSpringMVC学習シリーズ(8) 国際コードの詳しい紹介8n.CookieLocaleResolver.LOCALE-->
    <property></property>
    <!-- 设置最大有效时间,如果是-SpringMVC学習シリーズ(8) 国際コードの詳しい紹介,则不存储,浏览器关闭后即失效,默认为Integer.MAX_INT-->
    <property>
    <!-- 设置cookie可见的地址,默认是“/”即对网站所有地址都是可见的,如果设为其它地址,则只有该地址或其后的地址才可见-->
    <property></property></property></bean>
ログイン後にコピー


四.基于URL请求的国际化的实现:

首先添加一个类,内容如下:

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;
    }
  
}
ログイン後にコピー


然后把实现第二种方法时在项目的springservlet-config.xml文件中添加的

<bean></bean>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー


注释掉,并添加以下内容:

<bean></bean>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー


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

保存之后就可以在请求的URL后附上 locale=zh_CN 或 locale=en_US 如 http://www.php.cn/ 来改变语言了,具体这里不再做演示了。


国际化部分的内容到此结束。

以上就是SpringMVC学习系列(8) 之 国际化代码详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!