1. 程式人生 > >struts2的國際化(即實現網站整體中英文切換)例項

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>


最後看看執行結果:
選擇語言為中文:

選擇語言為英文:

我們可以看到,已經成功實現了中英文切換,不同語言的切換隻需要提供不同國家的語言資原始檔即可。

相關推薦

struts2國際化實現網站整體中英文切換例項

推薦一個專注於Java的小眾技術社群:Java之音 環境要求:Struts2框架環境搭建成功 為了實現程式的國際化,必須先提供程式所需要的資原始檔。資原始檔的內容基本是key-value對,其中key是程式使用的部分,而value是程式的顯示部分。 資原始檔的

struts2國際化實現網站整體中英文切換

環境要求:Struts2框架環境搭建成功 1.在src下建立資原始檔.其中baseName是資原始檔的基本名稱,使用者可自由定義,而language和country是不變的,必須是Java所支援的語言和國家。(用到哪個國家語言資源可查官方文件)示例如下: 2.

struts2國際化實現中英文切換例項

今天學習了國際化例項,也就是實現中文和英文的切換。 注:本部落格有部分程式碼參考阿木俠的部落格內容。 1、首先實現國際化對我們的專案要求是搭建好Struts2框架 2、我們要編寫jsp頁面在這個jsp頁面上測試結果 下面附上建立的login.jsp的程式碼:

Struts2 國際化實現在頁面中調換中文英文兩個模式

在原本搭建的Struts上進行新增程式碼頁面(詳情見本人第一篇文章) 建立資原始檔 package com.hnpi.blue; public class ChangeLanguageAction { public String execute(){

struts2國際化中英文切換

國際化Internationalization的首末字元I和N之間字元數是18,簡稱I18N。 “國際化”是指一個應用程式在執行時,能夠根據客戶端請求所來自國家或地區語言的不同,而顯示不同的語言介面。 要求:Struts2框架搭建成功。 1. 專案截圖 2.建立資

利用Intellij+MAVEN+SpringMVC+URI.js實現頁面的中英文切換國際化)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P

gridview無數據源實現更新數據庫斷開更新數據庫

led databind tro bin def sin controls bpa grid 原文發布時間為:2008-08-01 —— 來源於本人的百度文章 [由搬家工具導入]using System;using System.Data;using System.Conf

【vue 進階指南 一】多語言國際化中英文切換

vue + element-ui + vue-i18n 多語言國際化 1.element-ui 並不支援最新版的vue-i8n 外掛,開發時注意i18n的版本,當然本示例成功解決版本不相容的問題,詳細說明請看element官方文件:http://eleme

多語言網站如何實現網站的多語言版本?

多語言網站,顧名思義就是能夠以多種語言(而不是單種語言)為使用者提供資訊服務,讓使用不同語言的使用者都能夠從同個網站獲得內容相同的資訊。多語言網站實現方案 1,靜態:就是為每種語言分別準備一套頁面檔案,要麼通過檔案字尾名來區分不同語言,要麼通過子目錄來區分不同語言。例如對於首頁檔案index_en.htm提

QT in VS 多語言實現中英文切換

最近專案需要軟體具有中英文雙語切換功能,而QT又自帶此功能,現將實現方式記錄下來。 說到中英文切換,少不了要了解QT的內部編碼方式。在此就不詳述QT編碼方式了,具體可參考 徹底弄懂Qt的編碼。只需要記住QT採用utf-8編碼!window作業系統採用ansi編

text-stroke實現文字描邊鏤空、text-fill-color實現文字填充&漸變+animation實現流光字體

stroke 顏色 width mas key ani kit mat idt text-stroke:<‘ text-stroke-width ‘> || <‘ text-stroke-color ‘>(text-stroke-width:設置或檢

鏈表的操作自己實現的-c語言版

自己實現 main clas 一個 class node ret scan bsp 描述:pass #include<stdio.h> #include <stdlib.h> typedef struct _node{ int v

什麽情況下需要檢測預裝Win8/8.1電腦內置激活密鑰Win8/8.1 OEM key

http bio mem 程序 rdquo dsa 新版 oem title 1、針對預裝在品牌機中的Win8操作系統,因使用了某些軟件或自己操作不當導致系統激活Key被替換而激活失效時,你需要找到內置在電腦中的OEM key,重新輸入OEM key來激活系統。 2、針對

資料結構與演算法JavaScript描述讀書筆記js實現連結串列-單鏈表

單鏈表 //建立建構函式建立節點 function Node(element){ this.element = element; this.next = null; } //連結串列的建構函式 function LList(){ this.head = new Node

資料結構3--棧java實現棧的順序儲存

1.棧      棧也叫堆疊,是一種限制只能在某一端進行插入和刪除操作的線性表                          

DZ先生怪談國標之215 and 216業務分組和虛擬組織

自述: 我記得在我還不懂什麼是國標的時候,我只是知道那是一串數字,有標識性的,後來因為工作需要對國標開始有了深入的瞭解。但是在這個業務分組和虛擬組織,即常說的215 and 216這塊我還不是很熟悉,初知這塊還是因為和X康對接,X康得貌貌先生曾為我闡述過這塊,只是當時覺得還是有問題,理解不了

如何在eclipse的配置檔案裡指定jdk路徑配置啟動eclipse的JDK

  如何在eclipse的配置檔案裡指定jdk路徑(即配置啟動eclipse的JDK) 2017年01月25日 03:26:08 閱讀數:21751 標籤: eclipsejdk 更多 個人分類: eclipse 版權宣告:

jquery load()方法實現區域性重新整理,多張網頁切換li標籤實現上下頁的切換

---學習借鑑中--- (1)父頁面插入的位置 <div  id="content" > //id為要重新整理顯示的子頁面的內容 </div> (2)父頁面顯示標籤切換不同html頁面 <ul class="userMenu"> <li

ThreadLocal詳解,附帶例項threadlocal實現銀行轉賬事務管理

一.前言   在很早之前接觸到ThreadLocal很不瞭解一件事情,就是執行緒用來處理多執行緒情景,那為什麼要用threadlocal來再為每個執行緒分發一個單獨的變數副本,是否違背多執行緒的實際存在意義,而且threadlocal是否能用同步代替?   其實

spring boot支援vue history mode增加對404的處理

原本的問題是這樣的,用大前端(Vue全家桶),靜態檔案直接放在Spring Boot的static資料夾裡,啟動後,假設訪問http://localhost/page1/page1_1,如果直接點瀏覽器