首页| 水晶报表 | 润乾报表 | 快逸报表 | Birt报表 | 其他产品 | 报表教程 | 产品评述 | 技术文章 | 其他资料
>> 首页 -> Birt报表 -> BIRT2.1.0中文化问题的解决方法
BIRT2.1.0中文化问题的解决方法

  一、环境
  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足够了。

本文转自:http://www.eclipseworld.org/bbs/read-cec-tid-6069.html

 相关内容:
 
 
 


 

Copy Right 2005, 版权所有 Report99.com