struts2實現選擇i18n語言選擇切換


 

【新手學習記錄,僅供參考!】

1.項目准備

  首先當然是我們得創建一個struts2的web項目,並且已經實現了一個簡單的功能。

  以下通過登錄功能來舉例說明。

2.指定全局國際化資源文件

  在struts.xml中配置i18n資源文件。

<constant name="struts.custom.i18n.resources" value="souvenir"/>

3.配置語言資源配置文件
  這里以中英兩種語言作為例子。

  需要分別配置souvenir_en_US.properties以及souvenir_en_US.properties

  

4.在jsp頁面中進行調用

  

<title><s:text name="loginPage"/></title>

</head>
<body>
<s:form action="login">
    <s:textfield name="username" key="user"/>
    <s:password name="password" key="pass"/>
    <s:submit name="submit" key="login"></s:submit>
</s:form>

  這時,系統已經實現了i18n,只是默認根據瀏覽器的語言配置來加載的資源文件。

  我們可以事先修改一下IE的Internet選項中的語言配置,來驗證i18n功能是否成功實現。

  

  比如我們將英文設置為默認語言,這時重新打開剛才jsp登錄頁面,就會發現提示語言變為英文。

5.添加語言選擇功能

  在jsp頁面增加兩個語言選擇的鏈接:

<br/>
<s:a href="chlang?lang=zh">簡體中文</s:a>
<br/>
<s:a href="chlang?lang=en">English</s:a>

  這里實則上是調用的chlang這個action來進行語言選擇的處理,同時傳遞了語言參數。

6.配置和實現chlang這個action

  首先在struts.xml中增加chlang的配置,方法與之前其他的action配置類似

  這里由於是進行語言切換,所以默認都是跳轉到login頁面

<action name="chlang" class="org.souvenir.app.action.LoginAction" method="chlang">
            <result>/login.jsp</result>
        </action>

  然后在LoginAction類中實現chlang方法

  

public String chlang(){
        Locale locale = null;
        System.out.println("lang:"+lang);
        if (lang.equals("zh")) {
            // 顯示中文
            locale = Locale.CHINA;
            System.out.println("======" + lang+locale);
        } else {
            // 顯示英文
            locale = Locale.US;
        }
        ActionContext.getContext().setLocale(locale);                                    
        ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale);
        return SUCCESS;

    }

  邏輯比較簡單,根據用戶選擇語言參數來判斷並修改需要加載語言資源。

7.效果預覽

  默認打開login.jsp頁面時,由於我的瀏覽器已經修改語言為英語,所以默認加載英文。

  

  然后我們選擇“簡體中文”進行語言切換,效果如下:

  

8.總結

  簡單小結一下,其實原理還是比較簡單的。

  首先是瀏覽器根據IE默認配置加載對應的語言資源

  然后是用戶主動選擇語言切換后,系統通過action處理請求,然后返回相應的頁面,從而實現多語言的效果。

  


免責聲明!

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



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