在我的應用程序中,我必須根據在配置頁面中選擇的區域設置用戶來顯示內容。我沒有使用瀏覽器默認語言環境。通過Struts2中的代碼設置區域設置
當使用s:text
時,它總是使用默認資源文件。
在Struts1的,我用下面的代碼來設置默認語言環境在我的過濾器
session.setAttribute("org.apache.struts.action.LOCALE",locale);
如何動態地設置用戶選擇的語言環境Struts2的?
在我的應用程序中,我必須根據在配置頁面中選擇的區域設置用戶來顯示內容。我沒有使用瀏覽器默認語言環境。通過Struts2中的代碼設置區域設置
當使用s:text
時,它總是使用默認資源文件。
在Struts1的,我用下面的代碼來設置默認語言環境在我的過濾器
session.setAttribute("org.apache.struts.action.LOCALE",locale);
如何動態地設置用戶選擇的語言環境Struts2的?
您設置的語言環境中的Struts 2的方式如下:
ActionContext ctx = ActionContext.getContext();
if (ctx != null)
{
ctx.setLocale(locale);
}
您也可以使用I18nInterceptor。
Struts2國際化攔截器i18n
可用於動態地將當前用戶區域設置更改爲用戶會話的用戶特定區域設置。
「或者,可替換地,只對當前請求(因爲XWork的2.1.3)」通過使一個HTTP請求,並與區域的像
"en_US"
的值提供一個請求參數request_locale
其爲英語,美國創建語言環境。
此區域設置默認保存在會話中的"WW_TRANS_I18N_LOCALE"
屬性下,並在用戶會話期間用作當前區域設置。每次請求時,當前語言環境也會被此攔截器推送到地圖ActionContext
中。這允許支持本地化的框架組件都使用ActionContext
的區域設置。
更詳細的描述和示例代碼,你可以在I18n Interceptor的文檔中找到。
一個攔截器,用於處理將會話 中指定的語言環境設置爲當前操作請求的語言環境。另外,這個攔截器將查找一個特定的HTTP請求參數,並且將 區域設置爲提供的任何值。這意味着這個攔截器可以用於允許您的應用程序動態地更改用戶會話的區域設置,或者替代地,只針對當前請求(自XWork 2.1.3以來) 。這對於需要多語言支持的 應用程序非常有用,並且希望用戶在任何時候都能夠設置他或她的語言首選項。在執行此攔截器 期間刪除區域 參數,確保未在 操作中沒有典型相應設置器的操作(例如
request_locale
)上設置屬性。例如,使用默認參數名稱,以
foo.action?request_locale=en_US
一個請求,然後是美國英語 保存在用戶的會話,將用於今後所有申請的語言環境。 如果沒有區域設置(例如第一次訪問),則攔截器使用瀏覽器區域設置。
這爲我工作:
String language = userLocale.substring(0, 2);
String country = userLocale.substring(3, 5);
Locale locale = new Locale(language, country);
ActionContext.getContext().setLocale(locale);
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale);
其中userLocale
值的格式爲:fr_FR目錄和資源文件名爲resource_fr_FR.properties
參見:HTTP: //stackoverflow.com/q/15582074/1700321和http://stackoverflow.com/q/12891293/1700321。 –