1.首先把Struts2的環境搭建起來, html
2.創建一個action.測試i18n的。 java
3.下面這個是struts.xml的簡單配置,裏有2中properties文件的配置,一種是全局的,一種是局部的, apache
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <!-- 局部的配置 --> <!-- <constant name="struts.custom.i18n.resources" value="com/test/action/I18n"></constant> --> <!-- 全局的配置 --> <!-- --> <constant name="struts.custom.i18n.resources" value="test"></constant> <package name="default" namespace="/" extends="struts-default"> <action name="" class="com.test.action.I18nAction"> <result >/index.jsp</result> </action> </package> </struts>
4.根據struts2的配置,插件一個名字爲test_en_US.properties和test_zh_CN.properties的配置文件, jsp
test_en_US.properties裏面的內容爲:hello=hi,hello 測試
test_zh_CN.properties裏面的內容爲:hello=\u4F60\u597D (注意了:這個是經過編碼編譯過來的,也能夠試用MyEclipse的properties自動編輯轉換實現)。 ui
5.下面是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>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <a href="<%=basePath%>?local=zh_CN">中文</a> <a href="<%=basePath%>?local=en_US">英文</a> This is my JSP page. <br> <s:debug></s:debug> property:<s:property value="getText('hello')"/><br> text:<s:text name="hello"></s:text><br> i18n:<s:i18n name="test"> <s:text name="hello"></s:text> </s:i18n> </body> </html>
6.想要實現中英文切換,還要在action中加入這一一句話 spa
Locale locale=new Locale("zh","CN");//(這個能根據你傳來的值動態改變) ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale);
7.基本上能夠實現動態連接切換中英文了,不過,還有個小問題,須要解決,那就是,須要點擊2下中文才能切換到中文, .net
英文一樣也是,這個問題怎麼解決呢? 插件
8.想解決那個問題其實很簡單,配置一個fitler攔截器就好了,這個攔截器最好配置在struts2的攔截器前面,
攔截器的內容大概是:
String local=arg0.getParameter("local"); if(local!=null){ String loc[]=local.split("_"); Locale locale=new Locale(loc[0],loc[1]); ((HttpServletRequest)arg0).getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale); } arg2.doFilter(arg0, arg1);
這樣就能實現動態切換中英文了。