struts與國際化的4個問題


 1.實驗環境
怎樣在中文OS中做其他語言的實驗,如下操作:
IE-> 工具->Internet選項->常規->語言->語言首選項.
   默認只有中文,可以添加你想實驗的語言,然後把它移到第一項就可以了。
   要明白爲什麼這樣設置,需要了解客戶端提交請求中包含的隱含信息Locale。
 
2.動態提示信息的國際化
靜態顯示在頁面上的文字和圖片很簡單,<bean:message key="..."/>,<html:img pageKey="..." width="72" height="20" border="0"/>
重點介紹怎樣處理動態提示信息。比如說,用戶修改某些記錄後,我們要提示他們——您的信息修改成功 或者 您的信息修改不成功。修改成功與否的標誌來自於action,直接用<bean:message key="..."/>標籤根本無法處理。
兩種方式:
 (1)在action中把資源文件包的內容取出來,再傳給jsp顯示。code:
action中代碼:
import org.apache.struts.util.MessageResources;
import java.util.Locale;
public class UserInfoAction extends Action {
 public ActionForward execute(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
        .............
 
        MessageResources message=getResources(request);
        Locale locale=getLocale(request);
      if( ..savesucess ..)
        request.setAttribute("message",message.getMessage(locale,"save.success"));
     else
       request.setAttribute("message",message.getMessage(locale,"save.fail"));
     return mapping.findForward(......);
}
 
jsp中顯示:
............
<logic:present name="successmessage">
<tr class="tdBlueGray" align="left">
    <td colspan="4"><font color="red"><%=request.getAttribute("message")%></font></td>
</tr>
</logic:present>
.............
 
(2)把成功與否的標誌傳給jsp,在jsp實現顯示邏輯。
action中代碼:
 
public class UserInfoAction extends Action {
 public ActionForward execute(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
        .............
 
      if( ..savesucess ..)
        request.setAttribute("label","success");
     else
        request.setAttribute("label","fail");
     return mapping.findForward(......);
}
 
jsp中顯示:
............
<logic:equal name="label" value="success">
<tr class="tdBlueGray" align="left">
    <td colspan="4"><font color="red"><bean:message key="save.success"/></font></td>
</tr>
</logic:equal>
 
<logic:equal name="label" value="fail">
<tr class="tdBlueGray" align="left">
    <td colspan="4"><font color="red"><bean:message key="save.fail"/></font></td>
</tr>
</logic:equal>
.............
 
3.資源文件包的命名方式
資源文件包的命名方式,主要有兩種,application_language.properties    application_language_country.properties
像中國分臺灣和大陸,臺灣使用繁體,大陸使用簡體,兩者相差很大,命名使用後一種application_cn_ZH.properties 和application_cn_TW.properties。
要是像英語,美式英語和英式英語可以通用,則不比那麼麻煩建兩個資源文件包:application_en_US.properties 和application_en_EN.properties,第一中命名方式是最好的:application_en.properties。同理,西班牙:application_es.properties,葡萄牙:application_pt.properties,日本:application_ja.properties。
注意:不到萬不得以,不要使用第一種命名方式,舉個例子,使用西班牙語的國家很多,像危地馬拉,智利,西班牙本土等。最先的意思是軟件買給西班牙人,如果使用第二種命名方式:application_es_ES.properties,不久後要買給智利人,那情況就不妙了,application_es_ES.properties只適合在西班牙本土,在智利根本就讀不出application_es_ES.properties,而使用application_es.properties名稱的資源文件適合於所有使用西班牙語的國家
 
4.native2ascii命令
如果在頁面顯示的字符編碼跟資源文件包中文字的字符編碼不符,那就得用native2ascii命令了,在JDK安裝目錄下的/bin/子目錄下可以找到相應的.exe文件。如:頁面顯示是UTF-8編碼:<%@ page contentType="text/html; charset=UTF-8" %>,顯示的中文是GB2312,這時要字符編碼轉換。
即Web應用的輸入和輸出都採用同一種編碼。
發佈了18 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章