Struts2之i18N国际化

  对于i18n其实没有太多内容,一般的公司用不到这些内容,除非是跨国公司,但即便是跨国公司也不一定会使用i18n来进行国际化处理,所以本篇内容仅供大家了解,不做深入的探讨,希望通过本篇内容,可以帮助大家了解i18n的使用。好了废话不多说,下面进入今天的正题。

  首先说一下i18n在Struts中分为三个等级:Action、package、Application三种,分别对应着其作用的范围,我想你一定已经知道什么意思了。先通过一个java project简单认识一下i18n的使用:i18n文件上的后缀名默认都为:.properties,简单介绍一下i18n文件的命名规则:文件名+"_"+地区英文缩写(zh:大中华区;en:英语)+"_"+国家英文代码(CN:中国;US:美国)+".properties";需要指明的是多个properties文件的文件名称必须一致,通过地区英文缩写和国家英文代码来区分不同的语境。这里我们通过最基本的java程序为你简单呈现一下i18n的使用。

  既然是Struts中的i18n使用,首先我们先来看一下我们的国际化配置文件:app_en_US.properties与app_zh_CN.properties的信息:

美国

welcome.msg = welcome US

中国

welcome.msg = welcome CN
welcome.zh =\u4E2D\u534E

  这里说明一点,这里的welcome.zh =\u4E2D\u534E是中文“你好”的字符编码,为什么要使用字符编码,为了防止出现中文乱码,那么问题来了,我们总不能先用这样一个一个的转吧,这里我们可以通过myeclipse的properties文件打开方式,将我们的中文信息输入,myeclipse会自动为我们将中文转化为字符编码格式。

  说了这么多,下面我们来看一下具体的程序代码怎么编写吧:

import java.util.Locale;
import java.util.ResourceBundle;

public class Iu8n {
    public static void main(String[] args) {
        ResourceBundle resourceBundleUS = ResourceBundle.getBundle("app", Locale.US);//加载英文配置文件
        System.out.println(resourceBundleUS.getString("welcome.msg"));
        ResourceBundle resourceBundleCN = ResourceBundle.getBundle("app", Locale.CHINA);//加载中文配置文件
        System.out.println(resourceBundleCN.getString("welcome.msg"));
        System.out.println(resourceBundleCN.getString("welcome.zh"));
    }
}

  你是不是已经明白什么意思了呢,对就是通过加载不同的配置文件来实现不同语言环境下文本信息动态变化的。当然在Struts中我们不需要做这些操作,我们只需要配置好properties文件,通过el表达式,在不同语言环境下进行切换即可。说来这么多,下面我们开始具体的内容介绍,首先介绍一下关于i18n文件的三种不同级别的使用:

  三种级别的使用,我们使用的配置文件都一样,所以先给大家看一下我们的properties文件的内容:

User_en_US.properties:

welcome.msg =welcome\:

User_zh_CN.properties:

welcome.msg =\u6B22\u8FCE\u4F60\uFF1A

  关于三种级别properties文件的区别在于文件名,Action级别的配置文件,文件名必须和Action的名称一致,和action类放置于同一个包下;package级别的配置文件,文件名必须为package,既然是包级别的配置文件,所以文件需要放置于指定的包下;最后就是我们的application级别的配置文件了,这个文件应置于src目录下,文件名没有特殊要求。

  我们的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.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="user"></default-action-ref>

        <action name="user" class="com.edu.test.User">
            <result name="success">/success.jsp</result>
        </action>
    </package>

</struts>

  我们的Action文件:

public class User extends ActionSupport {

    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

}

  这里我们通过登录功能的实现来模拟国际化操作,首先我们先看一下action级别的配置文件的使用,上面已经提到,Action级别的配置文件只能在对应的Action下使用,这个怎么来判断呢,我们到struts.xml文件下,看我们的Action result返回到那些jsp页面,这些jsp页面才可以使用我们配置的国际化文件,我们看一下我们的success.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<%@ taglib uri="/struts-tags" prefix="s" %>

<!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">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <s:property value="getText(‘welcome.msg‘)" /><s:property value="name"/></br>
    <s:debug></s:debug>
  </body>
</html>

  下面我们看一下package级别的内容,package级别的配置文件,和action级别的使用基本一致,只是在配置文件的文件名和创建位置稍微有些不同外,其它内容完全一致,这里就不在详述,大家可以尝试一下。

  下面我们看一下appliction级别的配置文件的使用,这里我们的配置文件名我设置的为:app_en_US.properties与app_zh_CN.properties,我们这里需要配置一些我们的struts.xml文件,添加全局i18n文件配置:

<constant name="struts.custom.i18n.resources" value="app"></constant>

  这样我们的所有页面便都可以使用配置信息了。

  下面我们再来看一个小问题,我们通过配置文件添加内容后缀,这样我们通过配置文件便可以将我们的其他信息与我们的国际化文件匹配起来:

welcome.msg =welcome\:{0}
welcome.msg =\u6B22\u8FCE\u4F60\uFF1A{0}

  这里的{0}就是指我们需要传递的参数,这样的话我们的sucess.jsp文件就可以这样使用了:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<%@ taglib uri="/struts-tags" prefix="s" %>

<!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">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <s:text name="welcome.msg" >
        <s:param value="name"></s:param>
    </s:text>
    <s:debug></s:debug>
  </body>
</html>

  最后在为大家介绍一下,如何动态切换网页语言环境,我们一定注意到过,一些网站设置有不同的语言环境,当我们点击不同的语言时,网页的语言会动态进行切换,接下来我们就来看一下这是如何实现的:

app_en_US.properties

input.name=name\:
input.password=password\:

app_zh_CN.properties

input.name=\u59D3\u540D\uFF1A
input.password=\u5BC6\u7801\uFF1A

  我们的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.enable.DynamicMethodInvocation" value="true" />

    <constant name="struts.devMode" value="true" />

    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

    <constant name="struts.custom.i18n.resources" value="app"></constant>

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="Lang"></default-action-ref>

        <action name="Lang" class="com.edu.test.Lang">
            <result name="success">/index.jsp</result>
            <result name="error">/success.jsp</result>
        </action>
    </package>

</struts>

  我们的index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>国际化</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">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <form action="Lang" method="post">
        <s:property value="getText(‘input.name‘)" /><input type="text" name="name" placeholder="请输入姓名"><br/>
        <s:property value="getText(‘input.password‘)" /><input type="text" name="password" placeholder="请输入密码"><br/>
        <input type="submit" value="登录"><br/>
        <a href="Lang?request_locale=en_US">US</a> | <a href="Lang?request_locale=zh_CN">CN</a>
    </form>
  </body>
</html>

  好了关于struts中i18n的知识就为大家介绍到这里,内容很简单。

时间: 2024-11-05 19:11:57

Struts2之i18N国际化的相关文章

Struts2的i18n国际化-关于默认资源文件

昨天接到一个新的任务,将之前的一个供货商管理系统进行国际化支持,该系统采用了Status2框架,因此对Struts2的国际化进行了一些研究,下面是关于国际化配置的一些结果,分享给大家参考: 1.    建立资源文件: 建立资源文件如:             message.properties:作为默认资源文件使用,当无法匹配其他资源文件时使用:             message_zh_CN.properties:中文语言资源文件. 因为需求目前仅需要英文语言和中文语言,因此只建立了这两

Struts2对于i18n的支持

1 2 struts.xml中可以配置 3 <constant name="struts.custom.i18n.resources" value="itcast"> 指定全局资源文件 4 全局资源文件/包范围资源文件/动作类的资源文件 5 全局资源文件:src下放到WEB-INF/classes目录下 6 包范围资源文件:服务于Java类中的包下的动作类的. java类访问资源文件 7 取名:package_语言_国家.properties 8 9 动

struts2的返回类型、struts的标签库、struts2中完成国际化

struts2的返回类型:在jsp-servlet中, 返回的类型主要有 转发, 重定向: 转发主要是RequestDispatcher的forward方法来进行操作的req.getRequestDispatcher("goods/queryGoodFenYe.jsp").forward(req, resp);重定向主要使用response对象的一些方法来操作:1.response.sendRedirect("index.jsp");2.response.addHe

Struts2中的国际化

1为什么需要国际化呢?? 几年之前,应用程序开发者能够考虑到仅仅支持他们本国的只使用一种语言(或者有时候是两种)和通常只有一种数量表现方式(例如日期.数字.货币值)的应用.然而,基于web技术的应用程序的爆炸性增长,以及将这些应用程序部署在Internet或其它被广泛访问的网络之上,已经在很多情况下使得国家的边界淡化到不可见.这种情况转变成为一种对于应用程序支持国际化(internationalization,经常被称做"i18n",因为18是字母"i"和字母&qu

6、Struts2中的国际化、Ognl(对象图导航语言)表达式语言

Struts2中的国际化.Ognl(对象图导航语言)表达式语言 回顾:Servlet 中国际化: 1). 写资源文件 基础名.properties [默认的语言环境的配置] 基础名语言简称国家简称.properties 2). 读取资源文件,再使用 程序:ResourceBundle Jsp: jstl提供的格式化与国际化标签库. 一.Struts2中国际化: 1. 写资源文件 (同servlet) 2. 读资源文件 程序:ResourceBundle (同servlet) JSP: 1)jst

Django1.9开发博客(12)- i18n国际化

国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指定他们哪些app应该被翻译或被格式化为本地形式. 允许用户根据自己的偏好来实现本地化显示.翻译依据语言,格式化依据国家, 这些信息由浏览器中的Accept-Language头来决定.不过目前为止时区还未能实现. 参考官方文档:https://docs.djangoproject.com/en/1.9

Struts2笔记——6.国际化

Struts2的国际化是建立在java的国际化基础上的.通过提供不同国家或者语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再获取该资源文件中的指定key对应的消息.Struts2框架对这一过程进行了进一步的封装,简化了应用程序的国际化.它可以为jsp,Action,全局范围提供不同的国际化资源,因此维护的时候可以分开维护.Struts2的国际化可以按照以下步骤进行:加载国际化资源文件.输出国际化. action范围.包范围的国际化资源会被系统自动加载

Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. JSTL标签库,是由一些Java类组成的. JSTL组成: JSTL –Core 核心标签库. 重点 JSTL – I18N - 国际化标签库.Internationalization- I18N JSTL – SQL – 数据库操作标签(有悖于MVC设计模式),现在都不用这个. JSTL - Fu

vue 项目的I18n国际化之路

I18n (internationalization ) ---未完善 产品国际化是产品后期维护及推广中重要的一环,通过国际化操作使得产品能更好适应不同语言和地区的需求 国际化重点:1. 语言语言本地化2. 文化颜色.习俗等3. 书写习惯日期格式.时区.数字格式.书写方向备注:项目中会兵分两路,一路是语言的国际化,另一路主要为文化国际化 产品设计之初引入国际化标准,符合项目的开发流程.国内主要主要三点,一个是港澳台采用中文繁体+英文,内陆通俗中文简体,新疆等地区采用文化标准. Vue-I18nV