Struts国际化

国际化和本地化

软件的全球化意味国际化和本地化。

国际化:(Internationalization:l18N):使 程序在做任何修改的情况下 就可以在不同 的 国家或地区和不同的语言环境下,按照当地的语言和格式习惯显示字符。

本地化(Localization:L10N):一个国际化的程序,当它运行在本地机器上时 。能够根据本地机器的语言和地区设置显示相应的 字符,这个过程叫本地化。

-----资料--------------------------------------------------------------------------

Java 程序的国际化思想是将程序中的提示信息、错误信息等放在资源文件,为不同的国家/语言编写对应的资料文件。资源文件由很多key-value 对组成,key保持不变,value 随国家/语言的不同而不同。这些资源文件属同一个资源系列,使用共同的基名(base name)。通过在基本后面添加ISO-639标准的语言代码,添加ISO-3166标准的国家和地区代码来进行区分。比如规定基名为ApplicationResources,可以定义:

ApplicationResources_en.properties:所有英文语言的资源

ApplicationResources_zh.properties:所有中文语言的资源

常用的ISO-639言语代码有zh(汉语) en(英语) fr(法语) de(德语)等;

 均有两个小写字母组成。

常用的ISO-3166标准的国家和地区码有CN(中国大陆),US(美国)GB(英国)TW(中国台湾)HK(中国香港)等,均由两个大写字母组成。

注意:语言代码位于国家和地区代码的前面,位置不能颠倒;国家和地区代码不能单独使用,而语言代码可以。

------------------------------------------------------------------------

针对一个例子:

---问题---------------------------------------

1.针对英国用户显示英文界面和英文验证信息

2.针对中国香港用户显示中国香港界面和英文验证信息

3.针对中国大陆用户显示中国大陆界面和英文验证信息


----分析-----------------------------------------------------------------------------------------

(1)在struts.xml中指定资源文件的基名及存储的路径

(2)按照需求创建对应的三个资源文件,用来存放相应的资源

(3)实现JSP页面信息的国际化显示(以注册页面为例)

(4)实现验证错误信息的国际化显示


--

1.在struts.xml中指定资源文件的基名及存储路径;

  

<struts>

    <constant name="struts.custom.i18n.resources" value="message"/>
    <constant name="struts.i18n.encoding" value="UTF-8"/>
   通过“struts.custom.i18n.resources”属性基名:message;

   如果要进行国际化必须要指定“utf-8”

   <constant name="struts.i18n.encoding" value="UTF-8"/>
 


2.按照要求创建对应的三个资源文件 

根据设置的路径下存放:

message path

(3)实现JSP页面国际化显示

<%@ page language="java" import="java.util.*;" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title><s:text name="register.page" />
		</title>
	</head>
	<body>
		<h2>
			<s:text name="register.title" />
		</h2>
		<s:form action="register">
			<s:textfield name="user.name" key="name" />
			<s:password name="user.password" key="password" />
			<s:password name="repassword" label="%{getText('repassword')}" />
			<s:textfield name="user.telephone" label="%{getText('telephone')}" >
			<s:textfield name="user.username" label="%{getText('username')}" />
			<s:submit value="%{getText('submit')}" />
		</s:form>
	</body>
</html>


页面信息的国际化实现

页面的非表单内容 :页面的标题,各级标题 <s:text name="key">

页面表 表单提示文本 ,文本框提示文字 key="key"

单内容                   label="%{getText('repassword')}"
表单按钮文字  提交,重置按钮文字     value ="%{getText('submit')}"

4.验证框架的配置文件,通过<message> 标签 的 key 属性指定对的验证错误的信息。

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE validators PUBLIC 
  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
   <field name="user.name">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message key ="name.null"/>
		</field-validator>
		<field-validator type="stringlength">
			<param name="maxLength">10</param>
			<param name="minLength">6</param>
			<message key ="name.length"/>
		</field-validator>
	</field>
	<field name="user.password">
		<field-validator type="requiredstring">
			<message key="password.null"/>
		</field-validator>
		<field-validator type="stringlength">
			<param name="minLength">6</param>			
			<message key="password.length"/>
		</field-validator>
	</field>
	<field name="repassword">
		<field-validator type="requiredstring">
			<message key="repassword.null"/>
		</field-validator>		
		<field-validator type="fieldexpression">
			<param name="expression">user.password==repassword</param>
			<message key="repassword.same"/>
		</field-validator>
	</field>	
	<field name="user.telephone">		
		<field-validator type="requiredstring">
			<message key="telephone.null"/>
		</field-validator>		
		<field-validator type="regex">
			<param name="expression">^(\d{3,4}-){0,1}(\d{7,8})$</param>
			<message>电话号码格式不正确</message>
		</field-validator>
	</field>
	<field name="user.username">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message key="username.null"/>
		</field-validator>
		<field-validator type="stringlength">
			<param name="maxLength">4</param>
			<param name="minLength">2</param>
			<message key="username.length" />
		</field-validator>
	</field>
</validators>  		

---资料-------------------------------------------------------------

资料文件中被保存的字符串资源,通过时7位的ASCII码字符。对于中文字符 ,需要转换成相应的Uicode编码,其格式为"\uXXXX"

资源文件的范围:


1.前面提到的是资源文件是全局资源文件。所有的Action类都可以访问.

2.包范围资源文件。命名方法:package_language_country.properties

处于该包及子包下的action,才可以访问该文件.


3.Action范围资源文件 命名格式:ActionName_languge_country.properties。

ActionName : cn.jbit.action.RegisterAction 可以在cn.jbit.tion 的Action访问。


4.在查找 源文件指定key的内容时,系统会首先查看当前包下的Action范围资源文件,如果没有找到,将沿着当前包往上逐级查找基名为package的资源文件。一直到最顶级包。如果还是没有找到,将从常量"struts.custom.il8n.resoures"指定全局资源文件中查找。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值