码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA国际化

时间:2014-07-04 06:31:22      阅读:398      评论:0      收藏:0      [点我收藏+]

标签:国际化   java   resourcebundle   替换字符串   

    大家好,我是成都[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.如下图所示:

bubuko.com,布布扣

点击这个之后,在弹出对话框中可以选择默认,然后点击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帮我们封装这个读取过程。好了,希望对大家有所帮助!

    

    

本文出自 “技术分享” 博客,请务必保留此出处http://porterxie.blog.51cto.com/1787765/1433884

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

JAVA国际化

标签:国际化   java   resourcebundle   替换字符串   

原文地址:http://porterxie.blog.51cto.com/1787765/1433884

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!