8

我是一个.NET人,他不得不在MFC应用程序上做一些工作。该应用程序是我已转换为VS2010的VS2008 MFC可执行文件。原始开发人员通过在应用程序命令行中指定具有键值对的.txt文件的名称进行了本地化。安装到可执行文件的快捷方式指定一个不同的.txt文件,具体取决于应用程序安装在哪个国家。如果您直接运行.exe,这当然不起作用。这对我来说似乎是一种奇怪的方式。VC++ 10 MFC:什么是正确的本地化方法

我想这样做pro​​pper MFC的方式,但我很难在谷歌上找到明确的答案。我的理解是,.rc文件中的字符串表应该用于本地化?这是目前MFC的最佳做法吗?

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

我也读过将MFC应用程序中的所有资源嵌入已经失宠,现在你应该编译单独的资源.dlls?这是真的不好调查如何做到这一点...

最后,我必须做一些特别的事情来获得MFC支持Unicode或默认情况下是MFC的Unicode?

感谢

+1

MFC和Unicode是独立的,你可以使用一个没有其他。如果您使用向导来构建项目,Unicode将是其中一个选项(它应该是默认值)。否则,您可以在项目设置中找到它。 – 2012-01-05 15:44:01

+0

另一个CP文章:http://www.codeproject.com/Articles/11040/Multiple-language-support-for-MFC-applications-wit – 2013-04-26 07:59:53

回答

10

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

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

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

This other codeproject article让你轻松根据系统设置或用户喜好加载资源DLL:代码看起来你的资源DLL其中可用的语言最匹配的用户设置(基于用户的UI语言和区域设置)。该代码还可让您轻松构建包含所有可用语言的菜单。这样,您的用户可以覆盖默认选项。

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

关于资源翻译,翻译管理和资源DLL的创建,您可能想要查看appTranslator。 :-)

关于Unicode中,MFC附带代码的ANSI和Unicode版本广告

END。如果您想构建ANSI或Unicode应用程序,您可以选择:只需在项目设置的第一页中选择即可。当然,如果你是从头开始,你一定要去Unicode。但是,如果遗留原因迫使您保持ANSI/MBCS,请不要太担心:它不会阻止您本地化您的应用程序。

6

年前,当我曾与MFC多种语言的工作中,我们使用单独的资源DLL。你所需要做的就是进行一次调用,以切换资源功能将使用哪个句柄,并且从这一点开始,所有句柄都是自动的。

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

+0

因此,MFC不提供从对话框中分离字符串的方法? – OneWorld 2017-02-17 10:18:36

+0

@OneWorld它不仅仅是MFC,创建对话框的Windows API依赖于嵌入字符串的对话框资源。 – 2017-02-17 13:46:37

相关问题