0

在有人抨击我之前,请先阅读此内容,然后阅读此内容,我已尝试通过以下链接实现 MFC 的国际化。

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

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

我是 MFC 的新手,所以请善待您的回答。因此,为了使用 MFC 7 及更高版本进行本地化,我遵循了这些步骤。(目前使用 MFC 和 Visual Studio11)

  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 输出文件夹中构建
  8. 编译 MyAppDEU 获取 Dll
  9. 在有和没有遵循第 9 点 http://support.microsoft.com/kb/198846/en-us的说明的情况下编译 MyApp

因此,完成所有这些后,我看不到我的应用程序有任何不同。它加载了我创建应用程序的英文资源文件。我的电脑有一个德语 Windows 8 操作系统。据我所知,MFC 内置了 Satellite Dlls 的多语言支持。我有正确的命名格式 ApplicationNameXXX.dll。dll与exe位于同一目录中。

我希望有人能看到我在这里做错了什么或错过了什么。我对 MFC 相当陌生,并感谢有关此的任何帮助。

4

2 回答 2

1

[答案改编自这个 SO 答案]

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

我们的解决方案中有多个 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加载字符串、对话框、...

于 2013-07-07T09:11:15.510 回答
0

看看这个软件: http: //www.apptranslator.com/。它有助于使用卫星 dll 进行本地化;该文档可能描述了如何做到这一点。一旦您弄清楚 ::AfxGetResourceHandle() 和 hInstanceHandle 以及所有爵士乐之间的关系,这将非常简单——了解这一点的最简单方法是阅读 MFC 源代码。然后你写了一些帮助类然后你就走了:)

于 2013-07-09T21:56:16.397 回答