【问题标题】:Loading caption of controls from resource DLL从资源 DLL 加载控件的标题
【发布时间】:2010-10-19 13:29:47
【问题描述】:

我是 MFC 新手,我需要构建一个应该能够在运行时更改语言的多语言应用程序。

AFAIK 使用 MFC 进行国际化的常用方法是创建纯资源 DLL。但是似乎没有简单的方法(也就是说,加载 DLL,调用一些函数,然后 MFC 自动更新所有东西或类似的东西)在运行时切换资源 DLL,对吧?

所以我将不得不手动更新所有控件等等。我已经设法从 DLL 的字符串表中加载字符串,但是由于按钮等控件的标题存储在相应的对话框中(如果我相信我的资源黑客:))我认为必须有一种方法来加载它们并避免手动在字符串表中存储一个附加字符串。

或者还有其他我不知道的方法吗?

如果有什么不同...我必须使用 MS Embedded Visual c++ 4

【问题讨论】:

    标签: visual-c++ mfc internationalization


    【解决方案1】:

    我从事一个大型本地化 MFC 项目。这是我们的策略:

    1. 键字典 -> 本地化字符串,特定于每种语言。有几种方法可以实现这一点,稍后会详细介绍。

    2. 对话框资源中的控件 ID 或标题设置为用于查找翻译的键

    3. 创建一个基本的 CDialog、CFormView 等并在 init 调用 ::EnumChildWindows 中。在回调中,查找翻译并将控件的标题替换为翻译。

    对于您的字典,您可以采用多种方式。

    • 如果您想依赖内置的本地化资源选择和字符串表,您必须以某种方式将控件与字符串 ID 匹配。您可以仔细确保控件ID与字符串ID匹配,也可以对标题中的ID进行ASCII编码,然后使用atoi解析int值。

    • 您可以放弃内置的本地化字符串表处理并为每种语言维护自己的字符串 -> 字符串字典。这使您可以将标题设置为资源中的非本地化字符串,从而使布局更容易(尽管您仍然需要在所有语言中进行测试。)它将要求您进行自己的“依赖注入”以确保加载找到正确的字典。您希望能够在不重新构建核心二进制文件的情况下发布更新/其他语言。

    【讨论】:

      【解决方案2】:

      如果您不想要求重新启动应用程序(是最简单的解决方案,也是您应该使用 IMO 的解决方案),您可以使用资源 dll 并重新创建主窗口用户切换语言。这样,MFC 将以新语言重新创建菜单等。无论如何,从您切换资源句柄的那一刻起,新对话框就会以新语言显示。

      我不确定这与嵌入式世界有何关系,我的经验来自桌面 MFC。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 2016-12-22
        • 1970-01-01
        相关资源
        最近更新 更多