首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Java Web Application 另类的国际化形式gettext - commons for Java

2012-10-25 
Java Web Application 另类的国际化方式gettext - commons for Java本文是用在window系统下面使用linux的

Java Web Application 另类的国际化方式gettext - commons for Java
本文是用在window系统下面使用linux的国际化方式,来实现项目的国际化。
因为项目原本没有实现国际化,都是中文的硬编码,到后期的时候,才决定做国际化。
不想去抽取所有硬编码写到properties文件,所以只得考虑用gettext-commons工具来实现。
使用到的工具:
gettext - commons : https://code.google.com/p/gettext-commons/
GetText for Windows:
资源:http://gnuwin32.sourceforge.net/packages/gettext.htm
安装:http://blog.longwin.com.tw/2010/08/windows-gettext-2010/

附件包含所用到的jar
扫描的时候,也可以扫描js等文件,但是要是以单引号标志的字符串,是得不到支持的。
js国际化可以考虑:
1.gettext-js https://code.google.com/p/gettext-js/wiki/MainDocumentation
2.Javascript Gettext http://jsgettext.berlios.de/


大致过程:
-------------------------------------------------------
GNU Gettext - commons 大致过程:
过程:
--->修改java的硬编码
--->msginit得到po文件
--->msgfmt命令得到class文件
--->反编译class
--->替换原有的java文件(所有多语言内容都会放在java的数组里面)
--->运行


gettext-commono整理

步骤:
1.配置gettext-0.14.4-bin,记得dll文件存放到bin下面去,两个dll文件(libexpat.dll,libiconv2.dll)。
————————————————————————————————————————————————————

2.配置gettext-commons
————————————————————————————————————————————————————
到https://code.google.com/p/gettext-commons/downloads/list下载gettext-commons-0.9.6.jar,gettext-ant-tasks-0.9.7.jar
gettext-commons-0.9.6.jar:就是国际化的工具,这个放到项目的lib下面去。
gettext-ant-tasks-0.9.7.jar:提供给Ant的来运行msginit,msgfmt命令,这个随便放,但是build.xml的时候会制定它的路径。

src/i18n.properties
说明:在com.i18n包下面,存在Message_zh_CN.class的文件
basename=com.i18n.messages.Messages
#说明class文件要存放在com/i18n/messages下面

3.修改源码:
————————————————————————————————————————————————————
先创建一个实例:I18n i18n = I18nFactory.getI18n(getClass());
然后用它的tr(string),tr(string,object[])方法来实现国际化。
只注意这里两个方法,其他的类似C语言里面的东西,代码只是测试,不用理会。
第一个方法是没有带参数的国际化方法,第二个是带参数的国际化方法。



上面是编译命令,使用messages-extract命令,得到下面的po文件,存放在src/com/i18n/messages/Message_zh_CN.po,   这个路径会在生成class文件的时候用到,
记得修改版本号,不修改也不影响?没试过。



7.原来class的java文件内容,要手动建立这个类,然后等待下面的步骤替换:这个在cygwin里面编译看见的java. 应该是一个标准的class模板。当我们用GetText for Windows,然后用ant命令得到class文件的时候,默认会删除java文件,直接给出class文件。要是没有发现cygwin里面的java文件,那么可能要傻傻的去做反编译。它得到两个class文件,其中一个class是另一个class的匿名类。

————————————————————————————————————————————————————
src/com/i18n/Messages_zh_CN.java


反编译:Messages_zh_CN$1.class:这个不需要什么特别注意的地方



10.运行src/com/i18n/I18nTest.java类  查看国际化信息
————————————————————————————————————————————————————
I18n i18n = I18nFactory.getI18n(getClass());System.out.println(i18n.tr("This is a test message1"));//返回翻译String[] array = new String[]{"Pandy","Brian"};System.out.println(i18n.tr("这句话是中文原文,第一个参数{0},第二个参数{1}",array));//返回翻译System.out.println(i18n.trn("This is a test message2","This is a test message2-2",0));System.out.println(i18n.trc("This is a test message3","this is a default message"));//返回默认




最后输出:
=====================================>
翻译:第一句翻译
翻译:这句话是中文原文,第一个参数Pandy,第二个参数Brian
This is a test message2-2
this is a default message


这只是实现过程的记录,还没有完整整理,特别注意的地方是反编译后替换,这里最好写程序来实现编译后替换,就安全一点,不容易错误。

热点排行