前些开在做一个软件的多语言的问题,当时由于对这个不熟悉,而我走了一些弯路 。现在说一下我的心得:
多语言版有好几种实现有方法,我个人认为用DLL文件比较好(我是在VC++下开发软件),用它更快。
在软件中对要用的字串就在STRING TABLE中加入一个STRING ID 在你的软件中就直用LoadString(UINT ID)来得到你要的字符串。在之前我参考了EMULE(电螺)的源码,它这个多语言版的做的比较好。它的一些操作主要在文件I18n.cpp中做了。在CPreferences类中做了一些对语言的操作(实现部分在I18n.cpp中)。
用DLL文件作多语言版的原理是:
在CXXAPP类的初始函数中用LoadLibrary()函数载入包含字符串和ID的DLL文件
然后在要用的字符串的地方用resString.LoadString();得到字符串;在EMULE中用函数GetResString()得到字符串,它的实现是:
CString GetResString(UINT uStringID, WORD wLanguageID)
{
CString resString;
if (_hLangDLL)
resString.LoadString(_hLangDLL, uStringID, wLanguageID);
if (resString.IsEmpty())
resString.LoadString(GetModuleHandle(NULL), uStringID, LANGID_EN_US);
return resString;
}
CString GetResString(UINT uStringID)
{
CString resString;
if (_hLangDLL)
resString.LoadString(_hLangDLL, uStringID);
if (resString.IsEmpty())
resString.LoadString(GetModuleHandle(NULL), uStringID);
return resString;
}
其中:hLangDLL:为在用LoadLibrary()函数时得到的句柄;
uStringID:为你要得到字符串的ID
这样就很简单地做到了。
还有的方法是用非DLL的文件(如:INI文件)
用函数GetPrivateProfileString()来得到你要字符串 ;