主题 : BIRT2.1.0中文化问题的解决方法
rongzhengmao 离线
级别: CEC高级程序员
显示用户信息 
0  发表于: 2006-07-19   
倒序阅读   全看  

BIRT2.1.0中文化问题的解决方法

BIRT中文化问题解决

上次我在论坛上提出了有关BIRT中文化的问题,现在终于找到解决办法,与大家共享,修改代码后的jar包请见附件,直接替换原来的即可。

一、环境
1、Eclipse 3.2
2、BIRT 2.1.0
3、JDK1.5.0_7,BIRT的编译环境是JDK1.4,所以在Eclipse中需要将JDK设为1.4兼容
4、Tomcat 5.5.12

二、界面中文化问题

1、问题描述:通过使用http://host:port/birt-web-hom/frameset?parameters这种方式浏览报表时,出现的界面是英文的。

2、解决方法
(1)birt的CVS中有所有的源代码,签出到本地(具体方法可参考:http://www.eclipse.org/birt/phoenix/build/buildInstructions.php#checkout

(2)签出到本地后,找到org.eclipse.birt.report.viewer.nl/src/org/eclipse/birt/report/resource,该文件夹下有几个语言文件,如:BirtResources_de_DE.msg、BirtResources_es_ES.msg、BirtResources_fr_FR.msg、BirtResources_ja_JP.msg、BirtResources_ko_KR.msg、BirtResources_zh_CN.msg,其中我们中文用户最关心的是最后一个文件,将这个文件copy到其他目录,然后改名为BirtResources.properties

(3)birt-runtime-2_1_0.zip中有birt.war,将其发布到Tomcat中

(4)找到%Tomcat_Home%/webapp/birt/WEB-INF/lib/viewservlets.jar,在这个包下找到org/eclipse/birt/report/resource目录,然后将刚才改过名的BirtResources.properties文件压缩进来,这个文件会替换原来这个目录下的同名文件

(5)现在需要修改源代码,需要修改源代码的类是viewservlets.jar/org/eclipse/birt/report/resource/BirtResources.class,你可以在你从CVS中签出的源代码中的org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/resource文件夹中找到BirtResources.java文件,在这个java文件中找到public static String getString( String key )这个方法,原来的代码是这样的:

public static String getString( String key )
   {
       try
       {
           return ( bundle != null ) ? bundle.getString( key ) : key;
       }
       catch ( MissingResourceException e )
       {
           return key;
       }
   }
   
   修改为:
   public static String getString( String key ) throws UnsupportedEncodingException
   {
       try
       {
           String temp = ( bundle != null ) ? bundle.getString( key ) : key;
           String str = new String(temp.getBytes("ISO-8859-1"),"GBK" );
           return str;
       }
       catch ( MissingResourceException e )
       {
           return key;
       }
   }
   将这个文件编译好的class文件压缩到viewservlets.jar的同等目录下,替换原来的文件
   
(6)启动Tomcat,通过frameset方式访问你已经编辑好的报表,你可以看到界面(包括对话框)中的文件应该已经是中文了


三、get或post方法传递中文参数的解决方法

1、问题描述:如果你在设计报表时增加了参数,在通过get或post方法向这个参数传递中文值时,birt无法解析,因为birt默认的是在UTF-8和ISO-8859-1两个字符集中进行转换,对于中文用户,应该让birt在GBK和ISO-8859-1这两个字符集中进行转换

2、解决方法

(1)普通的JSP和Servlet乱码问题的解决方法对birt不适用,但是你应该首先解决这个普通的乱码问题,这里不作说明

(2)在viewservlet.jar下找到org/eclipse/birt/report/utility下找到ParameterAccessor.class文件,现在要修改这个文件的源代码

(3)你可以在你从CVS中签出的源代码中的org.eclipse.birt.report.viewer/birt/WEB-INF/classes/org/eclipse/birt/report/utility文件夹中找到ParameterAccessor.java文件,在这个java文件中找到这行:
public static final String UTF_8_ENCODE = "UTF-8"; //$NON-NLS-1$
将这行改为
public static final String UTF_8_ENCODE = "GBK"; //$NON-NLS-1$
然后将这个编译好的class文件压缩到viewservlets.jar的同等目录下,替换原来的文件

(4)在上一步中,如果你用eclipse找开ParameterAccesor.java文件,在使用assert的语句行,eclipse会报错,你可以直接将使用assert的语句注释掉。

(5)重启Tomcat,你现在可以通过get或post方法传递中文值了

四、其他

1、我这里说明的是如何解决中文化的思路,最终至于如何修改这两个类的代码就看各人了,我上面的两种修改方法虽然直接了当地找到了原因,但不是最好的修改方法。

2、一开始我用BIRT的时候,将参数__locale理解为如何将birt本身适应国际化需要,实际上这个参数是为了解决报表内容的国际化,但我想到,既然上面提到的两个中文化问题实际上仍然属于国际化问题范围,为什么__locale参数不能用于解决这两个问题呢,所以我下一步将使用__locale参数解决上面的两个中文化问题,这种方法应该是比较好的。

3、BIRT是一个不错的报表工具,但通过开源化走商业化的路线,让我不免担心Actuate公司究竟会将BIRT做得多强大。从另外一个角度将,对于小型应用系统,BIRT足够了。

4、我的联系方式
   MSN:rongzhengmao@gmail.com
   E-Mail:rongzhengmao@gmail.com
   对于技术人员而言,一个技术问题解决不了,是件很苦恼的事情。
   如果上面两个问题也困绕你很久,你看完本文这后也觉得不能解决,欢迎与我联系。
附件: viewservlets.jar (371 K) 下载次数:339
Neil Mao
ydrbz 离线
级别: CEC程序员
显示用户信息 
1  发表于: 2007-05-17   
全看  
您好!在论坛上看到您关于birt的回复:

[回jy00057800]:
您的方法对run方式果然好用,可是对frameset方式却不好使!
对frameset方式如何处理呢?

请问,frameset乱码解决了么?是怎么解决的?
期待您的回复:我的msnLydrbz@hotmail.com
描述
快速回复

验证问题:
三乘以八等于?请输入数字答案 正确答案:24
按"Ctrl+Enter"直接提交
上一个 下一个
      辽ICP备05021625号