MFC:使用单独的资源dll本地化MFC APP的步骤

时间:2013-07-04 10:47:04

标签: dll localization mfc internationalization satellite

在任何人惹我生气之前,请先阅读此内容,然后再尝试以下链接,以实现与MFC的国际化。

创建资源DLL: MFC组件的本地化 http://msdn.microsoft.com/en-us/library/x6h91d9w.aspx

旧版MFC的本地化 HTP://support.microsoft.com/kb/198846/en-us

我是MFC的新手,所以请善意回答你的问题。因此,为了使用MFC 7及更高版本进行本地化,我遵循了以下步骤。 (目前在Visual Studio11中使用MFC)

  1. 在共享DLL中使用MFC创建了一个MFC项目(MyApp)
  2. 要向应用添加其他语言(德语),我创建了一个win32 Dll项目(MyAppDEU)
  3. 将资源文件(MyApp.rc)复制到同一文件夹中并重命名为MyAppDEU.rc
  4. 将MyAppDEU.rc文件添加到dll项目
  5. 在MyAppDEU.rc的资源视图中,更改了VS_VERSION_INFO - >阻止标题为“Deutsch(000704b0)”
  6. 更改了字符串表中的一些字符串,以查看主应用加载时的差异
  7. 将MyAppDEU项目的输出更改为在MyApp Output文件夹中构建
  8. 编译MyAppDEU以获取Dll
  9. 使用和不使用第9点的说明编译MyApp http://support.microsoft.com/kb/198846/en-us
  10. 所有这些完成后,我没有看到我的应用程序有任何不同。它加载了我创建了App的英文资源文件。我的电脑有德语Windows 8操作系统。据我所知,MFC通过Satellite Dlls内置了多语言支持。我有正确的命名格式ApplicationNameXXX.dll。 dll与exe在同一目录中。

    我希望有人能看到我在这里做错了什么或错过了什么。我对MFC很新,并感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

[答案来自this SO answer]

我成功地使用了一种稍微不同的方法,使用Satellite DLL跳过了MFC内置的多语言支持。

我们的解决方案中有多个DLL项目,每个项目只包含一种语言的一组资源(例如:AppRes_ENU.DLL)。在运行时InitInstance(),我们选择适当的语言DLL,代码如

CString sResourceDllName;
// format sResourceDllName according to the language ("%s\AppRes_%s.DLL")
hInst_aRes = LoadLibrary(sResourceDllName);
if (hInst_aRes == NULL)
{    // handle <resoure-DLL not available>
     return FALSE;
}
AfxSetResourceHandle(hInst_aRes);

并使用hInst_aRes加载字符串,对话框,......

答案 1 :(得分:0)

看看这个软件:http://www.apptranslator.com/。它有助于使用卫星dll进行本地化;文档可能描述了如何做到这一点。一旦你想出:: AfxGetResourceHandle()和hInstanceHandle以及所有爵士乐之间的关系,这很简单 - 了解它的最简单方法是阅读MFC源。然后你写了几个帮助类,然后你去了:))