对于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. js、css3实现图片的放大效果

    今天看网易的网站上,当我把鼠标放上去的时候发现图片放大,移开图片缩小,于是自行尝试,结果如下. 方法一:使用js和css3 效果如图: 这样的实现非常简单,就是利用js的mouseover和 mous ...

  2. hadoop2.5.2安装部署

    0x00 说明 此处已经省略基本配置步骤参考Hadoop1.0.3环境搭建流程,省略主要步骤有: 建立一般用户 关闭防火墙和SELinux 网络配置 0x01 配置master免密钥登录slave 生 ...

  3. 推荐一款好用的WSL终端模拟器

    Windows 10 中包含了一个 WSL(Windows Subsystem for Linux)子系统,我们可以在其中运行未经修改过的原生 Linux ELF 可执行文件.利用它我们可以做很多事情 ...

  4. 自定义checkbox, radio样式

    17.2.25.nimil 今天开始做百度前端学院的任务,第一个是自定义checkbox, radio样式. checkbox和radio两个标签是不可以改变样式的,background-color. ...

  5. Python基础之数据类型

    Python基础之数据类型 变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值 ...

  6. shell 获取指定目录下文件名

    有两个目录a.b,两个文件夹目录里有一些文件的文件名是一样,不过后缀名不同,我想把a文件夹下跟b文件夹里相同文件名的文件覆盖到b去,并删除b里同名而不同后缀的文件,文件很多    #!/bin/bas ...

  7. 关于margin

    ----W3School -----margin CSS 边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距. 这个简 ...

  8. Linux下,Nginx的安装、升级及动态添加模块

    系统基于ubuntu server 14.04.4 amd64 安装 第一步 下载并解压Nginx压缩包 从Nginx官网下载Nginx,或者在Linux上执行wget http://nginx.or ...

  9. 《深入理解Java虚拟机》学习笔记之类加载

    之前在学习ASM时做了一篇笔记<Java字节码操纵框架ASM小试>,笔记里对类文件结构做了简介,这里我们来回顾一下. Class类文件结构 在Java发展之初设计者们发布规范文档时就刻意把 ...

  10. 南京.NET技术行业落地分享交流会圆满成功

    3月11日,由南京.NET社区发起,纳龙科技赞助,并联合举办的,.NET技术线下交流活动,圆满成功. 这是南京.NET圈子第一次的小型聚会,为了办好此次活动,工作人员不敢怠慢.早早准备好了小奖品与水果 ...