我准备示范,如何使应用程序在运行时支持多国语言。下面的例子中,我使用了3种语言:英语、法语和德语。
修改MMP文件
第一步是修改MMP文件。在MMP文件中你可以看到这样一行:
修改成:
创建3种语言文件
我们将支持3种语言,英语、法语、德语,本地文件的扩展名分别为:l01,l02和l03。你可以在本地化使用所有的字符。
修改LOC文件
现在你需要修改成下面的LOC文件
修改YourAppAif.rss文件
YourAppaif.rss 文件中需要像这样本地化你的应用程序标题:
修改由CAknApplication继承来的类
重写CEikApplication 中的 ResourceFileName() 函数到你的CYourApplicationApp 类.
修改AppUi 类
首先,你需要为AppUi 类中的 ConstructL()函数的BaseConstructL() 中传递ENonStandardResourceFile 参数:
接着,在你的AppUi类中创建下列新的函数:
现在你可以调用 ChooseLanguageL([LanguageIndex]) 函数来实现语言的切换了。
修改PKG文件
添加以下几行到你的打包文件中。
关于S60第三版,你可以查看 《如何在运行时为S60 3rd程序提供多国语言支持》 这篇文章。
程序下载地址
修改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
#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;
}
{
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();
}
{
return TFileName();
}
修改AppUi 类
首先,你需要为AppUi 类中的 ConstructL()函数的BaseConstructL() 中传递ENonStandardResourceFile 参数:
CODE:
void CMultiLangAppUi::ConstructL()
{
BaseConstructL( ENonStandardResourceFile );
//...
}
{
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);
}
{
_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"
"/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程序提供多国语言支持》 这篇文章。
程序下载地址