查看完整版本: Bugzilla图表显示的国际化问题

苦命的Evan 2006-6-8 09:33

Bugzilla图表显示的国际化问题

大家用Bugzilla的图表的时候,都是用英文输入的吗?我发现用中文或日文作为图表的坐标名,显示却是乱码。请问这个问题应该怎么解决?谢谢

苦命的Evan 2006-6-8 11:58

我发现bugzilla是调用了perl的GD组件来制作图表的,难道是GD不支持国际化?谁知道怎么解决这个问题吗?

[[i] 本帖最后由 苦命的Evan 于 2006-6-8 12:03 编辑 [/i]]

苦命的Evan 2006-6-10 12:53

已解决

总算解决了
另外碰到邮件中文乱码问题,谁有解决办法吗?

苦命的Evan 2006-6-10 14:28

邮件乱码问题也解决了,求人不如求己,问了那么多问题,全都是自己解决的,看来这里没高手啊

sanmzhou 2006-8-2 11:15

楼主遇到的问题别人也可能遇到,所以不要光说解决了,也说下解决的方法呀

lwnxx 2006-12-27 11:12

看来楼主不是厚道之人哪。
请大家参考这几篇资料解决:
[url]http://www.physik.fu-berlin.de/~tburnus/bugzilla/README-EN.templates-de[/url]
[url]http://bugzilla.mozilla.org/show_bug.cgi?id=126266[/url]
[url]http://bugzilla.mozilla.org/show_bug.cgi?id=bz-l10n[/url]

过些时我把具体方法贴上来。

lwnxx 2006-12-27 17:18

这个问题不是bugzilla的错,
其根源在于Perl::GD::Graph库,bugzilla是靠它生成图形的


我们看一下bugzilla生成报表时的源代码。
注意,有多个文件与图形生成有关。
这里我们以其中一个说明足矣:

找到template/en/default/reports/report-bar.png.tmpl, 打开
扫一眼会发现第56行: USE graph = GD.Graph.bars(width, height);
这说明什么问题?说明bugzilla调用的是GD::Graph::bars这个库生成的图形。

是什么地方有问题呢?现在有两种情况:一是bugzilla在传递参数时,把中文编码搞坏了,二是这个库没有正确的处理中文。
于是从容易的环节下手,看看是不是第一种情况,
在生成图表页面,输入一些查询条件,生成的url如下:
[url]http://172.16.1.72/bugzilla/chart.cgi?category=-All-&subcategory=-All-&name=32&label0=%D6%D0%CE%C4&line0=40&label1=All+Open&line1=39&gt=1&labelgt=%E6%80%BB%E8%AE%A1&datefrom=&dateto=&action-wrap=%E5%B0%86%E6%AD%A4%E5%88%97%E8%A1%A8%E6%98%BE%E7%A4%BA%E4%B8%BA%E5%9B%BE%E5%BD%A2[/url]
注意这里:label0=%D6%D0%CE%C4 已经被正确地编码成的utf-8。初步证明了不是第一种情况,为了进一步确认,
直接修改report-bar.png.tmpl中的第58行:y_label => "中文字串"
执行,仍然是乱码,ok。第一种可能被否。

于是找到GD:Graph::bars。请注意,perl的库开装位置与各位的机器,环境有关,请大家自行查找
我用的是freebsd 6.1,使用ports安装,位于/usr/local/,ib/perl5/site_perl/5.8.7/GD/Graph中

找到bars.pm,扫一眼,没什么有价值的线索。突然灵光一闪,GD库很可能用的是内置字体gdTinyFont, gdSmallFont,或gdBigFont,找找看这个目录下哪里有调用。
于是用perl写了一个批量查询脚本,搜索font关键字,找到两个文件 axestype.pm, axestype3d.pm。
bugzilla没有用3d图,于是打开axestype.pm,在initialise()中,找到了几行很令人心动的代码:
$self->set_x_label_font(GD::gdSmallFont);
$self->set_y_label_font(GD::gdSmallFont);
$self->set_x_axis_font(GD::gdSmallFont);
$self->set_y_label_font(GD::gdSmallFont);
$self->set_legend_font(GD::gdSmallFont);
$self->set_values_font(GD::gdSmallFont);

gdTinyFont是不支持中文的,换掉!
于是把windows下的字体拷贝到系统的fonts目录中(注意!不同的系统的fonts目录不尽相同)。
在freebsd下,拷贝到/usr/X11R6/lib/X11/fonts/local下
然后,在/usr/X11R6/lib/X11/fonts/下运行 fc-cache -f -v
将字体安装好

接下来,将axestype.pm中的那几行改成刚刚安装的中文字体
对于我这台机器,改成:
$self->set_x_label_font('/usr/X11R6/lib/X11/fonts/local/msyh.ttf');
$self->set_y_label_font(/usr/X11R6/lib/X11/fonts/local/msyh.ttf');
...

存盘,退出。
重新生成图表,成功!中文显示很正常了。
页: [1]
查看完整版本: Bugzilla图表显示的国际化问题