JAVA国际化

大家好,我是成都[LD],今天给大家带来的是JAVA国际化。如果您用过Struts,那您对国际化应该并不陌生。

通常来说,在代码中我们会夹杂一些字符串,这样其实并不好看,维护起来也不是特别方便。举个例子:假设你开发系统是中文版本,突然来了个需求,需要英文版本,如果你将字符串写在代码里面,这样你又不得不将所有的中文字符替换成英文字符。为了减少这种需求下重复劳动,我们通常会自己去写一个配置文件,然后将所有字符串放在配置文件里面,然后去读这个配置文件等等一系列的操作。当然这属于我们自己的一种解决问题的方法。其实在JDK中已经为我们提供了一种的很好解决方案,那就是国际化。

本文旨在起个引导作用,不会太多做原理上分析,如果想进一步了解,请大家自寻查阅资料,如果有不懂可以给我留言。

开发环境:Windows XP、Eclipse(Kepler)、JDK1.7。

如下代码:如果我们需要将字符串"世界,你好!"做国际化,我们该如何去做。

package ld.i18n;
/**
 * 
 * @author Ld
 *
 */
public class Print {

	public void print(){
		System.out.println("世界,你好!");
	}
}

在Eclipse中已经为我们提供了国际化比较方便的方法,首先在类中单击右键,在弹出菜单中找到Source,然后找到Externalize Strings.如下图所示:

点击这个之后,在弹出对话框中可以选择默认,然后点击Next,然后确定,这样,你会发现你的目录下面生成了一个properties文件,我这里生成的文件叫做message.proerties,并且我们的类中的字符串被替换成Print.0

package ld.i18n;
/**
 * 
 * @author Ld
 *
 */
public class Print {

	public void print(){
		System.out.println(Messages.getString("Print.0")); //$NON-NLS-1$
	}
}

下面我们新建个Main.java调用下Print类的print方法

package ld.i18n;

import java.util.Locale;

public class Main {
	public static void main(String[] args) {
		//Locale.setDefault(Locale.US);
		new Print().print();
	}
}

运行一下,控制台打印出:世界,你好!

现在我们要将中文改变为英文,首先拷贝一份messages.properties,将名称改为messages_en_US.properties,并将里面的世界,你好,改为Hello World!同上打开Main.java里面的

//Locale.setDefault(Locale.US);//为什么这么写请大家自己去研究下

注释。运行一下,发现打印出的就是Hello World!

到这里,有的同学可能会发现我上面的字符串在程序编译时就指定了。假设在程序中有变化的字符串该怎么办?

这里我们就需要MessageFormat类的支持(这个类在java.text包中),以Hello World为例。假设我们的World是动态变化的,那么我们可以在properties文件中,将Hello World改为Hello {0},这里的0是第一个参数,因为我们要替换字符串时传入的是个数组,这里和数组下标相对应。因此我们将上述代码进行修改下:

package ld.i18n;

import java.text.MessageFormat;

/**
 * 
 * @author Ld
 *
 */
public class Print {

	public void print(String args[]){
		System.out.println(MessageFormat.format(Messages.getString("Print.0"),args)); //$NON-NLS-1$
	}
}

同时修改Main.java为print方法指定参数

package ld.i18n;
import java.util.Locale;

public class Main {
	public static void main(String[] args) {
		Locale.setDefault(Locale.US);;

		new Print().print(new String[]{"LD"});
	}
}

运行一下,控制台输出Hello LD!

其实大家可以想一想这个过程,不就是类似于我们自定义配置文件,并通过程序来读取字符串信息的过程吗,只不过JAVA帮我们封装这个读取过程。好了,希望对大家有所帮助!

JAVA国际化,布布扣,bubuko.com

时间: 2024-10-21 23:47:55

JAVA国际化的相关文章

java 国际化

java  国际化简介 1.Locale类:国际化类,构建具体语言. 2.ResourceBundle:资源文件工具类,读取Locale构造对象的语言文件. 3.MessageFormat:消息格式化类,给资源文件占位符赋值. 4.资源文件命名规范:key_语言代码_国家代码.properties,key可以任意  基本步骤:     1.构造语言Locale对象.         Locale locale = new Locale("zh_CN");     2.读取语言资源文件 

Java国际化知识

在Java中有自动国家化的信息,废话少说看例子.下面是通过Java获取计算机里面的国际化信息. package lee; import java.text.MessageFormat; import java.util.Locale; import java.util.ResourceBundle; public class JavaResource { /** * 打印出来计算机上面可用的国际化资源 */ public static void availableCountry(){ Local

Java国际化(i18n)

Java国际化(i18n) 最近在做一个网站国际化的功能.用Java做开发,使用spring+velocity. Java提供了对i18n的支持,spring对其做了集成,可以很方便的配置.主要思想就是根据语言来读取不同的配置文件,来显示对应的文本.主要步骤如下: 1. 用两个properties文件来保存“符号”到对应语言的映射.如messages_en.properties和messages_zh.properties, 将其放到工程的classPath下 #messages_en.prop

java——国际化详解

深入理解Java国际化 假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面--这便是典型的i18n国际化问题.对于有国际化要求的应用系统,我们不能简单地采用硬编码的方式编写用户界面信息.报错信息等内容,而必须为这些需要国际化的信息进行特殊处理.简单来说,就是为每种语言提供一套相应的资源文件,并以规范化命名的方式保存在特定的目录中,由系统自动根据客户端语言选择适合的资源文件. 基础知识

java国际化(转)

1. Java国际化简介 Java既然作为一个跨平台的语言就必然要在各种不同的语言环境中使用, 为了解决这个问题Java给我们提供了一个工具类ResourceBundle, 帮助我们实现Java的国际化, 核心的思想就是, 对不同的语言提供一个不同的资源文件. Java国际化主要通过3个类完成 java.util.ResourceBundle:用于加载一个资源包. java.util.Locale:对应一个特定的国家/区域.语言环境. java.text.MessageFormat:用于将消息格

java国际化(简单说说)

java国际化的思路 一.程序需要支持哪些国家,语言环境-->资源文件中 资源文件是key-value对,key是不变的,但是value是随不同国家,语言而改变 二.主要通过三个类来实现: java.util.ResourceBundle:用于装载特定的国家/区域,语言资源包 java.util.Locale:封装特定国家/区域,语言环境-->国家/区域及其相应代号,语言(相应代号) java.text.MessageFormat:用于格式化带占位符的字符串 1 import java.uti

Java国际化资源文件的选择

(一)在Java环境下有以下资源文件: message_zh_CN.properties message_zh_TW.properties message_zh.properites message.properties 如果Locale为zh_CN,查找资源文件的顺序为: message_zh_CN.properties message_zh.properites message.properties 如果上述三个资源文件都不存在,则抛出异常,不会使用message_zh_TW.propert

java国际化中,查找不同国家的语言代码和对应的语言

package arg.fkjava.structs.actio; import java.util.Locale; public class Test {        public static void main(String[] args) {           Locale[] locals=Locale.getAvailableLocales();           for (Locale locale : locals) {          System.out.printl

JAVA国际化问题

在应用中有这样一段代码: public float caculatePercent(float percent) { DecimalFormat df = new DecimalFormat("0.0"); String formatedStr = df.format(percent); Float.valueOf(formatedStr); } 先不考虑这段代码是否合理,反正应用中出现了..然后应用在使用过程都是正常的,然而,突然有一天,qa说,崩溃了! 为什么之前都好好的,现在会崩