`
xyheqhd888
  • 浏览: 409242 次
  • 性别: 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文件的信息内容。

分享到:
评论

相关推荐

    C# WINFORM 国际化

    标题 "C# WinForm 国际化" 涉及的是在C#编程环境中,如何为Windows Forms应用程序实现多语言支持,即国际化(Internationalization)和本地化(Localization)。这通常是为了让软件能够适应不同国家和地区用户的语言...

    C# winform 国际化

    除了菜单,其他的用户界面元素如按钮文本、提示信息等也需要国际化。资源文件同样适用于这些元素: 1. **创建和编辑资源文件**:如同处理菜单一样,为每种语言创建资源文件,并将UI元素的文本添加为资源。 2. **...

    国际化 必备工具 java编写

    2. **I18N Lib**:开源库,提供了更方便的API来处理国际化,包括动态加载资源、自动处理编码转换等。 3. **Eclipse IDE**:集成开发环境中,Eclipse提供国际化支持,可以方便地编辑和管理资源文件。 综上所述,Java...

    SSM笔记-SpringMVC的数据格式化 、数据校验、错误提示、错误信息国际化、返回json

    本笔记主要关注SpringMVC中的几个关键特性:数据格式化、数据校验、错误提示、错误信息国际化以及如何返回JSON数据。 1. 数据格式化: 在SpringMVC中,数据格式化是将用户输入的数据转换为业务对象的过程。这通常...

    file input 按钮国际化

    在文件输入按钮的处理上,可以通过绑定语言变量来实现。 6. **服务器端渲染**:在服务器端根据用户请求的语言环境,动态生成包含正确语言文本的HTML页面,包括file input按钮的文本。 在提供的压缩包文件中,可能...

    jquery国际化demo

    这个“jquery国际化demo”项目提供了一个简单的示例,帮助初学者快速理解和应用jQuery的国际化功能。 首先,jQuery的国际化通常依赖于jQuery-i18n-plugin。这是一个用于处理翻译文本的插件,它可以加载不同语言的...

    上位机Winform实现多语言国际化

    总的来说,上位机Winform实现多语言国际化是一项涉及用户界面设计、资源管理、多国文化处理以及设备通信等多方面技术的工作。通过理解这些知识点,开发者能够构建出适应全球市场的应用程序,并与各种设备进行有效...

    Android通讯录程序+源代码工程+国际化处理

    5. 国际化处理:为了让应用适应不同国家和地区,程序通常会进行国际化(i18n)处理。这涉及到资源文件的本地化,如strings.xml文件的多语言版本,根据设备的语言设置加载相应的字符串资源。同时,可能还需要考虑日期...

    WPF Prism MVVM弹窗及国际化小示例

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)环境中使用Prism库和MVVM(Model-View-ViewModel)设计模式实现增删改查、弹窗以及国际化功能。Prism是.NET Framework中用于构建模块化、可...

    .net(C#)国际化程序

    总的来说,.NET(C#)的国际化编程涉及多方面的工作,包括资源文件的管理、区域设置的处理以及应用程序的设计策略等。虽然提供的代码示例可能不是最佳实践,但它提供了一个起点,帮助开发者理解如何在C#项目中实现...

    wpf_国际化

    在Windows Presentation Foundation (WPF) 中,国际化(Internationalization,简称i18n)是指让应用程序能够适应不同语言和文化背景的技术。WPF提供了强大的国际化支持,使得开发者可以轻松地创建多语言应用,以...

    eclipse国际化插件

    2. **处理服务器端的国际化**:在Servlet和JavaBeans中,同样可以使用插件管理的资源文件,提供多语言服务。 3. **提高团队协作效率**:团队成员可以分工进行不同语言的翻译工作,插件提供的版本控制功能有助于跟踪...

    ZigBee四种绑定方式

    - ZDO处理并验证响应,最终发送消息的设备建立绑定。 3. **按键绑定 (Button Binding)** - 当目标设备的扩展地址未知时,可以使用按键策略进行绑定。目标设备进入允许绑定状态并响应`zb_AllowBindResponse()`,源...

    winform 国际化 Demo

    为了使这些应用程序适应全球用户,开发者需要实施国际化(Internationalization)和本地化(Localization)功能。"winform 国际化 Demo"就是一个关于如何在Winform应用中实现这一功能的示例。 国际化是指设计一个...

    web项目国际化

    Web项目的国际化,通常被称为i18n(Internationalization的首字母缩写,18是英文单词"international"中字母的数量),是一种使软件能够适应不同语言和文化环境的技术。在.NET框架下,我们可以利用内置的支持来轻松...

    Winform国际化.zip

    当我们谈论“Winform国际化”时,我们实际上是指使Winform应用程序能够适应不同语言和文化背景的过程。这涉及到对用户界面(UI)元素,如按钮文本、菜单项、对话框消息等进行多语言支持。在本文中,我们将深入探讨...

    asp.net多语言国际化与winform多语言国际化心得

    总结,ASP.NET和WinForm的多语言国际化都是通过资源文件和文化信息实现的。虽然实现方式有所不同,但核心思想都是根据用户的文化环境提供相应的界面和内容。理解和掌握这些技术,能帮助开发者构建出更加全球化、易于...

    Maven + Spring mvc + Mybatis + Velocity +国际化配置 demo

    5. 国际化配置:国际化的实现通常涉及到资源文件(如`messages.properties`)的创建,这些文件包含了不同语言环境下的文本信息。在Spring MVC中,可以通过`LocaleResolver`和`MessageSource`接口来处理用户请求的...

    DOJO和验证框架和国际化

    DOJO提供了强大的国际化支持,包括dojo/i18n模块,它可以处理多语言资源文件,允许开发者轻松地切换应用的语言环境。此外,DOJO还支持日期、数字、货币格式等的本地化显示,使得在全球范围内部署应用变得更加容易。 ...

    js jquery 国际化 全兼容

    在国际化的场景中,我们可以利用jQuery的便利性来绑定事件、动态更新页面内容。 3. **i18n 插件**: 虽然jQuery本身并不提供完整的国际化支持,但有许多第三方插件,如jQuery.i18n、Globalize.js等,可以帮助实现...

Global site tag (gtag.js) - Google Analytics