MTK多国语言相关经验总结
一、 移植多国语言移植多国语言主要牵涉到对mmi_features.h(整个工程的宏控定义文件)、fontres.c(字体资源文件)的修改,并添加相应的字库文件。
1、 语言宏控的修改在mmi_features.h文件中,用于控制各种语言的开关是类似于__MMI_LANG_ENGLISH__的宏,打开该宏,那么工程就支持该种语言。有时侯,需要同时打开与该语言相关的一些宏,比如阿拉伯语的编码模式、汉语的编码模式。(当然这个编码模式一般都是设置好了的,但也有些许例外,自己看着办)
2、 字库文件的添加在mtk中,字库主要是两个文件,一个是*.h文件,还有一个是对应的fontres.c文件。
①字库的获取有两个方式:
1)直接去网上找对应语言的字库文件。
2)自己利用mtk公司所提供的MCT 6.0工具来制作字库。
不过mct6.0制作字库需要.bdf的点阵字库源文件,而网上能找的基本上都是.ttf的矢量字库文件,这就存在一个需要将ttf文件转换成bdf文件的第三方软件,并且转换的好坏将直接影响到最终用mct6.0生成的字库文件(目前我们用的是otf2bdf3,免费的,因此效果不是很好)。
②字库的使用。
首先我们查看下mtk版本中自带的英文字库L_1_Pluto_Large.h是存放在什么位置的,然后将我们的*.h也放入相同的文件夹下;接下来我们需要将我们的fontres.c文件与mtk中原有的fontres.c文件合并为一个fontres.c文件:合并的方法就参考原有的fontres.c文件中英文字库的代码分布方式,将我们的fontres.c文件里面的代码利用语言宏控拷入mtk原有的fontres.c文件中。
3、修改默认显示语言 这个只需要修改C:/NEOTEL26_06B_W07.20.MP.V21_MMI/custom/app/NEOTEL26_ 06B_BB这个目录下面的nvram_cust_pack.c文件(不同的版本,该文件所处位置不一样,这里是6225的版本)。
在该文件里面有如下一处: 0x00, /* NVRAM_SETTING_LANG,//17 */
这个0x00值指的就是设置语言界面某种语言所处的位置。如果我们想修改默认显示语言为简体中文,而设置语言界面中文在第6的位置,那么我们将0x00这个值改为0x05即可。
二、 移植zi输入法
1、打开zi开关 1)文件:../make/ZTENC26_07B_GPRS.mak 修改输入法为MMI_ZI; INPUT_METHOD = MMI_ZI # Input methods: NONE, MMI_T9, or MMI_ZI 2)在mmi_features.h里面打开相应的zi语言输入法宏开关,形如__MMI_ZI_PRC_ENG LISH__。
2、添加zi代码 ../zi Zi目录添加到工程根目录. 3、添加zi的编译选项 工程文件要最终通过makefile编译成目标文件,每个模块的编译路径都写入该模块的编译目录中。 ../make/zi 包含文件: zi.def zi.inc zi.lis zi.pth 另外几个模块用到了zi的文件,因此必须把zi的头文件目录:zi/include 包含到下面几个文件中,否则编译时候报错“不能打开xxx.h文件”。(这个是07b版本中修改遇到编译错误后再加上去的,其他版本也可以类似地修改) make/gdi_arm/gdi_arm.inc make/mmiresource/mmiresource.inc make/vendorapp/vendorapp.inc make/plutommi/conn_app.inc make/plutommi/inet_app.inc make/plutommi/media_app.inc make/plutommi/mmi_framework.inc 4、添加zi输入法库文件 在make/option.mak文件里面,查找MMI_ZI,找到类似如下代码:
ifeq ($(strip $(INPUT_METHOD)),MMI_ZI) CUSTOM_COMMINC += vendor/InputMethod/ZI/project/$(strip $(INPUT_METHOD_BASE))/v6_official/inc COMPOBJS += vendor/InputMethod/ZI/project/$(strip $(INPUT_METHOD_BASE))/v6_official/lib/zi8clib.a CUS_REL_OBJ_LIST += vendor/InputMethod/ZI/project/$(strip $(INPUT_METHOD_BASE))/v6_official/lib/zi8clib.a CUS_INPUTMETHOD_BASE = vendor/InputMethod/ZI/project/$(strip $(INPUT_METHOD_BASE))/v6_official endif 从上面的脚本中可以看到,zi输入法的库文件的存放位置: C:/ZTENC26_07B_V4/vendor/InputMethod/ZI/project/plutommi/v6_official/lib 头文件存放位置: C:/ZTENC26_07B_V4/vendor/InputMethod/ZI/project/plutommi/v6_official/inc 因此我们开始添加zi输入法的库文件和头文件到上面的目录,如果目录不存在,则自己创建。其中,头文件放在inc文件夹下,.lib和.a文件放在lib文件夹下。 (当然,版本不同,库文件和头文件存放的路径也许不同,到时参照上面的步骤就是了,上面的展示是依据07b来说的。)
三、 移植手写hanwang输入法
1、打开hanwang开关 文件:../make/ZTENC26_07B_GPRS.mak 修改手写输入法为MMI_HANWANG; HAND_WRITING = MMI_HANWANG # MMI_HANWANG, MMI_PENPOWER
2、添加hanwang代码 ../hanwang hanwang目录添加到工程根目录.
3、添加hanwang的编译选项 工程文件要最终通过makefile编译成目标文件,每个模块的编译路径都写入该模块的编译目录中。 ../make/hanwang 包含文件: hanwang.def hanwang.inc hanwang.lis hanwang.pth
4、添加hanwang输入法库文件 在make/option.mak文件里面,查找MMI_HANWANG,找到类似如下代码: ifeq ($(strip $(HAND_WRITING)),MMI_HANWANG) COM_DEFS += __MMI_HANWANG__ COMPLIST += hanwang CUS_REL_SRC_COMP += hanwang COMPOBJS += vendor/handwriting/hanwang/v1_official/lib/hw.a CUS_REL_OBJ_LIST += vendor/handwriting/hanwang/v1_official/lib/hw.a CUS_REL_OBJ_LIST += vendor/handwriting/hanwang/v1_official/lib/hw.lib CUS_REL_OBJ_LIST += vendor/handwriting/hanwang/v1_official/lib/hw.dll CUS_REL_OBJ_LIST += vendor/handwriting/hanwang/v1_official/lib/hws.lib CUSTOM_COMMINC += vendor/handwriting/hanwang/v1_official/inc endif 从上面的脚本中可以看到,hanwang输入法的库文件的存放位置: C:/ZTENC26_07B_V4/vendor/ handwriting/hanwang/v1_official/lib 头文件存放位置: C:/ZTENC26_07B_V4/vendor/ handwriting/hanwang/v1_official/inc 因此我们开始添加hanwang输入法的库文件和头文件到上面的目录,如果目录不存在,则自己创建。其中,头文件放在inc文件夹下,.lib和.a文件放在lib文件夹下。 (当然,版本不同,库文件和头文件存放的路径也许不同,到时参照上面的步骤就是了,上面的展示是依据07b来说的。)
四、打开MTK自带输入法支持在mmi_features.h里面打开形如__MMI_MULTITAP_THAI__的宏开关,每种语言都对应着一个宏开关,根据需要打开。
五、添加不同语言输入法的虚拟键盘
1、添加虚拟键盘字库 这种字库文件比较特殊,目前我们没有去研究自己怎么制作这种字库文件,我们用的字库文件来源主要是07b上面的虚拟键盘字库(因为07b上面虚拟键盘字库很全)。同时,我也试过直接用我们自己生成的普通字库,结果虚拟键盘上显示出方框,说明字库不支持。 按照07b上的代码模式,直接把对应的关于虚拟键盘字库的所有代码拷贝过来就是。
2、添加虚拟键盘布局 这个主要是要去修改Wgui_virtual_keyboard.c文件,这里面有写好的标准键盘布局模式,可以参考其代码自己写其他语言的虚拟键盘布局模式。另外我们也可以比较07b的代码,将对应的虚拟键盘布局代码拷贝过来即可。注意,别加漏了,这个文件里面有好几处都需要添加代码的,自己搜语言宏控来加代码就是了。
3、虚拟键盘的显示与隐藏 虚拟键盘的显示与隐藏主要体现在输入法的切换方面,因此需要修改代码的地方在这个叫EditorPen.c里面。主要修改的函数是mmi_pen_editor_vk_show和mmi_pen_editor_set_virtual_keyboard_by_input_mode。大家按照函数里面已经写好的代码模式很容易就加上其他语言虚拟键盘的支持代码的。
六、输入界面底部条中间输入法提示符的显示 这个主要调用的是EditorPen.c文件中的mmi_pen_editor_set_CSK_content函数来进行文字、图标的设置以及绘制的。如果输入界面底部条中间的输入法提示符的显示出现问题,大家调试该函数就是了。
七、输入界面左上角输入法提示符的显示 这个主要调用的是wgui_categories_inputs.c文件中的wgui_get_inputbox_information_ic on函数和wgui_redraw_input_information_bar函数,具体的绘制步骤哪个地方出问题了,就请大家用模拟器打断点调吧。
本文来自:我爱研发网(52RD.com) - R&D大本营详细出处:http://www.52rd.com/bbs/Archive_Thread.asp?SID=155759&TID=3