Symbian开发——中文界面

本文介绍了S60 3rd Edition模拟器如何切换为中文,以及在开发过程中遇到的中文界面资源显示问题。解决方法包括修改文件编码,删除前导字符,并提供了在界面上显示中文字符串的三种方法,包括使用资源文件、转换编码以及GBK到Unicode的转码函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S60 3rd Edition的模拟器都支持英文和中文。模拟器语言切换的方法是在[程序]的安装菜单中,有语言切换的功能。

切换模拟器语言是必须要做的事情。在开发过程中遇到了两种情况,下面分别说明:

 

一、界面上的资源显示中文,例如菜单项,左右软键等界面资源

 

方法如下:

1.  我是将定义资源用到的字符串都放到同一个.h文件中。有人说S60的管理是.loc文件,UIQ的管理是.rls文件,是一样的。

     比如定义的资源是:#define qtn_menu_open "打开"

 

2.  用Notepad或者UltraEdit程序打开这个头文件,保存成UTF8编码的文件。

 

3.  大家知道,资源文件可以创建多个,我用的是.rssi文件(这些文件都需要转换成UTF8),最后都要包含在.rss文件中。这里就需要在.rss文件的第一行加上:

   CHARACTER_SET UTF8

 

上面是最根本的方法,但是开始我一直失败,出现的错误是:"Undefine character ?",后来知道和我的操作系统有关。

我的是英文版的window,切换内码也没用。如果使用的是英文版的Windows,那么它会在文件的头部添加3个前导标示字符,你需要再用UltraEdit[非UTF-8自动辨认模式]来删除他们。

 

具体操作方法是:

1. 使用UltraEdit工具打开文件,在菜单[高级]——>[配置]——>[文件处理]——>[UTF8检测]——>取消[自动检测UTF8文件]

2. 菜单[文件]——>[转换]——>[ASCII转UTF8]。

3. 保存文件。

 

 

二、界面上的控件显示程序中的中文字符串变量,例如Label控件显示字符串。

 

在S60 3rd Edition中,字符串变量默认都是Unicode编码的,也就是宽字符,如果想在Label控件上显示中文字符串,共有三种方法,假设label控件是对话框的子控件:

 

1.   和上面的方法相同,在资源文件中定义字符串,对话框通过资源文件创建。

 

2.   将字符串全部定义在一个头文件中,然后使用工具UltraEdit将文件转换成UTF8编码。

      定义字符串的方法:_LIT8(KLabelText, "中文"); 注意,这里使用_LIT8来定义字符串。

      使用转码函数,将UTF8字符串转换成Unicode,然后再给Label控件显示。

      转码方法如下:

      TBuf<255> temp; // 注意,TDes类不能直接创建对象,因为构造函数是Protect的。但是TDes可以传参。

      CnvUtfConverter::ConvertToUnicodeFromUtf8 (temp, KLabelText);

 

3.   将字符串全部定义在一个头文件中,文件默认的编码是GBK。定义字符串时依然采用_LIT8的形式,然后使用时进行GBK

      到Unicode的转码。

      转码函数如下:

void CUtility::ConvGbk2Uni(TDes16& aTarget, const TDesC8& aSource)
    {
    CCnvCharacterSetConverter *converter = CCnvCharacterSetConverter::NewLC();
    if (converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
            CEikonEnv::Static()->FsSession())
            != CCnvCharacterSetConverter::EAvailable)
        {
        User::Leave(KErrNotSupported);
        }
    TInt state = CCnvCharacterSetConverter::KStateDefault;
    converter->ConvertToUnicode(aTarget, aSource, state);
    CleanupStack::PopAndDestroy();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值