首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>jsp>jsp基础/配置>正文

利用标记库国际化JSP

http://www.oklinux.cn  2005-01-19  来源: oklinux收集整理   会员收藏  游客收藏  【 】 

内容:

综述
JSP国际化的简介
如何配置i18n标记库
i18n标记库的各种标记和使用方法
定义LOCALE 信息
下节介绍
关于作者


Also in the Java zone:

教学
工具与产品
代码与组件
所有文章
实用技巧




翟斌(David Zhai) ([email protected])
2002 年 5 月

本文对JSP国际化的简要介绍,着重探讨了使用标记库对JSP进行国际化的过程,并通过详细的示例演示了如何使用jakarta的i18n标记库。
综述

当我们在用JSP设计面对不同国家的站点时,特别是那些在界面之间没有特别大差别的商业站点,我们可以利用JSP的一些机制来支持国际化。

通常有三种方式可以实现国际化

为每个国家编写一套JSP代码, 可以通过嵌入BEAN和标记处理器的方式重用一些逻辑代码。
维护统一的JSP代码,直接利用JAVA的资源捆绑机制实现国际化。
维护统一的JSP代码,利用通用的或自定义标记库实现国际化。
我们重点讨论第三种方法,因为它有很好的灵活性,可维护性和可扩展性。

其实标记库也是利用JAVA的资源捆绑机制, 只是把国际化常用的方法封装的更容易使用,而且更符合JSP的编程思想, 把表述层和逻辑层分开。通用的标记库比较著名的有JAKARTA的I18N标记库。本文包括以下内容:

JSP国际化的简介
如何配置i18n标记库
详细介绍i18n标记库的各种标记和使用方法
一个简单的例子
JSP国际化的简介

JSP的国际化的基础是JAVA的国际化,都是利用资源捆绑机制把资源与代码分离,通过读取相应的locale信息,自动的匹配相应的资源,并在此基础上实现文本,时间,日期,货币,数字等格式的国际化。关于JAVA国际化的基本概念和方法见The Java™ Tutorial Internationalization 。

但同一般的JAVA程序的国际化的过程和具体方法还是有很多区别。主要在与locale信息的来源: JSP的locale信息在大部分情况下来自与浏览器,而一般的JAVA程序的locale大都来自当前的JVM。

利用JSP的标记库机制实现国际化:通过使用通用或用户自定义的I18N标记库,可以有很好的灵活性,可维护性和可扩展性。但需要在服务器端配置标记库。

如何配置i18n标记库

首先需要一个支持JavaServer Pages Specification 1.1或更高版本的servlet容器,如Tomcat 4.03,然后按以下步骤配置你的网络服务器。

拷贝标记库的描述文件到网络服务器的/WEB-INF子目录中
拷贝标记库的JAR文件到网络服务器的/WEB-INF/lib子目录中
在/WEB-INF/web.xml文件中加入<taglib>元素

<taglib>
<taglib-uri>;http://jakarta.apache.org/taglibs/i18n-1.0<;/taglib-uri>
<taglib-location>/WEB-INF/i18n.tld</taglib-location>
</taglib>




为了在你的JSP中可以使用它,在每个页面的最顶端加入


<%@ taglib uri="http://jakarta.apache.org/taglibs/i18n-1.0" prefix="i18n" %>




其中"i18n"是该标记的前缀,您可以起其他你喜欢的名字。

i18n标记库的各种标记和使用方法

bundle

为该页的其他I18N标记建立ResourceBundle.如果没有给定locale信息,它会使用浏览器的设定。

注意:该标记必须写在该页任何HTML标记以前,以便根据所选择的locale信息设置Content Type。


<%@ taglib uri="http://jakarta.apache.org/taglibs/i18n-1.0" prefix="i18n" %>
<i18n:bundle baseName="i18n-test"
id="bundle"/>
<HTML>
<HEAD>
......




表1:bundle的属性描述

属性名称 描述
id 该ResourceBundle的标识变量, 通过它,其他标记和代码可以访问该ResourceBundle, 当一个页面需要多个ResourceBundle时,可以用它来区分.
baseName ResourceBundle 的基本名,可以连同locale信息定位所需的ResourceBundle.
changeResponseLocale 指定是否改变响应的locale以匹配该标记所用的locale
scope 指定该标记可被访问的范围. (application, session, request, page*)
locale 用户可以指定首选的locale
localeAttribute 不赞成使用
localeRef 用户可以用属性名指定首选的locale,这个属性名必须在可被访问的范围内
debug 调试开关

*page: 对象被绑定到javax.servlet.jsp.PageContent中,只在该页中可被访问

Request: 对象被绑定到javax.servlet.ServletRequest中,只要HttpRequest对象存在,就可以通过它访问。

Session: 对象被绑定到javax.servlet.jsp.PageContent中,并调用session的getArribute()方法来访问。

Application: 对象被绑定到javax.servlet.ServletContext中,是最持久的范围,所有客户都可以访问到。

Message

从默认或指定的ResourceBundle中读取文本并利用java.text.MessageFormat格式化显示文本


<i18n:message key="column1.header"/>




表2:Message的属性描述

属性名称 描述
id 该Message的标识变量, 通过它,其他标记和代码可以访问该Message
key 用它得到ResourceBundle中的显示文本
args 利用数组参数通过java.text.MessageFormat格式化显示文本
bundle 一个ResourceBundle的参考
bundleRef 一个代表ResourceBundle的参考的属性名
debug 调试开关

Locale

定义LOCALE 信息

JSP国际化和一般的JAVA应用程序国际化的最重要的区别在于Locale信息的源自浏览器, 具体的讲来自request对象.而jakarta的i18n标记库在缺省的情况下可以自动读取request对象中的Locale信息,从而简化了编程和维护的复杂度,当然用户也可以显式的定义Locale信息,解决特殊的显示问题。

表3:Locale的属性描述

属性名称 描述
id 该Locale的标识变量, 通过它,其他标记和代码可以访问该Locale
locale 用户可以指定首选的locale
localeRef 用户可以用属性名指定首选的locale,这个属性名必须在可被访问的范围内
language 用户可以指定首选的语言
country 用户可以指定首选的国家

一个简单的例子:

i18n-test.jsp


<%@ taglib uri="http://jakarta.apache.org/
taglibs/i18n-1.0" prefix="i18n" %>
<i18n:bundle baseName="i18n-test"
id="bundle"/>
<%
java.util.TreeSet set = new java.util.TreeSet();
for ( java.util.Enumeration enum = bundle.getKeys();
enum.hasMoreElements(); )
{
set.add(enum.nextElement());
}
%>
<HTML>
<HEAD>
<TITLE>Examples of I18N Custom Tag Library
Tag Usage</TITLE>
</HEAD>
<BODY>
This page displays all key/value pairs in the bundle.
locale = <b><%= pageContext.getResponse().
getLocale() %></b><br>
charset = <b><%= pageContext.getResponse().
getCharacterEncoding() %></b><br>
<H2>WebApp translations</H2>
<TABLE>
<%
int index = 0;
for ( java.util.Iterator iter = set.iterator(); iter.hasNext(); )
{
String akey = (String)iter.next();
if ( index++ % 2 == 0 )
{
%>
<TR BGCOLOR="#e0e0e0">
<%
}
else
{
%>
<TR>
<%
}
%>
<TD><%= akey %></TD><TD><
i18n:message key="<%= akey %>" /><TD>
</TR>
<%
}
%>
</TABLE>
</BODY>
</HTML>




i18n-test.properties


test1 = Hello world
test2 = Now you can let jsp i18n using i18n taglib!




i18n-test_zh_CN.properties


test1 = 你好世界
test2 = 现在你可以用i18n标记库国际化JSP了。




注意要把资源文件拷贝到/WEB-INF/classes子目录下

下节介绍

利用I18N 标记库, 除了可以方便的对文字国际化外,还可以对各种格式进行国际化,如时间,日期,货币,数字等. 我们下次再讨论。

关于作者
翟斌(David Zhai)毕业与北京航空航天大学自动控制专业,学士学位。毕业后一直从事软件开发工作,对网络安全,国际化/本地化有一定的研究。现任职于北京一家开发软件国际化工具的专业公司,从事软件国际化工具的研发。联系方式:[email protected]

--摘自IBM网站
http://www-900.ibm.com/developerWorks/cn/java/l-jspinternationalization/index.shtml 

上一篇:JSP开发导引   下一篇:JSP开发工具的选择


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·JSP开发导引
·JSP开发工具的选择
·与其他语言的比较??了解ASP、PHP和JSP
·Javajsp好的入门文章共赏
·JSP-动态网页新的选择
·JavaServer Page(JSP)简介
·jsp中关于html的转换
·如何在JSP中添加自己的Tag
·Servlet和JSP的通信的一种方法
·JSP构架--2种方式
·JSP白皮书
·Jsp+JavaBean循序渐进教程(六)
·Jsp+JavaBean循序渐进教程(七)
·ASP与JSP的比较
·JSP简明教程:令人兴奋的脚本编程
·JSP里request变量列表
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·JSP分页技术实现
·基础才是最重要的。
·基础开发入门级:JSP与ASP的比较
·weblogic的几个基础问题(转)
·Resin基础
·IBM IT 3月基础架构管理大会
·单点登录基础设施JOSSO 1.4 发布
·创建JSP站点
·动态网页制作技术JSP与ASP的比较
·掌握自定义 JSP 标签
·Jsp + JavaBean循序渐进教程(一)
·编译时标签(对JSP进行的XSLT预处理)
  阅读排行
·JSP里request变量列表
·单点登录基础设施JOSSO 1.4 发布
·weblogic的几个基础问题(转)
·基础才是最重要的。
·JSP分页技术实现
·java,jsp,javascript中如何实现将统计
·关于jsp保存文件到服务器
·Resin基础
·可以自动跳转到出错页面的servlet/jsp
·Servlets和JSP开发原则
·jsp基础学习资料
·Jsp + JavaBean循序渐进教程(一)
·jsp留言板源代码4
·JSP/Servlet构建三层管理信息系统
·jsp预编译工具
网摘收藏: