struts2 国际化
概述
Struts2 國際化是建立在 Java 國際化基礎上的:
- 為不同國家/語言提供對應的消息資源文件
- Struts2 框架會根據請求中包含的 Locale 加載對應的資源文件
- 通過程序代碼取得該資源文件中指定 key 對應的消息
配置國際化資源文件
I.?? Action 范圍資源文件: 在Action類文件所在的路徑建立名為 ActionName_language_country.properties 的文件
II.? 包范圍資源文件: 在包的根路徑下建立文件名為 package_language_country.properties 的屬性文件,一旦建立,處于該包下的所有 Action 都可以訪問該資源文件。注意:包范圍資源文件的 baseName 就是package,不是Action所在的包名。
III. 全局資源文件
> 命名方式: basename_language_country.properties
?? ? ? > struts.xml <constant name="struts.custom.i18n.resources" value="baseName"/>
IV.? 國際化資源文件加載的順序如何呢 ? 離當前 Action 較近的將被優先加載.
如何在頁面上 和 Action 類中訪問國際化資源文件的? value 值
I. 在 Action 類中. 若 Action 實現了 TextProvider 接口, 則可以調用其 getText() 方法獲取 value 值
> 通過繼承 ActionSupport 的方式。 ?
II. 頁面上可以使用 s:text 標簽; 對于表單標簽可以使用表單標簽的 key 屬性值
<s:textfield name="username" key="username"></s:textfield> > 若有占位符, 則可以使用 s:text 標簽的 s:param 子標簽來填充占位符
?? ? ? > 可以利用標簽和 OGNL 表達式直接訪問值棧中的屬性值(對象棧 和 Map 棧)
實現通過超鏈接切換語言.
I.? 關鍵之處在于知道 Struts2 框架是如何確定 Local 對象的 !
II. 可以通過閱讀 I18N 攔截器知道.
III. 具體確定 Locale 對象的過程:
> Struts2 使用 i18n 攔截器 處理國際化,并且將其注冊在默認的攔截器棧中
> i18n攔截器在執行Action方法前,自動查找請求中一個名為 request_locale 的參數。如果該參數存在,攔截器就將其作為參數,轉換成Locale對象,并將其設為用戶默認的Locale(代表國家/語言環境)。并把其設置為 session 的 WW_TRANS_I18N_LOCALE 屬性
> 若 request 沒有名為request_locale 的參數,則 i18n 攔截器會從 Session 中獲取 WW_TRANS_I18N_LOCALE 的屬性值,若該值不為空,則將該屬性值設置為瀏覽者的默認Locale
> 若 session 中的 WW_TRANS_I18N_LOCALE 的屬性值為空,則從 ActionContext 中獲取 Locale 對象。
IV.? 具體實現: 只需要在超連接的后面附著? request_locale 的請求參數, 值是 語言國家 代碼.
<a href="testI18n.action?request_locale=en_US">English</a><a href="testI18n.action?request_locale=zh_CN">中文</a>? > 注意: 超鏈接必須是一個 Struts2 的請求, 即使 i18n 攔截器工作!
?
轉載于:https://www.cnblogs.com/linyueshan/p/5750832.html
總結
以上是生活随笔為你收集整理的struts2 国际化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到被蜜蜂蛰脖子是什么意思
- 下一篇: 使用 Chrome Timeline 来