Java WEB系統(tǒng)國際化經(jīng)驗總結(jié)
? ? ? ? ? 并行處理系統(tǒng)的國際化主要包括前端的國際化、后端的國際化和算法的國際化。前端的國際化包括css、js和html文件的國際化,后端的國際化包括jsp、java代碼的國際化。
? ? ? ? ? jsp的國際化方式的方式是采用國際化標簽庫的方式。具體是在jsp頁面添加如下代碼:
??//?導入fmt庫//?設(shè)置為英文,若設(shè)置為中文則是zh_CN//確保加載的是webWebContentWEB-INFclassesjsp_en_US.properties文件"?cdata_tag="script"?_ue_custom_node_="true">//?確保加載
? ? ? ? html頁面的國際化(含Javascript的國際化)采用讀取Properties文件的方式,具體參考使用jQuery.i18n.properties實現(xiàn) Web 前端的國際化的實現(xiàn)方式。和文中不一樣的是,不再是用戶手動選擇語言版本,而是改用js讀取語言版本配置文件來決定讀取哪個版本資源文件。代碼大致如下:
var?bLoad=?false; function?getRootPath()?{ ????var?pathName?=?window.location.pathname.substring(1); ????var?webName?=?pathName?==?''???''?:?pathName.substring(0,?pathName.indexOf('/')); ????return?window.location.protocol?+?'//'?+?window.location.host?+?'/'+?webName; ????}?? function?GetValueByKey(key){ if(!bLoad) { loadProperties(); bLoad=true; } var?value?=?$.i18n.prop(key); return?value; }; function?loadProperties(){ var?JsSrc?=?(navigator.language?||?navigator.browserLanguage).toLowerCase(); if(JsSrc.indexOf('zh')>=0) { JsSrc?=?'js_zh_CN'; } else?if(JsSrc.indexOf('en')>=0) { ????JsSrc?=?'js_en_US'; } else { JsSrc?=?'js_zh_CN';? } var?i18npath?=?getRootPath()+?"/resources/js/" jQuery.i18n.properties({//加載資瀏覽器語言對應的資源文件 name:JsSrc,?//資源文件名稱 path:?i18npath,??????????????????????//'resources/js/',?//資源文件路徑 mode:'map',?//用Map的方式使用資源文件中的值 callback:?function()?{//加載成功后設(shè)置顯示內(nèi)容 } }); };
? ? ? ?其它的js可以這樣調(diào)用:
document.write("");??//?這句放在最前面 var?key?=?“user”; var?value?=??GetValueByKey(key);
? ? ? ?
? ? ? java部分的國際化,采用讀取語言配置文件,語言配置文件大致如下:
然后增加一個Java讀取這個配置文件的類:
//?讀取語言配置文件的語言配置類 public?class?LangConfInit?{ public?static?String?language?=?null; public?static?ResourceBundle?rb=null; public?LangConfInit(){ if(null?==?language?&&?null?==?rb){ language?=?ConfigUtil.getProperty("LangConf","Lang"); rb?=?ResourceBundle.getBundle("message_"+language); } } public?String?GetValue(String?key) { try?{ String?keyValue?=?new?String(rb.getString(key).getBytes("ISO-8859-1"),?"utf-8"); return??keyValue; }?catch?(UnsupportedEncodingException?e)?{ e.printStackTrace(); }?? return?null; }
調(diào)用代碼如下:
public?LangConfInit?lang?=new?LangConfInit(); String?vaule?=?lang.GetValue("user");
? ? ?css的國際化另外寫文章進行論述。
?
參考文獻:
1.?用jQuery.i18n.properties實現(xiàn) Web 前端的國際化
2.?使用JSP的fmt標簽實現(xiàn)國際化支持
3.JavaWeb 后端