如何国际化GWT-EXT 的MessageBox

这是工作中偶然碰到的一个问题,怕忘了所以赶紧写下来。GWT-EXT版本是2.1.1。

两天前BSA(业务分析团队)提出一个bug,说消息框MessageBox不但正文内容需要国际化,两个按钮"Yes"和"No"也需要国际化,比如简体中文的时候变成“是”“否”。这个需求在简体中文的情况下可以满足,但在繁体界面下就会变成默认的"Yes""No"。因为半年多来很少碰GWT相关的项目,问了几个人,看了些代码,发现MessageBox并未使用GWT的普通国际化方案,即:

import com.google.gwt.i18n.client.Constants;

interface LanguageConstants extends Constants {
    @Key("text1")
    String getText1();

    ...
}


因此很自然想到是框架源码的问题,但出于稳定性考虑(已经进入二期UAT,系统级修改能免则免),想干脆custom按钮的label,在代码里hardcode就好了。google了一下,看见一个MessageBoxConfig的东西,相关代码见:
http://www.gwt-ext.com/forum/viewtopic.php?f=5&t=4083
可惜在GXT2.11里已经没有了,只好作罢。

现下只能修改源码了,无奈无人指导,只能在com.extjs.gxt.ui.client包里上下逡巡,寻找线索,猛然看见com.extjs.gxt.ui.client.messages,心中一动,本能地点进去看,哈,包里只有一个java,XMessages.class,其它都是properties文件,随便打开一个,第一眼就看到了下面几行:
# MessageBox
messageBox_ok=Ok
messageBox_cancel=Cancel
messageBox_yes=Yes
messageBox_no=No
messageBox_close=Close

显然,我们的繁体界面的MessageBox无法获得正确的本地化label,是因为com.extjs.gxt.ui.client.messages包里没有配备相应的properties文件,而因为存在XMessages_zh.properties,所以简体的情况下会正确显示。

至此,解决方案很明了了,把我们项目支持的几种语言都制作相应的XMessage_xx.properties加进这个包里(如果原来没有的话),重新编译,放回maven repo,ok already...
-------------------------------------------------------------------
经同事提醒,其实不用重新编译GXT源码也可以实现语言文件的增加和覆盖。方法很简单,在项目里手动建立一个重名的包再加入语言文件就行了。这里我们只需在项目里新建一个包:
com.extjs.gxt.ui.client.messages,然后加入所需的语言properties,重名的文件可以覆盖框架内的properties。

你可能感兴趣的:(maven,UI,ext,Google,gwt)