【问题标题】:How to use/load .rc file for multiligual application?如何为多语言应用程序使用/加载 .rc 文件?
【发布时间】:2017-12-21 17:39:46
【问题描述】:

我正在使用 Visual Studio 中的 VC++、MFC 开发多语言应用程序。我为每种语言都有单独的 .rc 文件。

English.rc   //having string table for English language
French.rc    //having string table for French language
German.rc     //having string table for German language

每种语言都有自己的字符串表。
因为我们可以使用函数LoadString(ID_HERE) 从字符串表中获取字符串值。我想链接不同语言的 .rc 文件,以便我可以获得不同语言的字符串。默认情况下,English.rc 文件与项目关联。我想知道如何将其更改为另一个 .rc 文件。

如何在运行时加载/链接任何特定语言的 .rc 文件,或者通过在下拉框中选择任何语言来更改语言?
我不想为此使用 DLL 方法。有什么直接的方法可以将 .rc 文件链接到项目吗?

【问题讨论】:

  • “我不想为此使用 DLL 方法。” - 我不知道这是什么意思,但是将资源脚本编译成资源 -只有模块是标准解决方案。见Adding Multilingual User Interface Support to an Application
  • @IInspectable 我检查了一些链接。在其中一个中,它通过将所有 .rc 文件添加在一起并尝试使用它来创建单独的 DLL。我认为您提供的链接也有类似的“HelloModule.dll”
  • 我链接到的教程为每种语言创建了一个单独的 MUI 模块,以及与语言无关的 "HelloModule.dll" 文件,其中包含代码和语言中立的后备资源.虽然可以在同一个模块中存储给定资源的多语言版本,但您将失去使用系统 MUI 支持的能力,因为它会自动探测特定语言的 MUI 文件。有关详细信息,请参阅 LANGUAGE statement 的文档。

标签: visual-c++ mfc


【解决方案1】:

就是这样。您必须创建一个资源 dll 并从中加载资源。另一种方法是将所有资源作为语言依赖条件。然后,MFC 会根据操作系统语言选择资源。 但是对于大型项目来说,让所有语言保持同步几乎是不可能的,而且您无法控制显示的语言。

语言资源 dll 的工作方式如下:

HMODULE hm = ::LoadLibrary(language_dll);
if(hm)
{
    AfxSetResourceHandle(hm);

    if(m_hLanguageDLL)
        ::FreeLibrary(m_hLanguageDLL);
    m_hLanguageDLL = hm;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多