2013-08-29 69 views
0

在我的應用程序中,我必須根據在配置頁面中選擇的區域設置用戶來顯示內容。我沒有使用瀏覽器默認語言環境。通過Struts2中的代碼設置區域設置

當使用s:text時,它總是使用默認資源文件。

在Struts1的,我用下面的代碼來設置默認語言環境在我的過濾器

session.setAttribute("org.apache.struts.action.LOCALE",locale); 

如何動態地設置用戶選擇的語言環境Struts2的?

+0

參見:HTTP: //stackoverflow.com/q/15582074/1700321和http://stackoverflow.com/q/12891293/1700321。 –

回答

0

您設置的語言環境中的Struts 2的方式如下:

ActionContext ctx = ActionContext.getContext(); 
if (ctx != null) 
{ 
    ctx.setLocale(locale); 
} 

您也可以使用I18nInterceptor

+0

爲什麼上下文爲空? –

+0

在特殊情況下它可能爲空,但它不應該是。 – tom

+1

在特殊情況下,您的代碼將無法工作。 –

0

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一個請求,然後是美國英語 保存在用戶的會話,將用於今後所有申請的語言環境。 如果沒有區域設置(例如第一次訪問),則攔截器使用瀏覽器區域設置。


6

這爲我工作:

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

+0

這適用於我,但是當我使用request_locale參數 – dom

+0

執行另一個請求時,此語言環境不會發生變化。如果您要上傳基本配置和代碼,我可以看一看 – osmingo

+0

實際上是我的代碼錯誤.....我以後得到它......沒有錯的回答......非常感謝... – dom

相關問題