struts2的国际化实现网站整体中英文切换实例代码
作者:阿木侠 发布时间:2023-08-31 02:37:40
本文介绍了struts2的国际化实现网站整体中英文切换实例代码,分享给大家,具体如下:
环境要求: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%>" rel="external nofollow" >
<title></title>
</head>
<body>
<s:i18n name="globalMessages">
<s:text name="check"></s:text>:
<a href="login.action?request_locale=zh_CN" rel="external nofollow" ><s:text name="chinese"></s:text></a>
<a href="login.action?request_locale=en_US" rel="external nofollow" ><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>
最后看看运行结果:
选择语言为中文:
选择语言为英文:
我们可以看到,已经成功实现了中英文切换,不同语言的切换只需要提供不同国家的语言资源文件即可。
来源:http://blog.csdn.net/weixin_36380516/article/details/72510292


猜你喜欢
- 1. selectKey标签查询DDLCREATE TABLE `luck_reward_info` ( `id` int NO
- WPF实现一个简单的多运算符表达式计算器,供大家参考,具体内容如下1.先看下效果图首先外围给了一个grid 把他分成了两行 第一行用来显示文
- 本文实例为大家分享了Mybatis分页插件使用的具体代码,供大家参考,具体内容如下1.分页插件简介pagehelper源码都说这是史上最好用
- 前言终于算是忙完了一个阶段!!!从4月份开始,工作内容以及职务上都进行了较大的变动,最直接的就是从海外项目组调到了国内项目组。国内项目组目前
- 前面一篇有说道如何在MyEclipse中搭建maven项目,这里将继续介绍如何在搭建好的基础maven项目中引入我们常用的javaweb框架
- springboot 启动项目打印接口列表环境springboot 2.3.2.RELEASE修改配置文件logging: le
- 前言 侧滑的实现方式有很多方式来实现,这次总结的ViewDragHe
- substring(参数)是java截取字符串的一个方法。它有两种传参的方式:第一种:public String substring(int
- 一、创建springboot项目(采用骨架方式)创建完成;我们分析下pom文件中内容:所使用到的关键依赖: <!--springBoo
- 翻看印象笔记发现自己整理过arraycopy()这样一个方法,码字放到这里:System.arraycopy()是一个静态方法,用来实现重置
- springboot环境切换失效概述最近在使用-Dspring.profiles.active=te 来切换spring-boot的环境时,
- 目录知识点介绍正文1、质量压缩2、采样率压缩3、缩放法压缩4、RGB_565 通过改变图片格式来实现压缩总结知识点介绍Android 中图片
- 前言随着网络技术的发展、计算机应用水平广泛提高,原来系统的时效性、数据的正确性、操作的方便性上都存在不足,已影响到系统的正常使用。经过考察比
- 面试题1:说说你对消息队列的理解,消息队列为了解决什么问题?我们公司业务系统一开始体量较小,很多组件都是单机版就足够,后来随着用户量逐渐扩大
- 曾经遇到过这样的问题,在我的代码中使用了通知栏,一切都正常,但是就是正在进行的通知栏中属于我的程序的那一条总是上下跳来跳去,一闪一闪的。感觉
- resultTyperesultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。如果sq
- 1. Vscode安装Visual studio code是微软发布的一个运行于 Mac OS X、Windows和 Linux 之上的,针
- 本文实例为大家分享了Android多媒体之画画板开发的具体代码,供大家参考,具体内容如下先看看效果:其实画画板的原理很简单,就是首先记录下按
- 前言OpenCVSharp是OpenCV的.NET wrapper,是一名日本工程师开发的,项目地址为:https://github.com
- 本文实例讲述了Java Swing实现JTable检测单元格数据变更事件的方法。分享给大家供大家参考,具体如下:在JTable的初级教程中往