1. java的國際化
Java國際化主要靠三個類實現:
java.util.ResourceBundle加載資源包,
java.util.Local語言環境
java.text.MessageFormat格式化消息
資源文件的三種形式:
baseName_language_contry.properties,
baseName_language.properties,
baseName.properties其中baseName表示資源文件的基本名
Locale local=Locale.getDefault();//獲得Locale對象,默認當前國際和語言
ResourceBundle bundle=ResourceBundle.getBundle("test/message",locale);//根據當前環境加載資源文件
System.out.println(bundle.getString("hello"));//在message_zh_CN.properties中找,找不到在message_zh.properties中找,找不到在message.properties中找,再找不到就報錯誤
如果在資源文件中帶了佔位符,例如:msg={0},你好,今天是{1}
那麼就要使用MessageFormat了,這個類裏有個format(String pattern,Object … values)方法
還有一種方式是以實現了ListResourceBundle的類爲資源文件,例如baseName_zh_CN.class,這種方式這裏不介紹
2. jsp的國際化實現
參考:http://blog.csdn.net/sqs201/article/details/7204244
3. struts2的國際化
a) 全局範圍
配置常量struts.custom.i18n.resources=baseName國際化資源文件的位置,那麼在任何地方都可以使用資源文件中的內容,在頁面上可使用<s:text name=”msg” ><s:param ...></s:text> 在action中使用getText(msg,newString[]{…})
在struts2中資源文件中可以使用ognl表達式作爲佔位符,例如welcome_msg=${username},welcome you!,但是這種佔位符功能有限,也只能直接取action中的屬性的值
b) 包範圍
在action所在包的路徑下定義資源文件,package_language_country.properties 那麼該包下所有的action可使用,這裏記住一定是”package”字符串,而不是com.other.xxx.propertis,package_xx_xx.properties和action並行存放
c) Actioin範圍
在action的java文件所在的路徑下存放ActionClassName_language_country.properties,則只有類名爲ActionClassName的action和轉發到的頁面可以使用.
d) 臨時
把<s:i18n ..> 作爲<s:text..>的父標籤, 在s:i18n中指定資源文件,那麼也只有在這個標籤裏可以使用
如果在UserAction中使用國際化,查找key的順序如下:
UserAction.properties->UserAction的父接口.properties->package.properties->全局
如果在UserAction轉發到的頁面上使用國際化,那麼順序就是:臨時->類範圍->包範圍->全局