原理:程序是根據Locale來確定國際化資源文件,因此關鍵之處在于知道 Struts2 框架是如何確定 Local 對象的 !
由于Struts2 使用 i18n 攔截器處理國際化,并且將其注冊在默認的攔截器中,因此,可以通過閱讀 I18N 攔截器知道。
具體確定 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 對象。
流程圖如下圖所示:

具體實現: 只需要在超連接的后面附著 request_locale 的請求參數, 值是 語言國家 代碼.
<a href="testI18n.action?request_locale=en_US">English</a><a href="testI18n.action?request_locale=zh_CN">中文</a>> 注意: 超鏈接必須是一個 Struts2 的請求(經過Action執行), 即使 i18n 攔截器工作!
新聞熱點
疑難解答