Struts2國際化
國際化資源文件
全局資源文件: WEB-INF/classes路徑下 baseName.properties,baseName可自定義
包范圍資源文件:包的根路徑下package.properties,baseName必須是package
Action范圍資源文件:Action類文件所在目錄下ActionName.properties,baseName為相應ActionName
對于不同語言和地區的資源文件,命名方式為 baseName_<language>.properties或 baseName_<language>_<local>.properties,如baseName_en.properties,baseName_en_US.properties,baseName_zh.properties,baseName_zh_CN.properties等
全局國際化資源
在struts.properties文件中配置常量
struts.custom.i18n.resources=<baseName>
臨時指定資源文件
在JSP中<s:i18n name=""></s:i18n>之間的子標簽使用臨時指定的資源文件,其中name屬性的值為臨時指定的資源文件的baseName
輸出國際化消息
在JSP頁面中輸出國際化消息,可以使用Struts2的標簽<s:text name="" />,其中name屬性對應資源文件中的key
在表單元素的Label里輸出國際化消息,可以為該表單標簽的key屬性賦值,對應資源文件中的key
在Action類中訪問國際化消息,可以使用ActionSupport類的getText方法,該方法接受一個name參數,對應資源文件中的key
輸出帶占位符的國際化消息
在JSP頁面中輸出帶占位符的國際化消息,可以通過在<s:text />標簽中使用多個<s:param />標簽來依次填充消息中的占位符
在Action類中訪問帶占位符的國際化消息,可以調用getText(String key, List<?> args)或getText(String key, String[] args)方法填充消息中的占位符,其中參數args是一個字符串組成的List或字符串數組,其中元素依次填充到國際化消息的占位符中
此外,通過在國際化消息中使用OGNL作為占位符,可以直接訪問值棧,將對應的值填充到國際化消息中
資源文件的加載順序
在Action類中訪問資源文件的順序:
1.優先加載相同路徑下baseName為ActionName的資源文件;
2.如果找不到指定的key,則查找超類路徑下baseName為超類ActionName的資源文件;
3.如果找不到指定的key,則查找所實現接口路徑下baseName為接口類名的資源文件;
4.如果找不到指定的key,且Action使用模型驅動模式,則對getModel()方法返回的model對象從第一步開始執行;
5.如果找不到指定的key,則加載當前包下的包范圍資源文件;
6.如果找不到指定的key,則沿當前包上溯查找包范圍資源文件,直到最頂層包;
7.如果找不到指定的key,則查找全局資源文件
在JSP中訪問資源文件的順序:
1.對于臨時指定資源文件的標簽,優先查找臨時指定的資源文件;
2.在全局資源文件中查找指定的key;
3.如果找不到指定的key,則直接輸出該key