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#编程环境中,如何为Windows Forms应用程序实现多语言支持,即国际化(Internationalization)和本地化(Localization)。这通常是为了让软件能够适应不同国家和地区用户的语言...
除了菜单,其他的用户界面元素如按钮文本、提示信息等也需要国际化。资源文件同样适用于这些元素: 1. **创建和编辑资源文件**:如同处理菜单一样,为每种语言创建资源文件,并将UI元素的文本添加为资源。 2. **...
2. **I18N Lib**:开源库,提供了更方便的API来处理国际化,包括动态加载资源、自动处理编码转换等。 3. **Eclipse IDE**:集成开发环境中,Eclipse提供国际化支持,可以方便地编辑和管理资源文件。 综上所述,Java...
本笔记主要关注SpringMVC中的几个关键特性:数据格式化、数据校验、错误提示、错误信息国际化以及如何返回JSON数据。 1. 数据格式化: 在SpringMVC中,数据格式化是将用户输入的数据转换为业务对象的过程。这通常...
在文件输入按钮的处理上,可以通过绑定语言变量来实现。 6. **服务器端渲染**:在服务器端根据用户请求的语言环境,动态生成包含正确语言文本的HTML页面,包括file input按钮的文本。 在提供的压缩包文件中,可能...
这个“jquery国际化demo”项目提供了一个简单的示例,帮助初学者快速理解和应用jQuery的国际化功能。 首先,jQuery的国际化通常依赖于jQuery-i18n-plugin。这是一个用于处理翻译文本的插件,它可以加载不同语言的...
总的来说,上位机Winform实现多语言国际化是一项涉及用户界面设计、资源管理、多国文化处理以及设备通信等多方面技术的工作。通过理解这些知识点,开发者能够构建出适应全球市场的应用程序,并与各种设备进行有效...
5. 国际化处理:为了让应用适应不同国家和地区,程序通常会进行国际化(i18n)处理。这涉及到资源文件的本地化,如strings.xml文件的多语言版本,根据设备的语言设置加载相应的字符串资源。同时,可能还需要考虑日期...
在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)环境中使用Prism库和MVVM(Model-View-ViewModel)设计模式实现增删改查、弹窗以及国际化功能。Prism是.NET Framework中用于构建模块化、可...
总的来说,.NET(C#)的国际化编程涉及多方面的工作,包括资源文件的管理、区域设置的处理以及应用程序的设计策略等。虽然提供的代码示例可能不是最佳实践,但它提供了一个起点,帮助开发者理解如何在C#项目中实现...
在Windows Presentation Foundation (WPF) 中,国际化(Internationalization,简称i18n)是指让应用程序能够适应不同语言和文化背景的技术。WPF提供了强大的国际化支持,使得开发者可以轻松地创建多语言应用,以...
2. **处理服务器端的国际化**:在Servlet和JavaBeans中,同样可以使用插件管理的资源文件,提供多语言服务。 3. **提高团队协作效率**:团队成员可以分工进行不同语言的翻译工作,插件提供的版本控制功能有助于跟踪...
- ZDO处理并验证响应,最终发送消息的设备建立绑定。 3. **按键绑定 (Button Binding)** - 当目标设备的扩展地址未知时,可以使用按键策略进行绑定。目标设备进入允许绑定状态并响应`zb_AllowBindResponse()`,源...
为了使这些应用程序适应全球用户,开发者需要实施国际化(Internationalization)和本地化(Localization)功能。"winform 国际化 Demo"就是一个关于如何在Winform应用中实现这一功能的示例。 国际化是指设计一个...
Web项目的国际化,通常被称为i18n(Internationalization的首字母缩写,18是英文单词"international"中字母的数量),是一种使软件能够适应不同语言和文化环境的技术。在.NET框架下,我们可以利用内置的支持来轻松...
当我们谈论“Winform国际化”时,我们实际上是指使Winform应用程序能够适应不同语言和文化背景的过程。这涉及到对用户界面(UI)元素,如按钮文本、菜单项、对话框消息等进行多语言支持。在本文中,我们将深入探讨...
总结,ASP.NET和WinForm的多语言国际化都是通过资源文件和文化信息实现的。虽然实现方式有所不同,但核心思想都是根据用户的文化环境提供相应的界面和内容。理解和掌握这些技术,能帮助开发者构建出更加全球化、易于...
5. 国际化配置:国际化的实现通常涉及到资源文件(如`messages.properties`)的创建,这些文件包含了不同语言环境下的文本信息。在Spring MVC中,可以通过`LocaleResolver`和`MessageSource`接口来处理用户请求的...
DOJO提供了强大的国际化支持,包括dojo/i18n模块,它可以处理多语言资源文件,允许开发者轻松地切换应用的语言环境。此外,DOJO还支持日期、数字、货币格式等的本地化显示,使得在全球范围内部署应用变得更加容易。 ...
在国际化的场景中,我们可以利用jQuery的便利性来绑定事件、动态更新页面内容。 3. **i18n 插件**: 虽然jQuery本身并不提供完整的国际化支持,但有许多第三方插件,如jQuery.i18n、Globalize.js等,可以帮助实现...