Struts2本地化和國際化
Struts 2的國際化(I18N)和本地化(i10n)或多語言的例子,來說明如何使用資源包來顯示不同語言的消息。在這個例子中,您將創建一個簡單的登錄屏幕,通過Struts 2的UI組件顯示來自資源包的消息, 並更改基於所選的語言選項的語言環境。
1. 工程結構
項目結構,如下圖片顯示:
2. Properties文件
確保屬性文件命名爲國家指定的代碼。
在一些「非歐洲」或「非英語」之類的字符,應該始終編碼的內容 native2ascii屬性
global.properties
#Global messages
global.username = Username
global.password = Password
global.submit = Submit
global_zh_CN.properties
#Global messages
global.username = \u7528\u6237\u540d
global.password = \u5bc6\u7801
global.submit=\u63d0\u4ea4
global_fr.properties
#Global messages
global.username = Nom d'utilisateur
global.password = Mot de passe
global.submit = Soumettre
global_de.properties
#Global messages
global.username = Benutzername
global.password = Kennwort
global.submit = Einreichen
請仔細閱讀Struts2資源包的例子來了解Struts 2的自動搜索屬性文件。
3. 動作類
兩個動作類,LocaleAction基本上是什麼都不做, 而 LoginAction 會做一個簡單的驗證和通過gettext()顯示來自資源包錯誤信息。
LocaleAction.java
package com.yiibai.common.action;
import com.opensymphony.xwork2.ActionSupport;
public class LocaleAction extends ActionSupport{
//business logic
public String execute() {
return "SUCCESS";
}
}
LoginAction.java
package com.yiibai.user.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String username;
private String password;
//...getter and setter methods
//business logic
public String execute() {
return "SUCCESS";
}
//simple validation
public void validate(){
if("".equals(getUsername())){
addFieldError("username", getText("username.required"));
}
if("".equals(getPassword())){
addFieldError("password", getText("password.required"));
}
}
}
4. 視圖頁面
一個登錄頁面帶有一個文本框,密碼和提交UI組件。
爲了支持Struts2 本地化,必須聲明 <%@ page contentType=」text/html;charset=UTF-8″ %>在您的視圖頁面,否則能將有問題的「UTF-8數據」正確顯示,尤其是中國漢字。閱讀這篇文章,關於Struts2中國本土化問題。
login.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
Struts 2 localization example
<s:form action="validateUser" namespace="/user">
<s:textfield key="global.username" name="username" />
<s:password key="global.password" name="password"/>
<s:submit key="global.submit" name="submit" />
<s:url id="localeEN" namespace="/" action="locale" >
<s:param name="request_locale" >en
<s:url id="localezhCN" namespace="/" action="locale" >
<s:param name="request_locale" >zh_CN
<s:url id="localeDE" namespace="/" action="locale" >
<s:param name="request_locale" >de
<s:url id="localeFR" namespace="/" action="locale" >
<s:param name="request_locale" >fr
<s:a href="%{localeEN}" >English
<s:a href="%{localezhCN}" >Chinese
<s:a href="%{localeDE}" >German
<s:a href="%{localeFR}" >France
要更改默認的語言環境,只需要聲明「request_locale」參數,設置你喜歡的語言代碼,並傳遞給一個Action類。在 Struts2中,com.opensymphony.xwork2.interceptor.I18nInterceptor 攔截器, 在 struts-default.xml中聲明將攔截Action類,並相應地處理語言環境。
5. 顯示資源包的消息?
在Struts2,有很多的方式來顯示所選擇的語言或語言環境的資源包的信息。有關示例,
<s:textfield key="global.username" name="username" />
<s:text name="global.username" />
<s:property value="getText('global.username')" />
<s:text name="global.password" />
在Struts1,有一個標準的 bean:message 來顯示資源包的消息。但是在Struts 2中,有這麼多相當於顯示資源包的消息(甚至內部的工作不同)方式,基本上,無論選擇的是什麼,在 Struts2 也將顯示正確的資源包的消息。
6. struts.xml
Struts2 的配置文件,鏈接一起。
<constant name="struts.custom.i18n.resources" value="global" />
<constant name="struts.devMode" value="true" />
<package name="user" namespace="/user" extends="struts-default">
<action name="login">
<result>/pages/login.jsp</result>
</action>
<action name="validateUser" class="com.yiibai.user.action.LoginAction">
<result name="SUCCESS">/pages/welcome.jsp</result>
<result name="input">/pages/login.jsp</result>
</action>
</package>
<package name="default" namespace="/" extends="struts-default">
<action name="locale" class="com.yiibai.common.action.LocaleAction">
<result name="SUCCESS">/user/pages/login.jsp</result>
</action>
</package>
7. 示例
http://localhost:8080/i18nlocalization/user/login.action
http://localhost:8080/i18nlocalization/locale.action?request\_locale=en
http://localhost:8080/i18nlocalization/locale.action?request\_locale=zh\_CN
http://localhost:8080/i18nlocalization/locale.action?request\_locale=de
http://localhost:8080/i18nlocalization/locale.action?request\_locale=fr