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的知识就为大家介绍到这里,内容很简单。
Struts2之i18N国际化的更多相关文章
- struts2中的国际化
[java] view plaincopy 实现struts2中国际化其实非常简单 首先,struts2中的国际化是通过资源文件来配置的. 资源文件分为:action类级,package类级,还有we ...
- Struts2学习笔记 国际化(Internationalization)
概述 国际化(Internationalization),通途的讲,就是让软件实现对多种语言的支持.可以通过简单的设置就可以从一种语言切换到另一种语言.用的最多的地方就是在应用程序的界面表示上.我们经 ...
- Struts2 资源配置文件国际化
Struts2 资源配置文件国际化 Struts2资源文件的命名规范:basename_language_country.properties Struts2国际化如果系统同时存在资源文件.类文件,系 ...
- Django1.9开发博客(12)- i18n国际化
国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指 ...
- Bootstrap-datepicker3官方文档中文翻译---I18N/国际化(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
I18N/国际化 这个插件支持月份和星期名以及weekStart选项的国际化.默认是英语(“en”); 其他有效的译本语言在 js/locales/ 目录中, 只需在插件后包含您想要的地区. 想要添加 ...
- i18n(国际化) 和l18n(本地化)时的地域标识代码
i18n(国际化) 和l18n(本地化)时的地域标识代码 格式如 zh-CN(语言-国家) i18n(国际化) 和l18n(本地化)时的地域标识代码 格式如 zh-CN(语言-国家) 国家说明 语言说 ...
- i18n,国际化翻译,excel与js互转
背景 公司开发新产品时,要求适配多国语言,采用i18n国际化工具,但翻译字典(js的json)还是需要前端自己写的.字典最终需要转换成excel给专业人员翻译,翻译完成后再转换成js字典文件. 如果手 ...
- 【JavaWeb】i18n 国际化
i18n 国际化 什么是 i18n 国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问. 希望相同的一个网站,不同人访问的时候 ...
- Struts2 学习笔记17 I18N国际化
讲解一下国际化的内容,比如书有些大的网站可以一键切换语言,例如中英切换,这时候就会用到国际化.但是由于struts2大多数是用来写后台,国际化并不是十分重要,而且用国际化开发会减慢开发的速度,大家只要 ...
随机推荐
- 深度神经网络(DNN)模型与前向传播算法
深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一个总结. 1. 从感知机 ...
- 从0到1学习node(七)之express搭建简易论坛
我们需要搭建的这个简易的论坛主要的功能有:注册.登录.发布主题.回复主题.下面我们来一步步地讲解这个系统是如何实现的. 总索引: http://www.xiabingbao.com/node/2017 ...
- BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
CLJ就是喜欢出ctsc上讲的东西,看来还是得找时间把他的那几道题做下 首先记f(x)为答案>x的概率,那么把这个东西从0到1积分就是答案了 f(x)<=>边小于x不能使图联通的概率 ...
- java 构造器学习笔记
构造器(构造器不是方法也不是类的成员) 以前创建对象的方式, public class Constructor{ public static void main(String[] args){ per ...
- Mac环境下.Net开发
Mono是一个由Novell公司(由Xamarin发起),并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程.它包含了一个C#语言的编译器,一个CLR的运行时 ...
- HTTP和HTTPS协议
网络协议为计算机网络中进行数据交换而建立的规则.标准或约定的集合. URL:就是网址.http://www.hcios.com/archives/1547 URL就是资源的地址,位置.互联网上的每一个 ...
- jquery的ajax提交后,会跳转页面
今天在写代码的时候,遇到一个很奇怪的问题,一个form表单,用的是ajax的方式提交.结果,在服务器端php中,使用exit(),函数后都不能停止,并且继续跳转到本页.请求如下: 第一个请求中,其实我 ...
- Bean复制
有的时候我们需要将一个bean的属性赋值到另一个bean的属性中,比如用户提交过来的表单bean需要将该bean中的属性值赋值到对应的数据库bean,我们通常会以这样的方式做: User user = ...
- Maven的声明周期(Lifecycle )和命令(Phase)
生命周期(Lifecycle ) Maven有三套相互独立的生命周期(Lifecycle ): Clean Lifecycle:做一些清理工作: Default Lifecycle:构建的核心部分.编 ...
- 11g R2 RAC启动关闭步骤
1.关闭监听 /u01/app/11.2.0/grid/bin/srvctl stop listener -n redhat-rac01 /u01/app/11.2.0/grid/bin/srvctl ...