SpringMVC的國際化


關於SpringMVC的國際化,http://www.cnblogs.com/liukemng/p/3750117.html這篇文章已經講的很好了。它講了有如下幾種國際化方式

1:基於Http的header信息的國際化(request.getLocale())

2:基於session的國際化(設置session的SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME

3:基於COOKIE的國際化

4:基於URL的國際化    (注意上面文章的第四種方法是錯誤的,因為spring的bean默認是單例,不要使用實例變量來保存狀態,這樣一個用戶改變狀態,所有用戶都改變狀態了)

 

基於session的實現方式要求有個入口的URL或者沒有URL中都要求加入一個LANG參數,不是很方便,有沒有一種方式我想加的時候加,不相加的是有使用前面的local 。經過實踐基於URL的國際化解決我的問題。

配置applicaton.xml;

 

    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
    </mvc:interceptors>

    <bean id="localeResolver" class="com.sequoiadb.util.DBaasLocaleResolver"/>

實現DBaasLocaleResolver的方法

 

public class DBaasLocaleResolver extends AcceptHeaderLocaleResolver {

    public Locale resolveLocale(HttpServletRequest request) {
        HttpSession session=request.getSession();
        Locale locale=(Locale)session.getAttribute("locale");
        System.out.println("resolveLocale:"+locale.toString());
        if (locale==null){
            session.setAttribute("locale",request.getLocale());
            return request.getLocale();
        }else{
            return locale;
        }

    }

    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
        System.out.println("setLocale:"+locale.toString());
        request.getSession().setAttribute("locale",locale);
    }

}

 

添加國際化文件

在src目錄下添加properties文件,中文轉碼要使用native2ascii.exe工具,這個是JDK自帶的。

 

在這里說下,上面提到的那篇文章的基於URL的國際化代碼有點問題,因為如果不帶locale會報空指針異常,所以我修改了邏輯,第一次根據瀏覽器來進行國際化所以使用了request.getLocale(), 如果url中有locale參數就返回mylocale ,這個mylocale對象的構造在哪調我也不太清楚

唯一的bug就是你的locale參數填寫錯誤也會默認使用瀏覽器來進行國際化,而不是使用上一次的locale。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM