如何在运行时为S60程序提供多国语言支持

我准备示范,如何使应用程序在运行时支持多国语言。下面的例子中,我使用了3种语言:英语、法语和德语。

修改MMP文件

第一步是修改MMP文件。在MMP文件中你可以看到这样一行:
CODE:
LANG                SC

修改成:
CODE:
LANG                01 02 03

创建3种语言文件

我们将支持3种语言,英语、法语、德语,本地文件的扩展名分别为:l01,l02和l03。你可以在本地化使用所有的字符。

修改LOC文件

现在你需要修改成下面的LOC文件
CODE:
// 01 = (British) English
#ifdef LANGUAGE_01
        #include "MultiLang.l01"
#endif

// 02 = French
#ifdef LANGUAGE_02
        #include "MultiLang.l02"
#endif

// 03 = German
#ifdef LANGUAGE_03
        #include "MultiLang.l03"
#endif

修改YourAppAif.rss文件

YourAppaif.rss 文件中需要像这样本地化你的应用程序标题:
CODE:
RESOURCE AIF_DATA
    {
    caption_list=
                {
                CAPTION { code=01; caption="MultiLang"; }, // Eglish
                CAPTION { code=02; caption="MultiLang"; }, // French
                CAPTION { code=03; caption="MultiLang"; }  // German
                };
               
    app_uid=0x02a5dd83;
    num_icons=2;
    embeddability=KAppNotEmbeddable;
    newfile=KAppDoesNotSupportNewFile;
    }

修改由CAknApplication继承来的类

重写CEikApplication 中的 ResourceFileName() 函数到你的CYourApplicationApp 类.
CODE:
TFileName CMultiLangApp::ResourceFileName() const
        {
        return TFileName();
        }

修改AppUi 类

首先,你需要为AppUi 类中的 ConstructL()函数的BaseConstructL() 中传递ENonStandardResourceFile 参数:
CODE:
void CMultiLangAppUi::ConstructL()
    {
    BaseConstructL( ENonStandardResourceFile );
    //...
    }

接着,在你的AppUi类中创建下列新的函数:
CODE:
void CMultiLangAppUi::ChooseLanguageL(TInt aLanguageIndex)
        {
        _LIT(KResourceFileName, "MultiLang.r%02d");
        TFileName resFileName;

        resFileName.Format(KResourceFileName, aLanguageIndex);

#if !defined(__WINS__) && !defined(__WINSCW__)
        // Device
        CompleteWithAppPath(resFileName);
#else
        // Emulator
        resFileName.Insert(0, KEmulatorPath);
#endif

        if (iOffset) iCoeEnv->DeleteResourceFile(iOffset);
        iOffset = iCoeEnv->AddResourceFileL(resFileName);
        }

现在你可以调用 ChooseLanguageL([LanguageIndex]) 函数来实现语言的切换了。

修改PKG文件

添加以下几行到你的打包文件中。
CODE:
"/Symbian/7.0s/Series60_v21/Epoc32/data/z/system/apps/MultiLang/MultiLang.r01"         -"!:/system/apps/MultiLang/MultiLang.r01"
"/Symbian/7.0s/Series60_v21/Epoc32/data/z/system/apps/MultiLang/MultiLang.r02"         -"!:/system/apps/MultiLang/MultiLang.r02"
"/Symbian/7.0s/Series60_v21/Epoc32/data/z/system/apps/MultiLang/MultiLang.r03"         -"!:/system/apps/MultiLang/MultiLang.r03"
"/Symbian/7.0s/Series60_v21/Epoc32/data/z/system/apps/MultiLang/MultiLang_caption.r01" -"!:/system/apps/MultiLang/MultiLang_caption.r01"
"/Symbian/7.0s/Series60_v21/Epoc32/data/z/system/apps/MultiLang/MultiLang_caption.r02" -"!:/system/apps/MultiLang/MultiLang_caption.r02"
"/Symbian/7.0s/Series60_v21/Epoc32/data/z/system/apps/MultiLang/MultiLang_caption.r03" -"!:/system/apps/MultiLang/MultiLang_caption.r03"

关于S60第三版,你可以查看 《如何在运行时为S60 3rd程序提供多国语言支持》 这篇文章。

程序下载地址 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值