symbian程序运行时切换本地化动态多语言
2010-01-07 17:43
417 查看
Contents
[hide]
1
notes:
2
操作步骤:
2.1
1)在projectName.mmp文件中修改LANG语句:
2.2
2)在rss文件中修改多语种资源编译设置
2.3
3)重载TFileName CProjectApplication::ResourceFileName() const函数
2.4
4)重写AppUi的constructor函数
2.5
5)加载初始资源文件
2.6
6)强制显示状态面板
2.7
7)切换本地化资源
2.8
8)最终的AppUi的constructor函数
2.9
9)用到的函数定义
notes:
Platform: S60 3RD. 操作步骤:
1)在projectName.mmp文件中修改LANG语句:
Carbide环境下,LANG语句的默认写法是:LANG SC
修改成:
LANG 01 31
其中,01代表英文,31代表中文(假设仅支持英文及中文两种本地化语言)
2)在rss文件中修改多语种资源编译设置
因为程序支持两种语言,所以应该有两个本地化资源文件,在这里假定分别为:LangFile_01.rls及LangFile_31.rls。其中,LangFile_01.rls包含了所有英文字符串,LangFile_31.rls包含了用到的所有中文字符串。然后,在rss文件中添加如下语句:
#ifdef LANGUAGE_01 #include “LangFile_01.rls” #endif #ifdef LANGUAGE_31 #include “LangFile_31.rls” #endif
多语种编译机制:LANG语句支持几种语言,资源编译器就会编译出几种本地化资源,方式就是重复编译.rss文件。第一次编译过程中,语
句:#ifdef
LANGUAGE_01生效,rss文件将LangFile_01.rls文件包含进来,随后生成英文资源文件.r01;第二次编译过程中,语
句:#ifdef LANGUAGE_01生效,rss文件将LangFile_31.rls文件包含进来,随后生成英文资源文件.r31。
3)重载TFileName CProjectApplication::ResourceFileName() const函数
必须重载这个函数,因为在应用程序初始化过程中,Framework会先于CreateDocumentL()函数来调用ResourceFileName(),目的是返回应用程序资源文件的名字。如果不在程序中重载这个函数,那么Framework自动调用
ResourceFileName()函数,结果将默认的资源文件加载到控制环境中,这样我们就不能在运行时对这个资源文件进行切换了,因为此时的资源文
件已经完全交由系统管理,开发人员已经不能干预。如果程序支持多语种,ResourceFileName()函数便会借助
BaflUtils::NearestLanguageFile()将适合当前设备语言的本地化资源文件加载到控制环境中,这样也会导致同样的问题。总
之,不重载ResourceFileName()函数,系统就会自动加载并管理资源文件。
(重载函数的定义参照第9部分函数定义)
4)重写AppUi的constructor函数
必须将EnonStandardResourceFile传给BaseConstructL()函数,否则application会自动调用ReadAppInfoResourceL()函数,试图将standard
resource导入到application。但是,我们已经重载了ResourceFileName()函数,此时的资源名称是个空字符串,所以实际
上程序没有加上任何资源,一旦执行就会导致panic。
同时,因为在第三版App支持缩放机制,所以必须将EAknEnableSkin也传递给BaseConstructL()函数。
BaseConstructL( ENonStandardResourceFile|EAknEnableSkin );
5)加载初始资源文件
如果当前语言设置为英文,则调用:_LIT(KReourse01,"//resource//apps//filename.r01"); iRscOffset = AddResourceFileL(KReourse01);
如果当前语言设置为中文则调用:
_LIT(KReourse31,"//resource//apps// filename.r31"); iRscOffset = AddResourceFileL(KReourse31);
相关文章推荐
- Symbian 程序启动时动态切换多语言
- 在运行时切换 WinForm 程序的界面语言 ---------多语言设置基础
- 程序实现多国语言的动态切换解决方案
- 程序实现多国语言的动态切换解决方案
- 在运行时切换 WinForm 程序的界面语言
- Qt的国际化示例程序以及步骤--实现Qt程序的动态切换语言功能
- 如何在运行时切换WinForm程序使用的语言?
- 【symbian】如何实现程序的前后台运行切换
- 在运行时切换 WinForm 程序的界面语言
- 程序运行时切换语言
- 程序实现多国语言的动态切换解决方案
- 程序实现多国语言的动态切换解决方案(转)
- 在运行时切换 WinForm 程序的界面语言 System.ComponentModel.ComponentResourceManager .ApplyResources
- C++ Builder运行时在FireMonkey里使用TLang动态切换界面语言
- 稳扎稳打Silverlight(32) - 2.0Tip/Trick之MessageBox, Popup, 循环的几种实现方法, 动态变换主题, 本地化(多语言), 响应鼠标双击事件
- 使程序在Linux下后台运行,程序运行前后台切换
- C 语言计算程序运行的时间
- [Symbian]从命令行构建与运行示例程序
- Silverlight开发动态多国语言支持(本地化)的网页游戏设计思想
- 如何用程序切换网页显示的语言