现在的位置: 首页 > 综合 > 正文

【Java】利用Java对配置文件操作实现Java程序的国际化

2018年05月06日 ⁄ 综合 ⁄ 共 2876字 ⁄ 字号 评论关闭

不仅仅是大名鼎鼎的Struts2,即便是小小的Java程序也能够实现国际化,根本就不用像网上大部分所说的那样,非西欧字符,例如我们的中文,岛国的日语之类的,必须使用native2ascii转码,坦诚,国际化字符串的配置文件xx_语言.propreties并不支持非西欧字符,只能转码存储,但你完全可以利用到我在《【Java】配置文件概念,Java对配置文件的操作》(点击打开链接)所介绍的方法,利用Java程序完成这个国际化的配置文件。Java会帮你自动转码。

一、基本目标

完成对大名鼎鼎的hello,world程序的国际化

有人看到这里就开始不满意了,这个烂程序分明就可以写三个Java文件,改一下输出就行了,比如中文的hello,world,不就这叼样吗?

public class helloWorld {
	public static void main(String[] args) {
		System.out.println("你好,世界");
	}
}

确实,我也提倡这种做法,要多少国语言的国家化就写多少个Java,但是,如果有些脑残上司要求你必须用xx_语言.propreties实现国际化,说什么工程便于管理,有技术含量,那你就懵了。

二、基本思想

其实用xx_语言.propreties实现国际化真的好不了多少,要多少国语言的国家化就写多少个xx_语言.propreties国际化文件,但是,而且也不见得好在哪里,就是把key-value对中的key文件的value值改成不同国家的语言而已。由于机器根本就不懂得人类的语言,因此,根本就没有可能抽象成一个循环结构,最终还是要通过人类自己翻译。

同时,必须把xx_语言.propreties放在与源Java程序编译生成的.class的同一文件夹,你说你想指定一个文件夹专门放这类国际化文件,然后在Java制定国际化的路径是不可能的,亲自实践发现这样Java会提示找不到国际化文件。

国家化的文件必须严格遵守xx_语言.propreties这样的命名规则,xx你可以自己随便改,比如我就改成mess,也就是Message消息的意思,Java寻找国际化文件的过程如上图,大概过程就是从具体到抽象,先是简体中文->中文->大众语言mess。语言的代表字母具体见最后的附录,你在其中懂几门就很不错了。

三、制作过程

一个Java文件说明完毕:

//配置文件的输出的必须包
import java.io.*;
//里面包括配置文件与国际化
import java.util.*;
public class I18N {
	public static void main(String[] args) throws IOException {
		//以下是中文国际化的过程
		Properties properties = new Properties();
		//设置hello对应的值为"你好,世界!"
		properties.setProperty("hello", "你好,世界!");
		//分别存储到.\bin\与同一目录,这样是因为如果你使用eclipse编译此原文件,本程序的.class会生成到bin中
		//一般bin是存放可运行文件也就是最终程序的,发布商一般发布bin下的文件夹内容就可以了,src是存放源代码的
		//.class文件是可以通过cmd里面的指令运行的哦,别用多了eclipse忘记了
		//如果你是用cmd指令运行的,这.class就会生成到与.java同一个目录
		//反正之所以保存两次仅仅是为了保证保存出来的mess_zh_CN.properties与本程序的.class文件同一目录
		properties.store(new FileOutputStream("mess_zh_CN.properties"), "i18N");
		properties.store(new FileOutputStream(".\\bin\\mess_zh_CN.properties"), "i18N");
		//以上是中文国际化的过程
		//以下是日语国际化的过程
		properties=new Properties();
		properties.setProperty("hello", "こんにちは、世界(せかい)!");
		properties.store(new FileOutputStream("mess_ja_JP.properties"), "i18N");
		properties.store(new FileOutputStream(".\\bin\\mess_ja_JP.properties"), "i18N");
		//以上は、日本語の国際化
		//以下是英语国家化的过程
		properties=new Properties();
		properties.setProperty("hello", "hello,world!");
		properties.store(new FileOutputStream("mess_en.properties"), "i18N");
		properties.store(new FileOutputStream(".\\bin\\mess_en.properties"), "i18N");
		//Above is internationilizing in English
		//下面加载国际化文件,第一个参数是国际化文件“xx_语言.propreties”中xx的部分,
		//第二个参数是语言,Locale.getDefault()的意思是取本操作系统的语言
		ResourceBundle resourceBundle=ResourceBundle.getBundle("mess",Locale.getDefault());
		//然后取得key:hello在所对应的属性值value,把它打印出来
		System.out.println(resourceBundle.getString("hello"));
		//Locale.JAPAN能够强行指定取出日语国际化的结果,再把它打印出来
		resourceBundle=ResourceBundle.getBundle("mess",Locale.JAPAN);
		System.out.println(resourceBundle.getString("hello"));
		//英语同理
		resourceBundle=ResourceBundle.getBundle("mess",Locale.ENGLISH);
		System.out.println(resourceBundle.getString("hello"));
	}
}

大家观摩完毕,是否与我一样有同感,还不如写三个Java文件,把里面的输出部分改成相应的语言合适呢,但是,据说这样能够使翻译人员与程序员分离,翻译者能够专注翻译,你把你的程序中所含有的字符串输出到excel,他们自己就能够在excel上专心翻译,你再把一个写满各个语言的excel读入程序,再把其改造为国际化文件,就能够完成大型程序的各国语言N版齐发的工作。

四、附录

抱歉!评论已关闭.