TN057:MFC组件的本地化

备注

以下技术声明,则它在联机文档,首先包括了不更新。因此,某些过程和主题可能已过时或不正确。有关最新信息,建议您搜索议题在联机文档的索引。

此说明描述了一些可以使用本地化组件的设计和过程,则为; 如果应用程序或 OLE 控件或使用 MFC 的 DLL。

概述

在真正理解两个问题解决本地化使用 MFC 的元素。 首先,必须本地化您的资源 —字符串、对话框和特定于您的组件的其他资源。 使用 MFC 生成的大多数元素还包括使用由 MFC 定义的资源。 您必须提供本地化的 MFC 资源。 幸运的是, MFC 已提供多种语言。

此外,在其目标环境 (欧洲或 DBCS 启用环境) 中应准备您的组件运行。 大多数情况下,这取决于具体将字符与高位正确设置和处理具有双字节字符的应用程序字符串。 MFC 为这两个环境启用,默认情况下,这样,在具有插入的不同资源的所有平台使用在安装时的唯一成功率二进制文件是可能的。

本地化组件的资源

本地化应用程序或 DLL 应涉及替换资源以满足目标语言的资源。 对于您的资源,这是相对简单:编辑在资源编辑器中资源并生成应用程序。 如果您的代码正确编写则没有字符串或文本希望本地化硬编码到 C++ 源代码中的 –所有本地化可由修改资源完成。 事实上,您可以实现自己的元素会全部提供一个本地化版本甚至不涉及原始代码的生成。 这是更复杂的,因此,但最值并用于 MFC 选择的框架。 通过直接加载 EXE 或 DLL 文件添加到资源编辑器和编辑资源本地化应用程序也是可能的。 在可能时,它需要这些更改的 reapplication,每次生成应用程序的新版本。

是查找所有资源单独的 DLL 的一种方法来避免,有时称为附属 DLL。 此 DLL 动态然后在运行时加载资源,并从该 DLL 被加载而不是从主模块将所有代码。 MFC 直接支持此方法。 考虑一个应用程序调用 MYAPP.EXE;它可以具有驻留在 DLL 调用的 MYRES.DLL 的所有其资源。 在应用程序的 InitInstance 它将执行以下加载该 DLL 并使 MFC 从该位置加载资源:

CMyApp::InitInstance()
{
   // one of the first things in the init code
   HINSTANCE hInst = LoadLibrary("myres.dll");
   if (hInst != NULL)
      AfxSetResourceHandle(hInst);

   // other initialization code would follow
   .
   .
   .
}

从此时字符串, MFC 从该 DLL 时加载资源而不是从 myapp.exe。 所有资源,但是,必须存在该 DLL;MFC 不会搜索应用程序实例查找特定资源。 此方法同样好地应用于规则 DLL 以及 OLE 控件。 安装程序将复制资源区域设置用户需要 MYRES.DLL 的适当版本。

只创建纯资源 DLL 是相对简单。 您创建一个 DLL 项目,添加您的 .RC 文件添加到,并添加必要的资源。 如果您没有使用此技术的现有项目,可以复制该项目的资源。 在添加资源文件后到项目中,您几乎便可以生成项目。 必须进行的唯一的操作设置包括 /NOENTRY的链接器选项。 此通知链接器 DLL 没有入口点 ),因为它没有代码,它没有入口点。

备注

在 Visual C++ 4.0 中的资源编辑器和更高版本支持多语言每 .RC 文件。这使得很容易管理对单个项目的本地化。每种语言的资源由资源编辑器生成的预处理器指令控件的。

使用提供的 MFC 本地化的资源

生成重用从 MFC 的两点的 MFC 应用程序:代码和资源。 即 MFC 具有各种错误消息、内置对话框的 MFC 类使用的其他资源。 为了完全本地化应用程序,则需要本地化不仅应用程序的资源,而且,直接来自 MFC 的资源。 MFC 自动提供许多不同的语言资源文件,,因此,如果您面向的语言是 MFC 已经支持的一种语言,您需要确保使用这些本地化资源。

自此文本, MFC 支持,中文、德语,西班牙语,法语,意大利语,日语和朝鲜语。 包含这些本地化版本的文件在 MFC \ include \ L.* (“L 委托本地化) 内容。 例如德语文件在 MFC \ include \ L.DEU,。 若要导致应用程序使用这些 RC 文件而不是位于 MFC 的 files \ include,添加 /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU 到 RC 命令行 (这是一个示例;您需要替换安装 Visual C++) 选择以及内容的区域设置。

上述命令,如果您的应用程序静态链接到 MFC 一起使用。 大多数应用程序动态链接 (因为它是 AppWizard 默认值)。 在此方案中,不仅代码以动态链接 ),因此资源。 因此,您可以本地化您的应用程序中的资源,但是, MFC 实现资源将填充 MFC7x.DLL (或更高版本) 或从 MFC7xLOC.DLL,如果存在)。 可以处理此从两个不同的角度。

按照更为复杂的方法是提供了本地化的 MFC7xLOC.DLLs (例如 MFC7xDEU,德语、 MFC7xESP.DLL 西班牙语的等),或更高版本,再安装相应的 MFC7xLOC.DLL 到系统目录,当用户安装您的应用程序时。 这会很复杂的开发人员,并将此类不建议使用最终用户。 请参见 技术说明 56 有关此技术及其警告的更多信息。

最简单且最安全的方法是包含本地化的 MFC 资源在您的应用程序或 DLL (或其附属 DLL,如果使用的)。 这样可避免正确安装 MFC7xLOC.DLL 的问题。 为此,可以在给定的静态用例的相同的命令上面 (正确设置 RC 命令行指向本地化的资源),除此之外,由 AppWizard 添加的还必须删除 /D_AFXDLL 定义。 当 /D_AFXDLL 后, AFXRES.H (和其他 MFC RC 文件) 实际上不定义任何资源 (因为它们是从 MFC DLL 将拉)。

请参见

其他资源

由Number "技术说明

技术说明按类别