软件多语言版的实现心得

来源:互联网 发布:怎样提升淘宝店信誉 编辑:程序博客网 时间:2024/06/05 12:00

前些开在做一个软件的多语言的问题,当时由于对这个不熟悉,而我走了一些弯路 。现在说一下我的心得:

多语言版有好几种实现有方法,我个人认为用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()来得到你要字符串 ;

原创粉丝点击