9

我是一个必须在 MFC 应用程序上做一些工作的 .NET 人。该应用程序是一个 VS2008 MFC 可执行文件,我已将其转换为 VS2010。最初的开发人员通过在应用程序命令行中指定包含键值对的 .txt 文件的名称来进行本地化。已安装的可执行文件快捷方式会根据应用程序安装在哪个国家/地区指定不同的 .txt 文件。如果您只是直接运行 .exe,这当然不起作用。这对我来说似乎是一种奇怪的做事方式。

我想以适当的 MFC 方式做到这一点,但我很难在谷歌上找到明确的答案。我的理解是 .rc 文件中的字符串表应该用于此本地化?这是当前 MFC 的最佳实践吗?

关于字符串表,我已经读过实践是为不同的语言创建多个字符串表。MFC 应用程序如何选择使用哪种语言?它是基于机器当前的语言设置还是我可以控制它(可能是我们希望我们也在构建的 Wix .msi 安装程序指定语言)?

我还读到在 MFC 应用程序中嵌入所有资源已经失宠,现在您应该编译单独的资源 .dll 吗?这是真的吗 生病调查如何做到这一点...

最后,我是否必须做一些特别的事情才能让 MFC 支持 Unicode 或者 MFC 默认为 Unicode?

谢谢

4

2 回答 2

11

这个想法是所有可本地化的项目都应该存储在资源中。标准 UI 对象(例如菜单和对话框)会自动存储在其中(资源),但应将字符串文字(例如:错误消息、消息框提示等)等项目从源代码中提取到字符串表中。我的这篇简短的代码项目文章演示了如何轻松地从代码中的字符串表中提取字符串。

注意:您的资源脚本 (.rc) 中应该只有一个字符串表。

从那里开始,您可以翻译您的资源并创建资源 DLL(也称为卫星 DLL)。这个想法是您为每种语言保留不同的 .rc 文件副本。每个翻译都被编译成一个无代码的DLL,充当资源的容器。

我的另一篇 codeproject 文章可让您根据系统设置或用户偏好轻松加载资源 DLL:代码在资源 DLL 中查找最匹配用户设置的可用语言(基于用户的 UI 语言和区域设置)。该代码还可以让您轻松构建包含所有可用语言的菜单。这样,您的用户可以覆盖默认选择。

免责声明:我的广告如下。随意跳过:-)

关于资源的翻译、翻译的管理和资源 DLL 的创建,您可能需要查看appTranslator

广告结束:-)

关于 Unicode,MFC 附带 ANSI 和 Unicode 版本的代码。您可以选择是否要构建 ANSI 或 Unicode 应用程序:只需在项目设置的第一页中进行选择即可。当然,如果你是从零开始,你绝对应该使用 Unicode。但是,如果遗留原因迫使您保留 ANSI/MBCS,请不要太担心:它不会阻止您本地化您的应用程序。

于 2012-01-08T20:46:39.050 回答
6

多年前,当我不得不在 MFC 中使用多种语言时,我们使用了单独的资源 DLL。您需要做的就是进行一次调用以切换资源函数将使用哪个句柄,并且从那时起所有操作都是自动的。

您需要做的不仅仅是更改字符串。尤其是对话框内部会有字符串,如果这些字符串在翻译后变得太长,您可能需要更改布局。

于 2012-01-05T03:44:50.660 回答