您的位置:首页 > 编程语言 > Java开发

Struts国际化

2013-10-14 17:34 295 查看
国际化和本地化

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

国际化:(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.按照要求创建对应的三个资源文件 

根据设置的路径下存放:



(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"指定全局资源文件中查找。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息