struts2的国际化实现网站整体中英文切换实例代码

本文介绍了struts2的国际化实现网站整体中英文切换实例代码,分享给大家,具体如下:

环境要求:Struts2框架环境搭建成功

为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容基本是key-value对,其中key是程序使用的部分,而value是程序的显示部分。

资源文件的命名可以是如下3种形式:

  1. baseName_language_country.properties
  2. baseName_language.properties
  3. 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> 

最后看看运行结果:

选择语言为中文:

选择语言为英文:

我们可以看到,已经成功实现了中英文切换,不同语言的切换只需要提供不同国家的语言资源文件即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Struts2 的国际化实现方式示例

    以前一直看见 i18N ,现在才知道原来 i18N 就是 Internationalization,因为以 i 开头,以 N 结尾,共18个字母,也就是国际化的意思.在百度搜索主页上没有看见中英文的切换,毕竟百度在中国是为了中国人而设计的,没必要弄个英文的切换.google搜索主页上是有的,因为谷歌在中国的服务器放到了香港,所以还有繁体切换.这是怎么做到的呢?其实原理很简单,用Struts2很容易实现的.以实现中英文切换为例做一下说明: 第一步:在src目录下添加两个资源文件,命名方式很重要的.

  • 深入理解Struts2国际化信息机制

    这两天学习了Struts2国际化信息机制,感觉很重要,所以,今天添加一点小笔记. 国际化信息机制  (三种 Action范围. Package范围. 全局) 1. 全局国际化配置信息文件 全局国际化文件,对所有Action 生效,任何程序都可以访问到,需要在struts.xml 配置常量 struts.custom.i18n.resources指定信息文件 页面product.jsp <s:fielderror/> <form action="${pageContext.req

  • struts2的国际化实现网站整体中英文切换实例代码

    本文介绍了struts2的国际化实现网站整体中英文切换实例代码,分享给大家,具体如下: 环境要求:Struts2框架环境搭建成功 为了实现程序的国际化,必须先提供程序所需要的资源文件.资源文件的内容基本是key-value对,其中key是程序使用的部分,而value是程序的显示部分. 资源文件的命名可以是如下3种形式: baseName_language_country.properties baseName_language.properties baseName.properties 其中b

  • vue中英文切换实例代码

    1.安装 vue-i18n依赖 yarn add vue-i18n 或者 npm install vue-i18n --save-dev 2.在src/components下新建文件夹language,并在文件夹language下新建zh.js及en.js [src/components/language/zh.js] module.exports = { language: { name: 'English' }, user: { login:'登录', register:'注册', logi

  • 使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换操作</title> <link rel="stylesheet"

  • 最简单的tab切换实例代码

    JS: $(".con").eq(0).show(); $(".btn span").click(function(){ var num =$(".btn span").index(this); $(".con").hide(); $(".con").eq(num).show().slblings().hide(); }) CSS: body { cursor:default; -webkit-text-s

  • Android实现图片轮播切换实例代码

    利用Android的ViewFlipper和AnimationUtils实现图片带有动画的轮播切换,其中当点击"上一张"图片时,切换到上一张图片:当点击"下一张"图片时,切换到下一张图片.其效果图如下: 设置布局文件,其内容如下: activity_image_flipper_shade.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xm

  • JS版网站风格切换实例代码

    样式表连接,设3种风格,把你要改变的图片背景等写入样式表. 复制代码 代码如下: <link media="screen" href="/css/default.css" rel="stylesheet" type="text/css" title="default" /> <link media="screen" href="/css/blue.css&qu

  • Struts2实现CRUD(增 删 改 查)功能实例代码

    CRUD是Create(创建).Read(读取).Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影.如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了,所以大家使用新框架开发OLTP(Online Transaction Processing)应用程序时,首先会研究一下如何编写CRUD.这类似于大家在学习新编程语言时喜欢编写"Hello World". 本文旨在讲述Struts 2上的CRUD开发,所以为了例子的简单易懂,我不会花时间在数

  • jquery中邮箱地址 URL网站地址正则验证实例代码

    email地址验证 复制代码 代码如下: function checkEmail(){    var email=$.trim($("#report_email").val());    if(email == ""){        $("#report_email").next('p').html("*请输入邮箱地址!");        return false;    }    var re = /^([a-zA-Z0

  • 使用jquery实现div的tab切换实例代码

    jQuery实现Tab切换 接触jQ不久以前的js代码来写的简单效果现在用jQ来写: HTML代码: 复制代码 代码如下: <div id="sidebar-tab"> <div id="tab-title"> <h3><span class="selected">最新评论</span><span>近期热评</span><span>随机文章</s

  • Struts2 文件上传进度条的实现实例代码

    最近在写我们大三项目的一个视频文件上传的页面,实现后台对上传的进度进行监听,然后将监听的信息返回给前台页面. 前台的页面效果图: 前台进度条控件选择使用easyui 的progressbar控件. 详细的使用说明参考官网文档:http://www.jeasyui.com/documentation/index.php 所有需要引入jquery-1.11.1.min.js 以及jquery.easyui.min.js 一.前台的代码: <%@ page language="java"

随机推荐

其他