找回密码
 注册
搜索
查看: 958|回复: 6

[讨论] 请教如何修改多国语言短信模板、电子邮件模板

[复制链接]
发表于 2010-2-25 10:14:41 | 显示全部楼层 |阅读模式
如有10个短信模板,这些存在NV中,难道每个语言要对应翻译保存在NV?
如何加入ref_list.txt
发表于 2010-2-25 17:48:38 | 显示全部楼层
应该是这样的,我只改过把原来的简体中文和繁体中文转换成其他的两种语言。
主要涉及这几个函数

SetTemplateLanguage

CalTemplateBase
点评回复

使用道具 举报

 楼主| 发表于 2010-3-2 13:10:32 | 显示全部楼层
短信模版的修改
1.涉及的主要文件:SmsAppTemplates.c
                  IdleApp.c
2.控制的宏:__MMI_MESSAGES_PREDEFINED_TEMPLATE__
3.模版字符串ID:
static const U16 template_str[] =
{
    STR_ID_SMS_TEMPLATE_1,
    STR_ID_SMS_TEMPLATE_2,
    STR_ID_SMS_TEMPLATE_3,
    STR_ID_SMS_TEMPLATE_4,
    STR_ID_SMS_TEMPLATE_5,
    STR_ID_SMS_TEMPLATE_6,
    STR_ID_SMS_TEMPLATE_7,
    STR_ID_SMS_TEMPLATE_8,
    STR_ID_SMS_TEMPLATE_9,
    STR_ID_SMS_TEMPLATE_10
};
4.需要翻译对应语言的枚举
typedef enum
{
    MSG_TEMPLATE_LANG_ENGLISH
    ,MSG_TEMPLATE_LANG_FRENCH
    ,MSG_TEMPLATE_LANG_SPANISH
    ,MSG_TEMPLATE_LANG_PORTUGUESE
    ,MSG_TEMPLATE_LANG_ITALIAN
    ,MSG_TEMPLATE_LANG_GERMAN
}mmi_sms_template_lang_enum

5.模版的NVRAM 的ID:
    {
        NVRAM_EF_SMS_LID,
        NVRAM_SMS_TEMPL_RECORD_SIZE,
        NVRAM_SMS_RECORD_TOTAL,
        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
        NVRAM_ATTR_AVERAGE,
        NVRAM_CATEGORY_USER,
        "MP0V",
        VER(NVRAM_EF_SMS_LID),
        "SMS",
        NVRAM_APP_RESERVED
}
注意:此NV LID只用来存放短信预定义模版(不包括用户定义的),索引1是标识,填充’AAA’,从索引2开始才是模板,依次是是模板1(英文)模板2(英文)……模板10(英文);模板1(法文)模板2(法文)……模板10(法文) ……,语言按mmi_sms_template_lang_enum的枚举顺序

6.总入口:mmi_sms_init_templates(void),在开机初始化时调用(可以设断点,最好在PhnsetSetLangByNvramValue也设置,这样方便查看但前语言)。
   注意点:
1.        必须注释掉下面代码,否则走不到下面
if (buffer[0] == 'A')
    {
        return TRUE;
    }
2. 关键代码就是下面的部分了,完成了将所有模板字串对应的语言字串写入NVRAM_EF_SMS_LID对应的索引中(外循环控制语言,内循环控制10个模板)
   for (i = 0; i < TOTAL_TEMPLATE_LANGUAGE; i++)
    {
        mmi_sms_set_template_language((U8) i);
        if (mmi_sms_write_default_template_to_nvram() == MMI_FALSE)
        {
            return FALSE;
        }
    }

7.主要修改的函数:
a)        mmi_sms_init_templates(void)
上面已经介绍
b)mmi_sms_set_template_language(U8 langtype)       
主要是调用SetCurrentLanguage(i)(并不写NV中当前语言)修改语言相关的全局变量,以查找模字串ID对应语言下的翻译
c)mmi_sms_cal_template_base()
此函数返回所求语言的第一个偏移索引(lang_offset * NUM_TEMPLATES,lang_offset按照mmi_sms_template_lang_enum的枚举值),最终用来求templateindex的值,以往NVRAM_EF_SMS_LID对应的索引下写字串
WriteRecord(NVRAM_EF_SMS_LID, (templateindex + 2), template_data.record_buff,
NVRAM_SMS_TEMPL_RECORD_SIZE, &error)
在初始化的后段在NVRAM_EF_SMS_LID的索引1下写入AAA,以标记
WriteRecord(NVRAM_EF_SMS_LID, 1, templateSignature,
            NVRAM_SMS_TEMPL_RECORD_SIZE, &error)
8.修改过程中遇到的主要问题:
a).修改完成后,模版显示语言和当前语言不一致:设置当前语言为英文,进短信模版显示的却是法文,其他语言也有类似情况。
断点跟踪发现问题出现在mmi_sms_cal_template_base(),当前语言是英文时,判断进的是    else if (IsFrenchSet ())
    {
        lang_offset = (U8)MSG_TEMPLATE_LANG_PORTUGUESE;
    }
更奇怪的是VC中IsFrenchSet ()的返回值显示的是0,但程序还是走进这个判断中,将lang_offset设置为法语!最后的原因是IsXXXSet ()没有声明,此函数返回类型是pBOOL(16位),函数中要么return 0, 要么return 1,即使是return 0,当返回0时将8位转化为16位时,高8位是随机的,而且在VC中查看的值又确实是0,真实的值并不是0!!解决办法是在IdleAppProt.h中将IsXXXSet ()声明,并在SmsAppTemplates.c中包含此头文件!(此原因是同事讲解的,具体不知是否是这样的,欢迎遇到过此问题的朋友回帖指点)
b)上面的问题修正后,无法开机,在开机动画阶段卡住,并在console中出现ASSERT信息:“NvramInterface.c 875  writeMessage->result.flag == MMI_OK”。
即是往NV中写数据出现问题,而且每次毕现。原因:NVRAM_EF_SMS_LID分配的资源不足,共有18种语言,短信有10个模板,总共条数是1+18x10=181,而NVRAM_SMS_RECORD_TOTAL的值原先是141,所以将此值改为200,版本号加1,验证OK!
9.小结:上面主要分析的是开机模板初始化的过程(即写NV),开机后进短信模板应用没有分析(就是读NV了)。修改的过程主要是枚举中语言的增加及if else、case语句的添加,再就是SI搜索跟着原先的English改了。
点评回复

使用道具 举报

 楼主| 发表于 2010-3-2 13:22:05 | 显示全部楼层
Email几乎一样修改。
搞不懂MTK为何要这么做,这样设计的意图何在,本来在ref_list中加入,切换到相应语言取对应的字串就可以了,为什么加入NV保存?请达人指教!
点评回复

使用道具 举报

发表于 2010-3-4 14:07:39 | 显示全部楼层
这个问题其实很好理解,如果不提供模版修改的话就用字符串是没问题的

保存NVRAM是为了提供模版修改功能
点评回复

使用道具 举报

发表于 2010-3-4 14:08:49 | 显示全部楼层
楼主写的很详细,赞一个[em14]
点评回复

使用道具 举报

发表于 2010-3-4 16:15:16 | 显示全部楼层
以下是引用Justinyue在2010-3-2 13:22:05的发言:
Email几乎一样修改。
搞不懂MTK为何要这么做,这样设计的意图何在,本来在ref_list中加入,切换到相应语言取对应的字串就可以了,为什么加入NV保存?请达人指教!

正解, ref_list能加载到输入对话框么?
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-1-8 05:53 , Processed in 0.044600 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表