一、国际化是什么--I18N

即internationalization

首字母i-结束字母n之间有18个字母

特征:在程序不做修改的情况下,可以根据不同的语言环境显示相应内容

二、Java内置国际化

message_en_US.properties

demo = hello world!
userName = user name
password = password
welcome = welcome!

message_zh_CN.properties

demo = \u60A8\u597D\u4E16\u754C!
userName = \u7528\u6237\u540D
password = \u5BC6\u7801
welcome = \u6B22\u8FCE!

message.properties

demo = \u60A8\u597D\u4E16\u754C!
userName = \u7528\u6237\u540D
password = \u5BC6\u7801
welcome = \u6B22\u8FCE!

实现代码

<%@page import="java.util.ResourceBundle"%>
<%@page import="java.util.Locale"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试</title>
</head>
<body>
<h1>测试页面</h1>
<%
//获取当前已经安装的语言数组
Locale [] locals=Locale.getAvailableLocales();
//遍历数组
for(Locale local:locals){
//国家+国家代码
out.print("国家: "+local.getDisplayCountry()+" 国家代码:"+local.getCountry()+" ");
//语言+语言代码
out.println("语言: "+local.getDisplayLanguage()+" 语言代码:"+local.getLanguage()+"<hr/>");
}
//引用语言 此处可以更改
Locale ls=Locale.getDefault();
//使用哪个资源文件
ResourceBundle rb=ResourceBundle.getBundle("message",ls);
//输出
out.println(rb.getString("demo"));
out.println(rb.getString("userName"));
out.println(rb.getString("password"));
out.println(rb.getString("welcome"));
%>
</body>
</html>

三、Struts2实现

准备全局资源文件:通常至少三个文件

命名规则:前缀名_语言_国家.properties

内容格式:key=value

指定资源文件(设置常量)

1.struts.xml文件中:

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

2.struts.properties中:

struts.custom.i18n.resources=message
<s:text name="demo"></s:text>
<s:text name="userName" />
<s:text name="password" />
<s:text name="welcome" />

更改资源文件

message.properites

demo = 您好世界!
userName = 用户名
password = 密码
welcome = 欢迎!
submit =提交
reset=重置

message_zh_CN.properties

demo = 您好世界!
userName = 用户名
password = 密码
welcome = 欢迎!
submit =提交
reset=重置

message_en_US.properties

demo = hello world!
userName = user name
password = password
welcome = welcome!
submit =submit
reset=reset
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试</title>
</head>
<body>
<s:text name="demo"></s:text>
<s:text name="userName" />
<s:text name="password" />
<s:text name="welcome" />
<s:form action="" method="post">
<s:textfield key="userName" />
<s:password key="password"/>
<s:submit key="submit"/>
<s:reset key="reset" />
</s:form>
</body>
</html>

四、Action类实现国际化

message.properties

demo = 您好世界!
userName = 用户名
password = 密码
welcome = {0}欢迎!{1}
submit =提交
reset=重置
fail=登录失败
usermsg=用户名不能为空
usermsglength=用户名的长度为2-16位
pwdmsg=密码不能为空
pwdmsglength=密码的长度为2-16位

message_zh_CN.properties同上

message_en_US.properties

demo = hello world!
userName = user name
password = password
welcome = {0}welcome!{1}
submit =submit
reset=reset
fail=login failed
usermsg=user name do not empty
usermsglength=user name length is 2 to 16!
pwdmsg=password do not empty
pwdmsglength=password length is 2 to 16!

struts.xml

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="message" />
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="action.LoginAction" method="login">
<result name="success">
/demo.jsp
</result>
<result name="input">
/demo.jsp
</result>
</action>
</package>
</struts>

demo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试</title>
</head>
<body>
<%-- <s:text name="demo"></s:text>
<s:text name="userName" />
<s:text name="password" />
<s:text name="welcome" /> --%>
<s:form action="login.action" method="post">
<s:textfield name="username" key="userName" />
<s:password name="password" key="password"/>
<s:submit key="submit"/>
<s:reset key="reset" />
</s:form>
<hr/><br/>
<s:actionmessage />
<s:debug/>
</body>
</html>

LogionAction

package action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
private String username;
private String password; public String login() {
if ("admin".equalsIgnoreCase(username)
&& "admin".equalsIgnoreCase(password)) { this.addActionMessage(this.getText("welcome", new String[] {
username,password}));
return SUCCESS;
}
this.addActionMessage(this.getText("fail"));
return INPUT;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

LogionAction.login()验证文件

LogionAction-login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("usermsg")}</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">2</param>
<param name="maxLength">16</param>
<message>${getText("usermsglength")}</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("pwdmsg")}</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">2</param>
<param name="maxLength">16</param>
<message>${getText("pwdmsglength")}</message>
</field-validator>
</field> </validators>

五、Jsp页面国际化传参数

<!-- First Example -->
<s:i18n name="struts.action.test.i18n.Shop">
<s:text name="main.title"/>
</s:i18n> <!-- Second Example -->
<s:text name="main.title" /> <!-- Third Examlpe -->
<s:text name="i18n.label.greetings">
<s:param >Mr Smith</s:param>
</s:text>
<s:text name="welcome">
<s:param>admin</s:param>
<s:param>ffff</s:param>
</s:text>

六、资源查找顺序

七、在JSP中使用国际化

使用UI表单标志时,getText可以用来设置label属性,例如: <s:textfield name="name" label="%{getText('UserName')}"/>

八、资源文件里使用OGNL表达式

许多情况下,我们都需要在动行时(runtime)为国际化字符插入一些参数,例如在输入验证提示信息的时候。在Struts 2.0中,我们可以通过在资源文件的国际化字符串中使用OGNL做到这点: 格式为${表达式},例如:

validation.require=${fileName} is required

九、资源文件查找顺序

Struts2(十三)国际化-internationalization的更多相关文章

  1. 浅谈struts2的国际化----i18n

    可能大家在使用struts框架的时候,偶尔会看到这个词: i18n.也就是 Internationalization    i 开头,n 结尾. 总共18个字母,今天的主要内容就是环绕这 四个字母. ...

  2. (十四)struts2的国际化

    一.国际化的概念 国际化是指web程序在运行时,根据客户端请求的国家.语言的不同而显示不同的界面. 例如,如果请求来自中文客户端,则页面的显示,提示信息等都是中文,如果是英文客户端,则显示英文信息.  ...

  3. 十四、Struts2的国际化

    十四.Struts2的国际化 1.配置全局国际化消息资源包 配置全局消息资源包 <!--配置全局消息资源包 -->     <constant name="struts.c ...

  4. JavaWeb框架_Struts2_(八)----->Struts2的国际化

    这一篇博文拖了蛮久了,现在先把它完成,结束struts2这个版块,当然这只是最基础的部分,做项目还需要更深的理解.下一个web后端的版块准备做Spring框架的学习-嗯,加油! 1. Struts2的 ...

  5. struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化

    其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们使用 ...

  6. struts2 资源国际化

    web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp ...

  7. Struts2的国际化入门

    Struts2的国际化入门 Struts2国际化是建立在Java国际化的基础上的,一样是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再 ...

  8. 【Struts2】 国际化

    一.概述 二.Struts2中国际化: 2.1 问题1 全局 局部 2.2 问题2 2.3 问题3 2.4 问题4 在Action中怎样使用 在JSP页面上怎样使用 一.概述 同一款软件 可以为不同用 ...

  9. Struts2之国际化

    时间:2017-1-11 11:12 --国际化Struts2已经对国际化进行了封装,我们只需要根据其提供的API进行访问即可.要使用国际化的Action必须继承ActionSupport.1.什么是 ...

随机推荐

  1. androidStudio 改包名

    很多时候,我们需要将app换套皮肤,然后当作一个新的app来打包.如果只是更换了资源这样的安装包会将之前安装好的app替换掉. 1:不推荐的做法:直接在AndroidStudio里修改build.gr ...

  2. get新技能: 如何设置元素高度与宽度成特定比例。宽度改变,高度自动按比例改变。 例如设置宽高比16:9。

    设置宽高比在很多时候是有用的. 下面的栗子,我们设置一个容器的宽高比为16:9 //HTML代码片段 <div class="container"> <div c ...

  3. Hadoop第10周练习—Mahout部署及进行20newsgroup数据分析例子

    :搭建Mahout环境 :运行20newsgroup 内容 运行环境说明 1.1 硬软件环境 线程,主频2.2G,6G内存 l  虚拟软件:VMware® Workstation 9.0.0 buil ...

  4. Slip.js – 在触摸屏上实现列表的滑动排序功能

    Slip.js 是一个很小的 JavaScript 库,用于实现对触摸屏的互动 Swipe 和对元素重新排序列表(Reordering).Slip.js 没有任何的依赖,你可以通过自定义 DOM 事件 ...

  5. Linux用户组管理

    用户组信息存放:/etc/group 当组内只有一个用户,并且用户名和用户组名一致时默认不显示:组号1-499是系统预留的用户组,>=500的用户组是管理员手动创建的,组密码占位符用x表示   ...

  6. Linux基本操作命令总结

    1.命令基本格式     root用户:[root@localhost ~] # 或者普通用户:[hadoop@localhost ~] $     用户@主机名 目录 [#|$]管理员类型     ...

  7. Django--models连表构建

    需求 models多表(一对多.多对多.一对一)的构建 速查 1.一对多 1 2 3 class User(models.Model):     name = models.CharField(max ...

  8. C#函数式程序设计之用闭包封装数据

    如果一个程序设计语言能够用高阶函数解决问题,则意味着数据作用域问题已十分突出.当函数可以当成参数和返回值在函数之间进行传递时,编译器利用闭包扩展变量的作用域,以保证随时能得到所需要的数据. C#函数式 ...

  9. MIUI选项框开关样式模拟

    有IOS的开关模拟,当然也有MIUI的开关模拟 看到设置选项里面的开关样式,突发奇想地来试试    最终效果如图: 实现过程 1. 选项框checkbox 模拟开关当然需要一个选项框,这里用到了复选框 ...

  10. Web 前端性能优化准则

    准则01:尽量减少http请求 “只有10%-20%的最终用户响应时间花在接收请求的HTML文档上,剩下的80%-90%时间花在HTML文档所引用的所有组件(图片,script,css,flash等等 ...