MFC 本地化不适用于 Windows 7 的 MUI 安装

发布于 2024-08-07 16:13:17 字数 469 浏览 4 评论 0原文

好的,我们正在编写 MFC 应用程序来使用 从 MFC 7 开始,内置了卫星 DLL 的本地化支持。一切似乎都工作正常,除了我的 Windows 7 企业版安装有 MUI 支持并且使用瑞典语 UI 而不是英语 UI 时仍然显示我们的应用程序中的英文用户界面。

该应用程序使用瑞典语作为默认语言,并具有 AppNameENU.dll 形式的英语本地化 DLL,因此 MFC 在这种情况下实际上是有意切换到英语,就好像它不关心用户的选择一样在启用 MUI 的 Windows 操作系统中,并且仅使用 Windows 安装的默认交付语言?

从 MSDN 页面(上面的链接)中,我读到它,因为 MFC 实际上应该考虑这些设置,但我不是 100% 确定。有人可以澄清一下吗?

OK, so we're writing our MFC application to make use of the built-in localization support with satellite DLL's since MFC 7. Everything seem to be working fine, except that my Windows 7 Enterprise Edition install with MUI support and using a Swedish UI instead of an English UI still displays the English UI in our application.

The application uses Swedish as its default language, with an English localization DLL in the form AppNameENU.dll, so MFC is actually intentionally switching to English language under these circumstances, as if it's not caring for the user choice in the MUI-enabled Windows OS, and only the default shipping language of the Windows install?

From the MSDN page on this (the link above), I read it as MFC should actually take these settings into account though, but I'm not 100% sure. Can someone please clarify?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稀香 2024-08-14 16:13:17

这是因为 MFC 对语言选择的支持有一个设计错误:只有在没有 DLL 与用户或系统语言匹配的情况下,它才会决定从 exe 加载资源。

在您的情况下:它设置其(有序)语言列表,如下所示:

  1. 瑞典语(用户语言)
  2. 英语(系统语言)

然后它查找您的DLL(错误:只有DLL,而不是exe!):与瑞典语不匹配。但有一个与英语匹配的!

解决方案:使用我的 CLanguageSupport 类。即使在您的用例中它也能正常工作。

请随意使用它。您只需几分钟即可将其合并到您的应用程序中,并且它使用与您已经实现的完全相同的 DLL 方案。 (提示:不要忘记必须摆脱 CWinApp::InitInstance() 调用的步骤!)

此外,如果您有兴趣(这是可选的),您可以获得一个自动的语言菜单让用户选择自己的偏好,以防默认设置不是他想要的。

如果您正在寻找一个出色的工具来帮助您管理翻译,请考虑 appTranslator ;-)

HTH,

It's because the MFC support for language selection has a design bug: It will decide to load resources from the exe only if no DLL match user OR system language.

In your case: It sets up its (ordered) list of languages as such:

  1. Swedish (User language)
  2. English (System language)

Then it looks up your DLLs (Bug: only the dlls, not the exe!): No match for Swedish. But there's a match for English!

Solution: Use my CLanguageSupport class. It works fine even in your use case.

Feel free to use it. You'll need only a couple of minutes to incorporate it into your app and it uses the exact same DLL scheme as the one you already implemented. (Hint: Don't forget the step where you must get rid of the CWinApp::InitInstance() call!)

In addition, if you are interested (this is optional), you can get an automatic languages menu to let user pick his own preference in case the default is not what he wants.

And if you're looking for a great tool to help you manage your translations, think appTranslator ;-)

HTH,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文