对于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的知识就为大家介绍到这里,内容很简单。

Struts2之i18N国际化的更多相关文章

  1. struts2中的国际化

    [java] view plaincopy 实现struts2中国际化其实非常简单 首先,struts2中的国际化是通过资源文件来配置的. 资源文件分为:action类级,package类级,还有we ...

  2. Struts2学习笔记 国际化(Internationalization)

    概述 国际化(Internationalization),通途的讲,就是让软件实现对多种语言的支持.可以通过简单的设置就可以从一种语言切换到另一种语言.用的最多的地方就是在应用程序的界面表示上.我们经 ...

  3. Struts2 资源配置文件国际化

    Struts2 资源配置文件国际化 Struts2资源文件的命名规范:basename_language_country.properties Struts2国际化如果系统同时存在资源文件.类文件,系 ...

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

    国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指 ...

  5. Bootstrap-datepicker3官方文档中文翻译---I18N/国际化(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)

    I18N/国际化 这个插件支持月份和星期名以及weekStart选项的国际化.默认是英语(“en”); 其他有效的译本语言在 js/locales/ 目录中, 只需在插件后包含您想要的地区. 想要添加 ...

  6. i18n(国际化) 和l18n(本地化)时的地域标识代码

    i18n(国际化) 和l18n(本地化)时的地域标识代码 格式如 zh-CN(语言-国家) i18n(国际化) 和l18n(本地化)时的地域标识代码 格式如 zh-CN(语言-国家) 国家说明 语言说 ...

  7. i18n,国际化翻译,excel与js互转

    背景 公司开发新产品时,要求适配多国语言,采用i18n国际化工具,但翻译字典(js的json)还是需要前端自己写的.字典最终需要转换成excel给专业人员翻译,翻译完成后再转换成js字典文件. 如果手 ...

  8. 【JavaWeb】i18n 国际化

    i18n 国际化 什么是 i18n 国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问. 希望相同的一个网站,不同人访问的时候 ...

  9. Struts2 学习笔记17 I18N国际化

    讲解一下国际化的内容,比如书有些大的网站可以一键切换语言,例如中英切换,这时候就会用到国际化.但是由于struts2大多数是用来写后台,国际化并不是十分重要,而且用国际化开发会减慢开发的速度,大家只要 ...

随机推荐

  1. 浅谈C#集合【转】

    集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在.俗话说知其然,知其所以然,平常看到IEnumerable, ...

  2. 【安装eclipse, 配置java环境教程】 编写第一个java程序

    写java通常用eclipse编写,还有一款编辑器比较流行叫IJ.这里我们只说下eclipse编写java的前期工作. 在安装eclipse之前要下载java的sdk文件,即java SE:否则无法运 ...

  3. PHP 代码审计代码执行注入

    PHP 代码审计代码执行注入 所谓的代码执行注入就是 在php里面有些函数中输入的字符串参数会当做PHP代码执行. 如此的文章里面就大有文章可以探究了 一 常见的代码执行函数 Eval,assert, ...

  4. Linux下自动备份MySQL

    使用expect和mysqldump备份 expect expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预. 例如,执行shell脚本的过程中,需要输入用户名.密码 ...

  5. fir.im Weekly - 8 个不能错过的 iOS / Android 技术分享

    本期 fir.im Weekly 收集了 2 月下旬新鲜出炉的 iOS /Android 技术分享.源码等,iOS 中图片技术的解压缩.逆向实战.iOS SDK 实践,Android架构思考.Andr ...

  6. HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(二)

    HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(一) 下面来查看其他对保存HSTS信息的enabled_sts_hosts ...

  7. FineUIMvc随笔 - 动态创建表格列

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户需求 用户希望实现动态创建表格列,在 WebForms 中,我们通过在 Page_Init 中创建列来实现: 但是在 MVC ...

  8. yum的用法

    yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum update不同的是,连旧的淘汰的包 ...

  9. CSS Sprites (css精灵)

    CSS Sprites CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不 ...

  10. 关于使用mybatis中mapper instrances,通过session另一种操作方式

    String resource = "mybatis-config.xml"; InputStream inputStream = null; try { // 获取SqlSess ...