1、Struts的國際化 Struts是一種支持國際化的MVC的Web Framework。可是如何來使用struts國際化是一個問題。下面我們來探討一下,如何實現Struts的國際化。Web程式的國際化涉及到3個層面的東西。第一、jsp部分的輸入/輸出;第二、應用處理程序的國際化;第三、DB的國際化問題。這裏主要探討的是jsp部分的輸入/輸出問題。
2、定義資源文件 在/WEB-INF/classes下面添加UTF-8資源束文件。每一個資源文件是“鍵-值”對的集合。在JSP頁面裏面可以通過鍵來找到相應的數據值。本例子的文件名是ApplicationResources,所以相應的資源文件束是(包括e文,簡體中文,繁體中文) ApplicationResources.properties : 默認資源文件。當在其他資源文件裏面找不到某個資源的時候,就使用該資源文件裏面的定義。 ApplicationResources_zh_CN.properties:簡體中文資源文件。 ApplicationResources_zh_TW.properties:繁體中文資源文件。 資源文件的格式爲:默認資源文件名_國別_語言.properties。其中每個文件都是通過%JAVA_HONE%/BIN/native2ascii.exe工具轉換而來。你也可以使用其他工具來處理得到(http://java.sun.com/products/jilkit/ 有一個工具Internationalization Java Internationalization and Localization Toolkit 可以處理)。下面是一個例子,我們顯示如何使用%JAVA_HONE%/BIN/native2ascii.exe命令來定義資源束文件。
2.2 準備完成以後,使用如下的命令創建UTF-8資源文件束 native2ascii -encoding gb2312 ApplicationResources_zh_CN.bak ApplicationResources_zh_CN.properties native2ascii -encoding big5 Applica tionResources_zh_TW.bak ApplicationResources_zh_TW.properties
注意: big5碼必須在big5碼的環境(即控制面板中的語言區域這個選項中選臺灣即可)中去轉化成UTF-8,否則轉化不能 成功
3、定義JSP頁面的字符集合 定義JSP頁面的語言爲UTF-8。在每個JSP頁面,必須有如下的內容(如果使用的模板技術,則只是需要在模板頁面添加,其他使用該模板的頁面無需添加) <!--page contentType="text/html;charset=UTF-8-->
在struts-config.xml中的 key="ic160" />即可,struts框架會根據你 的 所在的區域自動選擇資源文件。
對於表單數據的處理,我們是通過添加一個Filter來實現的。所有提交的請求,都需要做字符處理。然後在web.xml裏面定義該Filter。這樣我們就不需要在程序裏面做任何的字符處理對於表單數據的處理,我們是通過添加一個Filter來實現的。所有提交的請求,都需要做字符處理。然後在web.xml裏面定義該Filter。這樣我們就不需要在程序裏面做任何的字符處理
3.1 定義Filter。下面是一個例子。 package com.webapps.commons;
import java.io.*; import javax.servlet.*;
public class CharsetEncodingFilter implements Filter{ private FilterConfig config = null; private String defaultEncode = "UTF-8";
public void init(FilterConfig config) throws ServletException { this.config = config; if(config.getInitParameter("Charset")!=null){ defaultEncode=config.getInitParameter("Charset"); } }
public void destroy() { this.config = null; }
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { ServletRequest srequest=request; srequest.setCharacterEncoding(defaultEncode); chain.doFilter(srequest,response); } }
3.2 在web.xml裏面聲明使用該Filter
Character Encoding com.webapps.commons.CharsetEncodingFilter
Character Encoding /*
4 用戶在web瀏覽器根據自身要求選擇語言
在action中:
//定義一個Locale 對象,從頁面請求中獲得用戶選擇語言的信息
Locale locale = new Locale(request.getParameter("locale"));
/把locale保存在session中 request.getSession().setAttribute(Globals.LOCALE_KEY,locale);
這樣就可以了 實現國際化了
|