`
whp0731
  • 浏览: 174834 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

收藏夹“通过页面设置国际化语言”

阅读更多

Struts1.X 中通过页面设置国际化语言:http://wing123.iteye.com/admin/blogs/384112

 

Jsp代码 复制代码
  1. <body>   
  2. <s:a href="/Struts2/changeLang.action?lang=en">English</s:a>   
  3. <s:a href="/Struts2/changeLang.action?lang=zh">中文</s:a>   
  4.   <center>                   
  5.     <s:text name="addUser"/>   
  6.   </center>   
  7. </body>  
  <body>
  <s:a href="/Struts2/changeLang.action?lang=en">English</s:a>
  <s:a href="/Struts2/changeLang.action?lang=zh">中文</s:a>
    <center>    	    	
    	<s:text name="addUser"/>
    </center>
  </body>

 

struts.xml

Xml代码 复制代码
  1. <struts>  
  2.     <!-- 设置全局配置文件 -->  
  3.     <constant name="struts.custom.i18n.resources" value="message"/>  
  4.     <!-- 解决中文乱码 -->  
  5.     <constant name="struts.i18n.encoding" value="gbk"/>  
  6.        
  7.     <package name="Struts2" extends="struts-default">  
  8.            
  9.         <action name="changeLang" class="com.bjsxt.action.ChangeLangAction">  
  10.             <result name="success">/register2/register.jsp</result>  
  11.         </action>    
  12.            
  13.     </package>  
  14. </struts>  
<struts>
	<!-- 设置全局配置文件 -->
	<constant name="struts.custom.i18n.resources" value="message"/>
	<!-- 解决中文乱码 -->
	<constant name="struts.i18n.encoding" value="gbk"/>
	
	<package name="Struts2" extends="struts-default">
		
		<action name="changeLang" class="com.bjsxt.action.ChangeLangAction">
			<result name="success">/register2/register.jsp</result>
		</action>	
		
	</package>
</struts>

 

message_en_US.properties

Properties代码 复制代码
  1. addUser=Add User  
addUser=Add User

 

message_ zh _CN.properties

Properties代码 复制代码
  1. addUser=\u6DFB\u52A0\u7528\u6237  
addUser=\u6DFB\u52A0\u7528\u6237

 

 

ChangeLangAction

Java代码 复制代码
  1. public class ChangeLangAction extends ActionSupport{   
  2.     private String lang;   
  3.   
  4.     public String getLang() {   
  5.         return lang;   
  6.     }   
  7.   
  8.     public void setLang(String lang) {   
  9.         this.lang = lang;   
  10.     }   
  11.        
  12.     @Override  
  13.     public String execute() throws Exception {   
  14.         changeLang();   
  15.         return SUCCESS;   
  16.     }   
  17.        
  18.     /**  
  19.      * 手动改变Locale  
  20.      */  
  21.     private void changeLang() {   
  22.         Locale currentLocale = Locale.getDefault();   
  23.         //1、根据页面请求,创建下同的Locale对象   
  24.         if("en".equals(getLang().trim())) {   
  25.             currentLocale = new Locale("en","US");   
  26.         }else if("zh".equals(getLang().trim())) {   
  27.             currentLocale = new Locale("zh","CN");   
  28.         }   
  29.         /*  
  30.          * 2、设置Action中的Locale  
  31.          *    前台页面的Locale和后台session中的Locale范围是不一样的  
  32.          *    a)只改页面Locale当前页面信息会改变但提交后Locale又会改回到默认的  
  33.          *    b)改变了后台Locale,当前线程中的页面Locale并不会改变,但会随下一次提交  
  34.          *      Action一同改变,所以可能要刷新页面两次,第一次只变后台Locale,第二次  
  35.          *      前台和后台同时改变  
  36.          *        
  37.          *    为避免上述情况,需要前台和后台的Locale一起改变  
  38.          */  
  39.            
  40.         ActionContext.getContext().setLocale(currentLocale);   
  41.         ServletActionContext.getRequest().getSession().setAttribute(   
  42.                 "WW_TRANS_I18N_LOCALE", currentLocale);   
  43.     }   
  44. }  
public class ChangeLangAction extends ActionSupport{
	private String lang;

	public String getLang() {
		return lang;
	}

	public void setLang(String lang) {
		this.lang = lang;
	}
	
	@Override
	public String execute() throws Exception {
		changeLang();
		return SUCCESS;
	}
	
	/**
	 * 手动改变Locale
	 */
	private void changeLang() {
		Locale currentLocale = Locale.getDefault();
		//1、根据页面请求,创建下同的Locale对象
		if("en".equals(getLang().trim())) {
			currentLocale = new Locale("en","US");
		}else if("zh".equals(getLang().trim())) {
			currentLocale = new Locale("zh","CN");
		}
		/*
		 * 2、设置Action中的Locale
		 *    前台页面的Locale和后台session中的Locale范围是不一样的
		 *    a)只改页面Locale当前页面信息会改变但提交后Locale又会改回到默认的
		 *    b)改变了后台Locale,当前线程中的页面Locale并不会改变,但会随下一次提交
		 *      Action一同改变,所以可能要刷新页面两次,第一次只变后台Locale,第二次
		 *      前台和后台同时改变
		 *      
		 *    为避免上述情况,需要前台和后台的Locale一起改变
		 */
		
		ActionContext.getContext().setLocale(currentLocale);
		ServletActionContext.getRequest().getSession().setAttribute(
				"WW_TRANS_I18N_LOCALE", currentLocale);
	}
}

 

 

看提供的例子很重要:

运行例子struts2-blank-2.0.9
http://localhost:8080/struts2-blank-2.0.9/example/HelloWorld.action?request_locale=en有效。

原来在Struts 2.0中,通过ActionContext.getContext().setLocale(Locale arg)可以设置用户的默认语言。
Struts 2.0为您提供了一个名i18n的拦截器(Interceptor),并在默认情况下将其注册到拦截器链(Interceptor chain)中。
它的原理为在执行Action方法前,i18n拦截器查找请求中的一个名为"request_locale"的参数。
如果其存在,拦截器就将其作为参数实例化Locale对象,并将其设为用户默认的区域(Locale),最后,将此Locale对象保存在session的名为“WW_TRANS_I18N_LOCALE”的属性中。

 

除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为

WW_TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale。

 

Struts1.X 与 Struts2.X 的区别

 

1、Struts1.X 通过在HttpSession中设置固定的变量实现

 

2、Struts2.X 比较方便,只需设置Action中的Locale

 

 

分享到:
评论

相关推荐

    多语言多网站开源源码

    3. `favicon.ico`:网站的图标,显示在浏览器的地址栏或收藏夹中,增强品牌识别度。 4. `sql.txt`:可能包含了数据库的初始化脚本,用于设置和填充数据库结构和初始数据。 5. `readme.txt`:一般包含项目说明、...

    OurPHP企业版+AI创作+小程序+APP+多语言外贸建站系统 v8.1.0 bulid20240218.zip

    - `favicon.ico`:网站的图标,显示在浏览器地址栏和收藏夹中,是品牌形象的一部分。 - `admin.php`:后台管理入口,用于管理员对网站进行设置、内容管理等操作。 - `search.php`:搜索引擎功能的实现,允许用户在...

    LebiShop多语言网店系统 v6.0.00

    实际的LebiShop_v6.0.00 包含的具体组件和功能可能有所不同,但根据标题和描述,我们可以推断出这是一个功能全面、多语言支持的电商解决方案,对于希望全球化发展的商家来说,无疑是一个值得考虑的工具。

    F1book中文使用说明

    7. **多语言支持**:除了中文界面,F1book还支持其他多种语言,满足国际化的使用需求。 **三、安装与启动** 1. 下载安装:用户可以从官方网站或者通过提供的www.delphifans.com.nfo链接获取最新版本的F1book安装包...

    PHP实例开发源码—PHP网上商店系统 ECShop GBK.zip

    1. **多语言支持**:虽然本实例是GBK编码,但ECShop原生支持多语言,方便进行国际化部署。 2. **模板引擎**:ECShop采用自定义模板机制,允许商家根据需求自定义商店外观,提供了丰富的主题和布局选项。 3. **商品...

    asp.net 花店网站

    ASP.NET应用程序可以使用资源文件来存储文本,这样可以方便地切换不同语言的网站内容,对于国际化的花店网站尤其重要。 7. **instructions.txt**:这可能是一个文本文件,包含关于如何部署或运行该项目的说明。...

    天津大学计算机应用基础在线作业一答案.pdf

    19. **Internet Explorer收藏夹**:收藏夹保存的是网页的URL地址,而非网页内容本身。 20. **Windows资源管理器**:资源管理器图标可以通过设置显示在桌面上,但不是默认出现在桌面的。 这些知识点涉及到Excel操作...

    2014天津大学-《计算机应用基础》在线作业一答案-.pdf

    19. **浏览器收藏夹**:在Internet Explorer中,收藏夹收藏的是网页的URL,方便用户快速访问常用网站。 20. **Windows桌面图标**:“资源管理器”图标可以通过设置显示在桌面上,但默认并不一定会出现在桌面上。 ...

    CHM全功能生成器

    7. **多语言支持**:可以创建多语言的CHM文件,满足国际化需求。 8. **预览功能**:在生成CHM文件之前,用户可以实时预览最终效果,确保满足预期。 9. **发布选项**:一键生成CHM文件,方便分发和共享。 在实际使用...

    ios-低仿淘宝--我的.zip

    7. **国际化与本地化**:根据用户设备的设置显示相应的语言内容。 在实际的压缩包文件"TaoBao-Mine"中,可能包含了项目的源代码文件、资源文件(如图片、字体)、故事板(Storyboard)和XIB文件,这些文件共同构建...

    源码商城网络资源服务平台程序带会员中心+数据整站打包无减删+内含上百套精美模板源码产品特点详细带有安装说明.txt

    - **多语言支持**:内置多语言包,方便国际化部署。 对于希望进一步定制化服务的企业或个人开发者来说,“源码商城”提供了完善的API文档和代码注释,便于进行二次开发或增加新功能。 #### 五、总结 综上所述,...

    thinkphp响应式口罩防护用品网站模板(双语)

    双语功能则进一步扩大了服务范围,能够同时服务于中文和英文用户,提升网站的国际化水平。 【标签】"thinkphp响应式口罩防护用" 概括了模板的主要技术栈和应用领域。ThinkPHP是一个流行的PHP开发框架,以其简洁的...

    帝国CMS仿砍柴网源码带手机版,亲测好用

    - `favicon.ico`:网站的图标,显示在浏览器地址栏和收藏夹中,增加网站识别度。 - `index`:可能是一个PHP脚本,作为网站的入口文件,负责处理请求和展示内容。 - `readme.ini`:一般包含项目的基本介绍、安装...

    lightin ecshop模板

    4. `user_clips.dwt`:用户收藏夹模板,让用户能够方便地管理他们感兴趣的商品。这一功能有助于增加用户粘性,促进复购。 5. `goods.dwt`:商品详情页模板,展示商品图片、描述、价格、评价等信息,是决定用户是否...

    ECShop_V2.7.0_UTF8_Release0720

    UTF8是国际通用的多语言字符编码,适用于全球范围内的网站,确保ECShop可以支持各国语言,满足跨国电商的需求。 3. **docs文件夹** "docs"文件夹通常包含软件的文档资料,如用户手册、开发者指南、API参考等。...

    ASP源码—乐彼中英文网店系统(56770 EShop).zip

    3. **中英文网店系统**:该系统支持中文和英文两种语言,这意味着它包含两种语言版本的界面和后台管理,能够满足不同国家和地区用户的语言需求,有利于拓展国际市场的业务。 4. **商品管理**:网店系统通常包含商品...

    免授权gouagou1元夺宝源码带自动控制附带教程

    【标题】"免授权gouagou1元夺宝源码带...如果要实现多语言版本,还需要熟悉i18n(国际化)技术,对源码进行适当调整。同时,安全问题不容忽视,需要检查代码中是否存在SQL注入、XSS攻击等风险,并加强服务器安全设置。

    (自适应手机版)响应式外贸灯具网站pbootcms模板 LED灯具英文外贸网站源码下载

    - `favicon.ico`: 网站的图标,显示在浏览器的地址栏和收藏夹中。 - `api.php`: 可能是用来处理API请求的文件,如数据接口。 - `admin.php`: 后台管理入口文件,用于登录和管理网站内容。 - `index.php`: 网站的...

    2021-2022计算机二级等级考试试题及答案No.183.docx

    14. 收藏夹功能:IE浏览器的收藏夹保存的是网页的链接,方便用户快速访问。 15. CSS布局:在HTML中,div元素常用于构建页面布局。 16. Java字符串操作:String对象是不可变的,所以B选项s = s + 100;创建了一个新...

Global site tag (gtag.js) - Google Analytics