struts2的國際化(即實現網站整體中英文切換)例項
推薦一個專注於Java的小眾技術社群:Java之音
環境要求:Struts2框架環境搭建成功
為了實現程式的國際化,必須先提供程式所需要的資原始檔。資原始檔的內容基本是key-value對,其中key是程式使用的部分,而value是程式的顯示部分。
資原始檔的命名可以是如下3種形式:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是資原始檔的基本名稱,使用者可自由定義,而language和country是不變的,必須是Java所支援的語言和國家。(用到哪個國家語言資源可查官方文件)
Java不可能支援所有的國家和語言,可以通過Locale類的getAvailableLocale方法獲取支援的,該方法返回一個Locale陣列,該陣列中包含了所有支援的國家和語言。
建立資原始檔:
globalMessages_en_US.properties(英文)
globalMessages_zh_CN.properties(中文)
編寫jsp頁面,在這個jsp上測試中英文切換效果:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title></title>
</head>
<body>
<s:i18n name="globalMessages">
<s:text name="check"></s:text>:
<a href="login.action?request_locale=zh_CN"><s:text name="chinese"></s:text></a>
<a href="login.action?request_locale=en_US"><s:text name="english"></s:text></a>
<br/>
<h3><s:text name="title"></s:text></h3>
<s:form action="login" method="post">
<table width="344" height="300">
<tr>
<td> </td>
</tr>
<tr>
<td><s:text name="username" />
<td><s:textfield name="name" />
</td>
</tr>
<tr>
<td><s:text name="password" />
</td>
<td><s:password name="password" />
</td>
</tr>
<tr>
<td> </td>
<td><s:submit value="%{getText('login')}" /></td>
</tr>
</table>
</s:form>
</s:i18n>
</body>
</html>
這裡有一個i18n,他就是Internationalization(國際化)的英文縮寫,為什麼是i18n呢?
Internationalization去掉頭尾的i和n剛好還剩下18個字元,漲姿勢了,原來還可以這樣命名
編寫action:
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 8153220869598441387L;
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
這裡測試中英文切換,就不做登入處理了,直接登入成功。
配置攔截器,在進入action之前進行語言選擇的處理
public class CheckInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = -1112495747942034188L;
@Override
public String intercept(ActionInvocation ai) throws Exception {
ActionContext ac = ai.getInvocationContext();
Map session = ac.getSession();
Locale locale = (Locale)session.get("WW_TRANS_I18N_LOCALE");
if(locale==null){
locale = new Locale("zh","CN");
session.put("WW_TRANS_I18N_LOCALE",locale);
}
return ai.invoke();
}
}
在struts2中,提供了一個i18n的攔截器,這個攔截器在執行Action方法之前,自動查詢請求中名為request_locale的引數,攔截後轉換為Locale物件,放置在使用者session的名為“WW_TRANS_I18N_LOCALE”的屬性。I18n在程式執行時會被自動載入,我們可以利用這些來設定允許使用者自動選擇網頁的語言。
在struts.xml中配置攔截器和國際化的資源:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.costom.i18n.resources" value="globalMessages"/>
<package name="default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="myInter" class="org.locale.action.CheckInterceptor"></interceptor>
</interceptors>
<action name="login" class="org.locale.action.LoginAction">
<result name="success">/index.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myInter"></interceptor-ref>
</action>
</package>
</struts>
最後看看執行結果:
選擇語言為中文:
選擇語言為英文:
我們可以看到,已經成功實現了中英文切換,不同語言的切換隻需要提供不同國家的語言資原始檔即可。
相關文章
- Android-國際化(多語言)切換詳解及例項Android
- 基於react-intl實現手動國際化切換React
- Grails國際化例項AI
- 一個幫助軟體免費實現國際化翻譯的網站網站
- javascript實現的圖片簡單切換程式碼例項JavaScript
- Vue國際化處理 vue-i18n 以及專案自動切換中英文Vue
- jQuery實現的滑鼠滑過切換圖片程式碼例項jQuery
- Uber網站國際化的工程實踐(CMS篇)網站
- 中英文切換導航選單實現詳解
- 網站必備之簡繁切換功能實現網站
- 如何實現選項卡切換
- Struts2教程10:國際化
- js圖片切換例項JS
- js和css3實現的圖片立體滾動切換效果程式碼例項JSCSSS3
- RAC+單例項DG的切換單例
- 中文轉換成unicode字元,實現國際化Unicode字元
- sql developer中英文切換SQLDeveloper
- tab選項卡切換例項程式碼
- 點選方向鍵實現文字框焦點切換程式碼例項
- jquery實現的class樣式類的新增和刪除切換程式碼例項jQuery
- Java模組化的國際化實現- GunnarJava
- dephi 程式輸入法中英文自動切換實現的原始碼 (轉)原始碼
- Android實現國際化Android
- [- Flutter 狀態篇 -] 主題色切換+國際化 三連Flutter
- winForm 國際化的簡單實現ORM
- 這可能是目前最方便的網站中英文切換(理論支援所有語言)網站
- 純CSS的導航欄Tab切換例項CSS
- 單例項DG切換中的虛擬IP單例
- WEB網站國際化的一種解決方案Web網站
- win10系統下實現ctrl+空格鍵切換中英文的方法Win10
- js實現的浮點數取整程式碼例項JS
- After Effect切換中英文教程
- Flutter Web網站之最簡方式實現暗黑主題無縫切換FlutterWeb網站
- 小程式國際化實現方式
- vue移動端路由切換完整例項Vue路由
- 導航欄背景切換程式碼例項
- struts2實現選擇i18n語言選擇切換
- vue3國際化、vue3實現多語言切換、vue3使用i18nVue