标签:国际化 native2ascii properties i18n java
不仅仅是大名鼎鼎的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("你好,世界"); } }
二、基本思想
其实用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版齐发的工作。
四、附录
【Java】利用Java对配置文件操作实现Java程序的国际化
标签:国际化 native2ascii properties i18n java
原文地址:http://blog.csdn.net/yongh701/article/details/44130675