我是一个不得不在MFC应用上做一些工作的.NET人。该应用程序是VS2008 MFC可执行文件,我已转换为VS2010。原始开发人员通过在应用程序命令行中指定具有键值对的.txt文件的名称来进行本地化。安装的可执行文件快捷方式指定了一个不同的.txt文件,具体取决于安装该应用程序的国家/地区。如果您直接运行.exe,这当然不起作用。对我来说这似乎是一种奇怪的方式。
我想用MFC方式做这个,但我很难在Google上找到明确的答案。我的理解是.rc文件中的字符串表应该用于本地化?这是目前MFC的最佳实践吗?
关于字符串表我已经读过,实践是为不同的语言创建多个字符串表。 MFC应用程序如何选择使用哪种语言?它是基于机器当前语言设置还是我可以控制它(可能我们希望语言由我们也在构建的Wix .msi安装程序指定)?
我还读到在MFC应用程序中嵌入所有资源已经失宠了,现在你应该编译单独的资源.dll?这是真的生病调查怎么做...
最后,我是否必须做一些特别的事情才能让MFC支持Unicode,或者默认情况下是MFC Unicode? p>
由于
答案 0 :(得分:10)
这个想法是所有可本地化的项目都应该存储在资源中。标准UI对象(如菜单和对话框)会自动存储在那里(资源)中,但字符串文字(例如:错误消息,消息框提示等)等项目应从源代码中提取到字符串表中。我的这个简短的codeproject article演示了如何在代码中轻松地从字符串表中提取字符串。
注意:资源脚本(.rc)中应该只有一个字符串表。
从那以后,您可以翻译资源并创建资源DLL(也称为附属DLL)。我们的想法是为每种语言保留.rc文件的不同副本。每个转换都编译为无代码 DLL,充当资源的容器。
我的<This other codeproject article允许您根据系统设置或用户首选项轻松加载资源DLL:代码在您的资源DLL中查找哪些可用语言最符合用户设置(基于用户的UI语言和区域设置)。该代码还允许您轻松构建包含所有可用语言的菜单。这样,您的用户就可以覆盖默认选项。免责声明:我的广告如下。随意跳过: - )
关于资源的翻译,翻译管理和资源DLL的创建,您可能需要查看appTranslator。
公元结束: - )
关于Unicode,MFC附带ANSI和Unicode版本的代码。您可以选择是否要构建ANSI或Unicode应用程序:只需在项目设置的第一页中进行选择即可。当然,如果你从头开始,你肯定应该使用Unicode。但如果遗留原因迫使您保持ANSI / MBCS,请不要担心:它不会阻止您本地化您的应用。
答案 1 :(得分:6)
多年前,当我不得不在MFC中使用多种语言时,我们使用了单独的资源DLL。您所需要做的只是拨打一个电话来切换资源功能将使用的处理,从那时起,所有处理都是自动的。
您需要做的不仅仅是更改字符串。特别是对话框中会有字符串,如果翻译后这些字符串变得太长,您可能需要更改布局。