MTK多国语言相关经验总结

2023-11-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MTK多国语言相关经验总结 的相关文章

  • 如何循环用户输入直到输入整数?

    我想运行一个交互式程序 提示用户输入学生人数 如果用户输入除整数之外的字母或其他字符 则应再次询问他们 输入学生人数 我有以下代码 public int createArrays Scanner s int size System out
  • 将搜索图标添加到输入框

    div div
  • Java 数组返回奇怪的输出[重复]

    这个问题在这里已经有答案了 我正在为家庭作业问题创建一个方法 该方法返回数组中的最高值 我正在使用一个 for循环将数字输入到数组中 输入代码如下所示 int array new int n for i 0 i
  • 从 Julia 中的文本文件读取数据矩阵

    我有一个包含矩阵的文本文件 我想在朱莉娅中将其作为矩阵来阅读 文本文件如下 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 0 在 matlab 中 您可以执行以下操作来创建矩阵M
  • 是否可以防止出现文件对话框?为什么?

    假设我有输入 类型 文件 元素 我想拦截 onclick 事件并防止在不满足条件时出现文件对话框 是否可以 如果不是的话 为什么 Soufiane 的代码要求您的页面上有一个名为 jQuery 的 Javascript 库 如果您没有 您可
  • Windows 控制台中的 C++ 按键输入

    我目前正在开发各种consoleWindows 中的游戏无法通过常规输入真正运行cin 我怎样才能 以简单的方式仅使用 MSVC 中提供的标准 Windows 库 让程序等待 特定 按键并返回按键 ID 它必须适用于包括箭头键在内的所有按键
  • jQuery 输入事件在 IE 中的占位符上触发

    我有一个输入字段input绑定到它的事件 通过 jQuery 每次输入值更改时都应触发此事件 我添加了一个占位符来告诉用户此输入字段的用途 如果用户单击此输入字段input不应触发事件 该值实际上不会改变 只是占位符消失 它在 Firefo
  • Javafx 从 TextField 获取输入

    这是我当前的代码 它所做的只是为我制作的计算器设置一个 GUI 界面 我希望用户输入两个值 然后当按下 Sum 按钮时 它将两个值加在一起并将其显示在 Sum 文本字段中 我正在尝试使用 JavaFX 如果您能提供一些帮助 我将不胜感激 i
  • 将一个文本框的值分配给另一个文本框

    看过类似问题的答案 但对于我的一生 我无法弄清楚我做错了什么 我有两个文本框和一个按钮 当文本添加到第一个文本框并按下按钮时 我想将第一个文本框的值 文本应用到第二个文本框
  • 有没有办法改变输入类型=“日期”格式?

    默认情况下 输入type date 显示日期为YYYY MM DD 问题是 是否可以将其格式强制为 DD MM YYYY 无法更改格式 我们必须区分有线格式和浏览器的表示格式 接线格式 The HTML5日期输入规范 https www w
  • 如何检查用户是否按下了某个键?

    在java中 我有一个程序需要连续检查用户是否按下了某个键 所以在伪代码中 就像 if isPressing w do somthing 在java中 你不检查是否按下了某个键 而是检查listen to KeyEvents 实现您的目标的
  • Cakephp 自定义日期输入表单助手的输出

    I got echo this gt Form gt input birthdate array label gt Geburtsdatum true dateFormat gt DMY minYear gt date Y 70 maxYe
  • 使用 Google Apps 脚本处理数组中输入元素中的多个文件

    我有一个表单 允许从下拉列表中选择一个项目并上传文件 项目的名称和 ID 保存在电子表格文档中 适用于一个文件 但我想上传多个文件 你能帮我修改一下脚本吗 HTML 部分如下所示 div class col md 4 col sm 6 di
  • 解析dev/input/event触摸事件

    我能够在 Android 手机上从 dev input event 读取事件 然而 它们是按一定顺序排列的行代码 就像触摸事件给出的那样 3 53 216 3 54 444 3 48 40 3 50 5 0 2 0 0 0 0 如何将它们解
  • 使用 Javascript 从 HTML 表格输入单元格获取值

    我使用 Javascript 动态创建了一个 HTML 表 其中第一列由文本字段组成 第二列由输入字段组成 第三列由文本字段组成 效果很好 nrOfRows document getElementById myId value get nr
  • 如何检测 Android 上的触摸输入

    现在我想做的就是检测何时按下屏幕 然后显示一条日志消息以确认它发生了 到目前为止 我的代码是根据 CameraPreview 示例代码修改的 它最终会拍摄一张照片 因此大部分代码位于扩展 SurfaceView 的类中 SDK 中示例代码的
  • Windows BlockInput 功能不起作用

    Why BlockInput不工作 include
  • 一行输入多个数字

    我想知道如何在一行上接受多个数字 而无需事先确切知道有多少个数字 例如 如果我有1 2 3 4作为输入我可以使用 std cin gt gt a gt gt b gt gt c gt gt d 但如果我不知道数量是 4 那么我就不能使用这种
  • 文本输入框作为 SVG 中的“foreignObject” - 文本溢出问题

    我使用 foreignObject 标签在 svg 中有一个文本输入框 这很有效 但是如果您在输入框中输入的内容比其宽度长 从而导致其溢出 那么文本实际上会出现在页面上的其他位置 可能是没有外来对象标记的默认位置 这是一些屏幕截图来解释正在
  • 禁用输入中的空格,并允许后退箭头?

    我试图禁用用户名文本字段中的空格 但是我的代码也禁用后退箭头 有什么办法也允许后退箭头吗 function var txt input UserName var func function txt val txt val replace s

随机推荐

  • MATLAB——求冲激响应和阶跃响应

    题目 已知一个RLC串联振荡电路系统函数为 其中L 22mH C 2000pF R 100 求其时域的冲激响应和阶跃响应 代码解释 这段代码定义了三个变量 电感L 电容C和电阻R 然后 定义了两个数组a和b 它们是差分方程的系数 接下来 使
  • 拿不到年薪25W全额退款

    速报 2023年经济下行趋势明显 毕业生出路在哪儿 今年 毕业人数将达到1158万 导致很多公司招聘非常谨慎 要求也变得非常更高 别说offer 现在出门找个实习都难 大学四年我都学了啥 是啊 现在咋找实习丰富简历啊 今年毕业的我该怎么办
  • selenium自动处理验证码

    自动化测试中的验证码处理方法小总结 转自 Selenium中文论坛 gt Selenium RC gt 转 自动化测试中的验证码处理方法小总结 原作者 yanpingsha 目前 不少网站在用户登录 用户提交信息等登录和输入的页面上使用了验
  • kubernetes ——网络存储nfs

    kubernetes 网络存储nfs 一 共享的机器上安装nfs 1 yum y insstall nfs utils 2 mkdir p etc exports 3 vi etc exports ifs kubernetes rw no
  • 恶意代码分析实战——Lab03-01.exe基础动态分析篇

    恶意代码分析实战 Lab03 01 exe基础动态分析篇 1 实验目的 综合运用各种分析工具 分析Lab03 01 exe的基本信息 并推测其功能 2 实验环境 硬件 软件 VMware虚拟机 winxp 硬件 处理器Intel Core
  • 浅谈Class.forName()在JDBC中的作用

    目录 1 Class forName 有什么作用呢 2 为什么不直接new 3 为什么删除Class forName com mysql jdbc Driver 还是可以运行 JDBC是Bridge模式的典型应用 DriverManager
  • 怎么在matlab项目中找到某个变量或函数(必行)

    怎么在matlab项目中找到某个变量或函数 必行 1 首先将当前文件路径设置到项目所在文件夹 2 单击 编辑器 下的 查找文件 功能键 3 在 查找包含以下文本的文件 对话框内输入你要搜索的文本 并在 仅包括以下文件类型 对话框选择相应类型
  • cocos2d-x 卡牌翻牌效果的实现

    cocos2d x 卡牌翻牌效果的实现 2012年07月25日 综合 共 3085字 字号 小 中 大 评论关闭 猴子原创 欢迎转载 转载请注明 转载自Cocos2D开发网 Cocos2Dev com 谢谢 原文地址 http www co
  • Java8 HashMap源码解析(内部存储结构及实现方式详解)

    HashMap是我们日常使用的非常多的java集合框架下的一员 它是基于哈希表的 Map 接口的实现 以key value的形式存在 我们可以通过key快速地存 取value 本文以基于 JDK1 8 为源码 简单梳理了一下hashMap的
  • 西瓜书(周志华):什么是版本空间以及如何求取版本空间

    下面是自己结合百度的资料来理解的一些比较通俗的说法 假设空间 属性所有可能取值组成的可能的样本 版本空间 与已知数据集一致的所有假设的子集集合 绿色加号代表正类样本 红色小圈代表负类样本 GB 是最大泛化正假设边界 maximally Ge
  • 【管理篇 / 登录】❀ 01. 网线连接登录 ❀ FortiGate 防火墙

    简介 当我们拿到新的防火墙的时候 首先要做的就是将电脑快速 简便的连接到防火墙 登录并进行管理 而最方便的连接方式就是用网线了 这里介绍的是最简单的飞塔防火墙物理连接以及浏览器登录访问 桌面式防火墙网线连接 飞塔防火墙产品线里低端的桌面式防
  • 对象转换为JSON数据格式&使用JQuery获取数据

    将对象转换为JSON数据格式 我们需要json lib 2 3 jdk15 jar架包 当然还需要其它架包 来实现对象转JSON数据格式 此架包提供两个类来实现转换 JSONObject fromObject object 将对象转换成js
  • Python爬虫编程实践--re bs及xpath

    Beautiful Soup库入门 Beautiful Soup 是一个HTML XML 的解析器 主要用于解析和提取 HTML XML 数据 它基于HTML DOM 的 会载入整个文档 解析整个DOM树 因此时间和内存开销都会大很多 所以
  • 共识算法-PBFT

    简介 1 PBFT简介 BFT Byzantine Fault Tolerance 是区块链共识算法中需要解决的一个核心问题 例如 公有链网络中 比特币和以太访中用的是POW EOS用的是DPOS PBFT一般用于联盟链场景中 它是共识节点
  • Vivado时序约束(转载)

    Vivado时序约束 本文主要介绍如何在Vivado设计套件中进行时序约束 原文出自Xilinx中文社区 Timing Constraints in Vivado UCF to XDC Vivado软件相比于ISE的一大转变就是约束文件 I
  • vue3 父子组件传参

    父向子传参 父组件
  • bootstrap table复选框选多页勾选

    bootstrap table复选框选多页勾选 在项目中发现 bootstrap table的复选框选中后 翻页操作会导致上一页选中的丢失 api中的 bootstrapTable getSelections 只能拿到当前页的复选框 js
  • 正则表达式大全

    1 匹配中文 u4e00 u9fa5 2 英文字母 a zA Z 3 数字 0 9 4 匹配中文 英文字母和数字及下划线 u4e00 u9fa5 a zA Z0 9 同时判断输入长度 u4e00 u9fa5 a zA Z0 9 4 10 5
  • (Java)leetcode-236 Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先)

    题目描述 给定一个二叉树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的
  • MTK多国语言相关经验总结

    MTK多国语言相关经验总结 一 移植多国语言移植多国语言主要牵涉到对mmi features h 整个工程的宏控定义文件 fontres c 字体资源文件 的修改 并添加相应的字库文件 1 语言宏控的修改在mmi features h文件中