谈论 Media Portal 对中文支持的分析

来源:互联网 发布:珠宝翡翠淘宝推广 编辑:程序博客网 时间:2024/05/21 07:29

引用

Media Portal 对中文支持的分析
      Media Portal 是一套开源的强大的个人媒体中心,它可以让你的PC变成像电视机一样的简单家用
电器。它支持模拟电视卡、数字电视卡(包括DVB-T/S/C等格式),也可以支持网络音频广播等等功能,它就像MS Media Center那样强大。而且重点是开源的,你无须为它多化一分钱。
    Media Portal如此强大的背后,却有一个非常不方便的地方,就是不支持中文。后为了让它支持中
文开始对它进行一次改造。Media Portal是由C#开发的,所有的UI配置由XML文件来定义,而对语言的支持就在2个关键文件: /Skin/user skin/font.xml  /Language/user Language/strings.xml ,
Font.xml定义了UI显示所使用的字体,strings.xml定义了UI所显示的文字(也就是语言包了)。开始看到
这2个文件以为实现中文会非常简单,立刻就修改strings.xml,把里面所有英文菜单改为中文,并修改
font.xml把里面所使用的英文字体改成中文字体。重启程序,UI显示字体改变,但菜单还是英文!看来中文支持并不简单,只好从头对整个程序进行分析了。
     首先考虑的是,在XML文件送出的时候,Media Portal使用程序设定的字符集对字符集进行编码,
那么我就在2个XML文件的头上写入<?xml verstion="1.0" Language="gb2312">以期待xml使用gb2312字符集进行编码。再次重启程序,这次有点效果,主菜单英文的显示正常,但修改了中文的菜单变成了空白!对主菜单中文按下回车进入下一级菜单,在程序的窗体上已经显示了中文。换句话说,Media Portal已经正确调用了font.xml所制定的字体,并解释了修改后的strings.xml,而且把中文回传到了程序的from上。那么显示不了中文是为什么呢?答案只要去论坛上找了。
     到Media Portal开发者论坛,(都是老外啊,英文不好搞个词霸翻译下先)也有几个人问到了
Media Portal对中文支持的问题,也有老外问其它语言支持的,几乎所有的回答都是修改strings.xml文件,只有一个人回答说他成功令Media Portal支持了中文只是文字尺寸太小(我估计他是中国人)但回答只有短短一句话,看来论坛上找不到好的答案了,只有分析代码。
     通过GUIFont.CS代码分析我找到了Media Portal的整个显示机制, Media Portal启动时先把所有
英文字符通过DDraw写成图形,然后写到/fonts/font/ 目录里面的debug_*.png文件并保存起来(如果文件不存在则重写一编),然后通过debug_*.png.XML进行定位,在strings.xml需要调用字体的时候,就在debug_*.png里面获得字符的位置并写屏幕。分析到这里,整个过程已经很明白了,Media Portal为什么不支持中文是因为它的显示机制决定的!难以想像谁会这么BT对65536个中文字符进行图形化,并且调用?整个分析过程完结。
     这里要感谢2路转4路,没他的帮忙我是无法对Media Portal进行分析的,虽然他看到Media Portal 是用C#就大喊垃圾,而且还一度把Media Portal 从硬盘上删除掉。但最后还是帮我把结果给分析出来了。