`
xyheqhd888
  • 浏览: 403715 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

信息绑定(国际化处理)

阅读更多

1. 程序中的一些文字信息可以将之定义在一个属性文件中,而不定要写在程序代码中,这样在日后想更改文字信息时,只要更改文本文件的内容而不用重新编译程序,就可以在程序运行时显示不同的信息。

2.使用ResourceBundle:

   对于程序中日后可能变动的文字信息,可以考虑将信息移到程序之外。方法是用java.util.ResourceBundle来作信息绑定,首先要准备一个.properties文件,例如messages.properties,而文件的内容如下:

                    onlyfun.caterpillar.welcome = Hello

                    onlyfun.caterpillar.name = World

.properties文件必须放置在Classpath的路径设定下,文件中编写的是键、值配对,之后在程序中可以使用键来取得对应的值。如下示例:

package ysu.hxy;

import java.util.ResourceBundle;

public class ResourceBundleDemo
{
	public static void main(String[] args) 
	{
		//绑定messages.properties
		ResourceBundle resource =
			ResourceBundle.getBundle("messages");

		//取得对应信息
		System.out.print(resource.getString("onlyfun.caterpillar.welcome"));
		System.out.print(resource.getString("onlyfun.caterpillar.name")+"!");
	}
}

 ResourceBundle的静态getBundle()方法会取得一个ResourceBundle的实例,所给定的参数名称是信息文件的主文件名,getBundle()会自动找到对应的.properties文件。取得了ResourceBundle实例后,可以使用getString()指定键来取得文件中对应的值。执行结果如下:

D:\Java_Test>java ysu.hxy.ResourceBundleDemo
HelloWorld!

     这样的话如果日后想要改变显示的信息,只要改变.properties文件的内容就可以了。例如若将message.properties的文件内容改为:

     onlyfun.caterpillar.welcome = Hello

     onlyfun.caterpillar.name = hxy

无需重新编译此范例,直接执行程序,输出信息如下:

D:\Java_Test>java ysu.hxy.ResourceBundleDemo
Hellohxy!

3.格式化信息

     程序在运行的过程中,有些信息可能必须动态决定,而之前介绍信息绑定时,.properties文件中的信息则是静态的,也就是固定的文字内容,除非修改.properties文件内容并重新启动程序,否则一些信息内容无法随着程序动态显示。

     可以使用java.text.MessageFormat类来辅助信息的格式化,MessageFormat接受一个字符串模式(Pattern)指定。对于文字信息中可能变动的部分,可以使用参数索引(Argument Index)先占住文字位置,参数索引是{0}--{9}的非负整数,之后在使用MessageFormat实例的format()方法时,可以提供真正的参数来填充参数索引处的信息。举个例子来说,可以如下格式化文字信息:

String message = "Hello! {0} ! This is your first {1}!";
Object[] params = new Object[]{"caterpillar","Java"};
MessageFormat formatter = new MessageFormat(message);
//显示格式化后的信息
System.out.println(formatter.format(params));

 MessageFormat实例的format()方法会使用params数组中对象的toString()方法,将取得的String信息依索引位置分别填入{0}到{9}的对应位置,执行format()方法后返回的就是格式化后的信息内容。就上面的程序片段而言,会显示Hello!caterpillar!This is your first Java!信息。

 

    依照这样的方法,如果想在信息绑定时也能进行信息的格式化,让一些信息在程序运行过程中动态决定,则可以在.properties中如下编写,例如编写message2.properties文件如下:

  onlyfun.caterpillar.greeting = Hello!{0}! This is your first {1}!

接着可以绑定message2.properties,并在程序中进行信息的格式化,如下范例所示:

package ysu.hxy;

import java.util.ResourceBundle;
import java.text.MessageFormat;

public class MessageFormatDemo
{
	public static void main(String[] args) 
	{
		try
		{
			//绑定messages.properties
			ResourceBundle resource =
				ResourceBundle.getBundle("message2");

			String message = resource.getString("onlyfun.caterpillar.greeting");
			Object[] params = 
				new Object[]{args[0],args[1]};

			MessageFormat formatter = 
				new MessageFormat(message);

			//显示格式化后的信息
			System.out.println(formatter.format(params));
		}
		catch (ArrayIndexOutOfBoundsException e)
		{
			System.out.println("没有指定参数!");
		}
	}
}

运行结果之一如下:

D:\Java_Test>java ysu.hxy.MessageFormatDemo hxy java
Hello!hxy! This is your first java!

4. 国际化信息

    Internationalization简称I18N.意思为国际化。为了在应用程序中表示一个区域,Java提供有java.util.Locale类,一个Locale实例包括了语系信息与区域信息。例如en表示英文语系的国家,这个字母组合是在ISO369中定义的,而区域信息则是像US表示美国,这个字母组合则是在ISO 3166中定义的。可以如下这么新增一个Locale的实例,用以表示中文语系zh、中国cn:

Locale locale = new Locale("zh","CN");

当使用ResourceBundle.getBundle()方法时,默认就会自动取得计算机上的语系与区域信息,而事实上信息文件的名称由basename加上语系与地区来组成。例如:

  •  basename.properties(默认)
  •  basename_en_US.properties
  •  basename_zh_CN.properties

没有指定语言与地区的basename是默认的资源文件名称,当没有提供专用的语系、区域信息文件时,就会寻找默认的资源文件。

      如果想要提供中文的信息,由于信息资源文件必须是ISO-8859-1编码,所以对于非西方语系的处理必须先将之转换为Java Unicode Escape格式。例如可以先在message3_zh_CN.txt中编写以下的内容:

      ysu.hxy.welcome=您好

      ysu.hxy.name=世界

然后使用JDK的工具程序native2ascii来转换。例如:

native2ascii -encoding GB2312 messages3_zh_cn.txt messages_zh_cn.properties

转换后message3_zh_cn.properties文件内容会如下:

      ysu.hxy.welcome=\u60a8\u597d
      ysu.hxy.name=\u4e16\u754c

将此文件放在classpath可以存取到的路径位置,还可以提供一个默认的信息文件message3.properties:

      ysu.hxy.welcome=Hello
      ysu.hxy.name=World

利用下面的程序测试一下信息文件。所使用的操作系统为语系设定为中文,区域设定是中国。

package ysu.hxy;

import java.util.ResourceBundle;

public class I18NDemo
{
	public static void main(String[] args)
	{
		ResourceBundle resource =
			ResourceBundle.getBundle("messages3");

		System.out.print(resource.getString("ysu.hxy.welcome")+"!");
		System.out.print(resource.getString("ysu.hxy.name")+"!");
	}
}

 根据操作系统的设定,执行程序时会使用默认的语系zh与区域设定中国,所以就会寻找message3_zh_cn.properties的内容。 运行结果:

   D:\Java_Test>java ysu.hxy.I18NDemo
   您好!世界!

   在使用ResourceBundle.getBundle()时可以给定Locale实例作为参数。例如若想提供messages_en_US.properties文件,并想要ResourceBundle.getBundle()取得这个文件的内容,则可以像下面这样编写:

Locale locale = new Locale("en","US");
ResourceBundle resource = ResourceBundle.getBundle("messages",locale);
 

根据Locale对象的设定,这个程序片段将会取得messages_en_US.properties文件的信息内容。

分享到:
评论

相关推荐

    Spring MVC 3.0实战指南.ppt

    如何对错误信息进行国际化(2) 目录 数据模型访问结构 访问数据模型:ModelAndView 访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案.....

    Spring3MVC注解教程.ppt

    如何对错误信息进行国际化(2) 目录 数据模型访问结构 访问数据模型:ModelAndView 访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发...

    Spring开发指南

    国际化支持 WebWork2 & Spring Quick Start WebWork 高级特性 Action 驱动模式 XWork 拦截器体系 输入校验 国际化支持 Webwork2 in Spring Struts in Spring 数据持久层 事务管理 持久层封装 JDBC ...

    SOP外贸易 v1.21 RC.zip

    产品特点:前台展现国际化,后台管理中国化 更适合国人使用,傻瓜式操作后台 批量SEO结构,营销推广有基础 零售批发全兼顾,生意灵活好把握 会员管理很强大,客户关系更稳固 支付物流都俱全,打理生意很轻松 ...

    SOP外贸易 v1.21 RC

    加入实用的功能12、专业级搜索引擎化,快速提高排名及PR值产品特点:前台展现国际化,后台管理中国化更适合国人使用,傻瓜式操作后台批量SEO结构,营销推广有基础零售批发全兼顾,生意灵活好把握会员管理很强大,客户...

    SpringMVCDemo:Spring MVC 框架知识案例

    6.Spring MVC 国际化案例 7.Spring MVC 请求转发与请求重定向案例 8.Spring MVC 下载 Excel 文档的需求案例 9.Spring MVC RESTful 风格的请求方式案例 10.Spring + Spring MVC + JDBCTemplate 整合并通过 RESTful ...

    SOP外贸易 1.21 RC.zip

    产品特点:前台展现国际化,后台管理中国化 更适合国人使用,傻瓜式操作后台 批量SEO结构,营销推广有基础 零售批发全兼顾,生意灵活好把握 会员管理很强大,客户关系更稳固 支付物流都俱全,打理生意很轻松 ...

    JSF标签,JSF的使用

    JSF主要由两个部分组成:一套功能强大的API函数,用来表示UI组件、管理组件状态、处理事件、进行输入有效性验证,以及对国际化和可访问性的支持;一套包含各种页面元素的并允许自定义的JSP标签库,用来在JSP页面中...

    网新中英文企业手机电脑一体化建站通用版 v4.9.rar

    6、程序采用ASP ACCESS环境开发,不限域名绑定,完全开放源代码,未做任何加密,网页文件可以个性化修改; 7、程序采用UTF-8编码,全球打开网站不乱码; 8、程序后台使用KEditor国际流行编辑器,Word格式自由排版...

    基于CTP和Qt的可视化期货监控系统.zip

    国际化与本地化: Qt Linguist工具支持应用程序的多语言翻译和本地化工作,确保软件能适应全球市场。 开发工具与生态系统: Qt Creator是一款集成开发环境(IDE),集成了项目管理、代码编辑、调试、版本控制、...

    【z-paging下拉刷新、上拉加载】示例demo

    【功能丰富】支持国际化,支持自定义且自动管理空数据图,支持主题模式切换,支持本地分页,支持聊天分页模式,支持展示最后更新时间,支持吸顶效果,支持内部scroll-view滚动与页面滚动,支持一键滚动到顶部等诸多...

    i18nize-react:在午休时间对应用程序进行国际化

    在午休时间对遗留的React应用进行国际化。 i18nize-react查找并用i18n绑定替换您的react项目中的所有硬编码字符串文字。 它使用babel来对React组件进行处理。 入门 首先使用npm全局安装i18nize-react npm i -g i18...

    北京中科信软 Visual Basic.NET培训

    编号 标题 内容 ... VS2008开发环境 C#语言及编码规范 面向对象开发初步 接口和类的设计 SQL语句,存储过程 二 .NET框架&C#编程 面向对象的基本知识体系 ... 资源文件与国际化开发 部署方案(ClickOnce)

    微软ASP.NET入门教程

    国际化概述 Overview 设置区域性和编码 本地化 ASP.NET 应用程序 使用资源文件 跟踪 跟踪概述 跟踪记录到页输出 应用程序级跟踪记录 调试 SDK 调试器 性能 性能概述 性能优化提示 测量性能 ASP 到 ASP...

    网新中英文企业手机电脑一体化建站专业版 v4.9.rar

    6、程序采用ASP ACCESS环境开发,不限域名绑定,完全开放源代码,未做任何加密,网页文件可以个性化修改; 7、程序采用UTF-8编码,全球打开网站不乱码; 8、程序后台使用KEditor国际流行编辑器,Word格式自由排版...

    jquery-bindingformat:格式数据转换器

    当我们进行国际化工作时,通常以一种格式显示日期和货币值,但是当这些信息到达用于处理业务规则的例程时,有必要在执行所需的操作之前将此信息转换为另一种格式。 例如,当我们以某种格式显示某些信息并将其存储在...

    网新中英文企业手机电脑一体化建站视频版 v5.8.rar

    6、程序采用ASP ACCESS环境开发,不限域名绑定,完全开放源代码,未做任何加密,网页文件可以个性化修改; 7、程序采用UTF-8编码,全球打开网站不乱码; 8、程序后台使用KEditor国际流行编辑器,Word格式自由排版...

    网新中英文企业手机电脑一体化建站标准版 v4.9.rar

    6、程序采用ASP ACCESS环境开发,不限域名绑定,完全开放源代码,未做任何加密,网页文件可以个性化修改; 7、程序采用UTF-8编码,全球打开网站不乱码; 8、程序后台使用KEditor国际流行编辑器,Word格式自由排版...

Global site tag (gtag.js) - Google Analytics