Struts2国际化 自动切换语言

本文介绍如何在Struts2框架中实现多语言支持,包括配置资源文件、使用标签获取国际化文本,以及通过自定义Action实现动态切换语言环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 测试项目工程的结构图如下:

globalMessage.properties为默认配置资源文件

globalMessage_zh_CN.properties为中文配置资源文件

globalMessage_en_US.properties为英文配置资源文件

 

接着 在资源文件中添加我们index.jsp界面中需要国际化效果的键值对信息

globalMessage.properties,globalMessage_zh_CN.properties的内容为:



 

globalMessage_en_US.properties的内容为:

username=Username
password=Password
submit=Submit
china=China
us=English

 完成了资源文件的基本配置 就要设计index.jsp

struts2中为了获取国际化资源信息同样是采用struts标签<s:text> 或者 form表单中可通过标签中的key属性来获取。

index.jsp

<s:form action="userAction" method="post">
    	<s:textfield key="username" name="name"></s:textfield><s:fielderror fieldName="name"></s:fielderror>
    	<s:password key="password" name="password"></s:password><s:fielderror fieldName="password"></s:fielderror>
    	<s:submit key="submit"></s:submit>
    </s:form>
    
    <s:url action="localeAction" id="url">
    	<s:param name="lan" value="1"></s:param>
    </s:url>
    <s:url action="localeAction" id="url1">
    	<s:param name="lan" value="2"></s:param>
    </s:url>
	    <a href="<s:property value="#url"/>"><s:text name="china"></s:text></a>
	    <a href="<s:property value="#url1"/>"><s:text name="us"></s:text></a>

 

从api我们看出 getText方法 是类ActionSupport实现了接口TextProvider

在我们查看 TextProvider 的api中 我们可以看到这么一段话:

You can override LocaleProvider.getLocale() to change the behaviour of how to choose locale for the bundles that are returned. 

Typically you would use the LocaleProvider interface to get the users configured locale. 

 大意也就是 我们如果想改变系统的locale 可以通过重写LocaleProvider的 getLocale()方法 从而来实现

那么我们就可以自定义action让其实现接口LocaleProvider 重写getLocale()方法。让其返回我们设置的locale

 本次我们是通过链接 访问我们自定义的action 通过参数 来设置不同环境的locale 具体代码如下:

Action代码:

import java.util.Locale;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.LocaleProvider;

public class ChangeLocale extends ActionSupport implements LocaleProvider {

	private String lan;
	
	public String getLan() {
		return lan;
	}
	public void setLan(String lan) {
		this.lan = lan;
	}
	public Locale getLocale() {
		System.out.println("changelocale-------1");
		Locale locale=null;
		if(lan.equals("1")){
			locale=new Locale("zh", "cn");
		}else if(lan.equals("2")){
			locale=new Locale("en", "US");
		}
		return locale;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(lan);
		System.out.println("changelocale-------2");
		ActionContext ac=ActionContext.getContext();
		ac.setLocale(getLocale());
		return "success";
	}
	
	
}

 Struts.xml:

<struts>

    <constant name="struts.devMode" value="false" />
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!-- 将错误消息转换成中文的文件,也称为国际化.我就直接放置在src目录下所以value不带包名 -->
    
    <constant name="struts.custom.i18n.resources" value="globalMessage" />
    
    <package name="default" namespace="/" extends="struts-default">
   		
   		
   		
   		<action name="localeAction" class="ChangeLocale">
            <result name="success">/index.jsp</result>
                
        </action>
       
    </package>

    

</struts>

 效果图:



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值