MFC 中的国际化

2024-01-05

终于(经过多年的推迟)将我的应用程序本地化为英语以外的其他几种语言。

第一个挑战是设计与我的 C++/MFC 应用程序的集成,该应用程序具有数十个对话框和无数字符串。我遇到了两种可能的替代实现:

  1. 将本地化资源文件编译并部署为 DLL
  2. 提取所有字符串并将其替换为本地化版本。对于每个 语言将有一个 XML(或简单文本)文件。

就我个人而言,我选择第二种选择,因为在我看来它更灵活。更改很多,但并不难,而且非常重要的是,XML 文件对于译者来说将非常容易修改。

任何意见是极大的赞赏。

Regards,
科斯明·温古鲁
http://www.batchphoto.com/ http://www.batchphoto.com/


我用不同的语言做了一些长期存在的 MFC 项目。 我强烈推荐使用纯资源 DLL 的第一种方法。

原因:

(1) 如果用户执行 XCOPY 安装,他在主可执行文件中始终使用默认语言(英语)。

(2) 如果您没有翻译所有内容(例如,您的发布迟到或忘记了一些字符串),如果使用得当,Windows 资源函数会自动以默认语言返回资源 - 您不必在你自己。

(3) 我个人的观点: (a) XML 文件中的换行符、制表符、空格是你的痛苦**。 (b) 合并 XML 文件更糟糕......

(4) 不要忘记编码。在 XML 中没问题,但您的翻译人员可能会使用不合适的编辑器并损坏文件。

现在来说主要原因:

(5) 您将必须重新排列许多对话框,因为许多字符串较长,例如法语或德语比英语好。并且让所有的静态、按钮……变得更大“以防万一”看起来很糟糕。

另一个提示:花一些钱购买一个翻译工具,它可以导入您的项目/二进制文件并建立翻译数据库。这将在首次发布后摊销。

另一个提示(2):如果可能的话,制作一个不包含任何更改而仅包含多语言功能的版本。另外,如果可能的话,将来:以英语发布您的产品。然后一步完成翻译(每种语言)并发布其他语言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC 中的国际化 的相关文章

随机推荐

  • 如何仅在会话级别启用休眠查询缓存?

    如果我有一个查询在单个线程中被多次调用 并且我只想为该线程 或为该会话缓存该查询 及其结果 因为我每个线程使用一个会话 该怎么办 我这样做 注意 我的二级缓存已打开 但主要用于 session get 但我不想将它用于我的查询缓存 因为我只
  • 指定asp.net core静态文件夹的默认文件名

    目前 我在一个文件夹中生成了一个生成的 index html js 和其他静态文件 并且我将该文件夹标记为静态文件夹 通过在 Startup cs 的配置方法中添加以下内容 app UseDefaultFiles app UseStatic
  • 批量文件上传整个文件夹到FTP

    我正在尝试将整个文件夹上传到 ftp 但它只上传一个文件 可能是什么问题 Open Run窗口 cmd ftp s C ftpfile bat 这是我的批处理代码代码 open FTP address USERNAME PASSWORD b
  • 如何重新加载 UIViewController

    我想重新加载选项卡控制器 UIViewController 中包含的所有视图 搜索后我发现我必须应用 setNeedsDisplay 方法 但我无法找到应该在哪里应用它 也欢迎任何其他替代方案 BOOL application UIAppl
  • 脚本全名和路径 $0 调用时不可见

    我有一个脚本 task sh 其内容如下 bin bash CUR DIR pwd SCRIPTPATH CUR DIR dirname 0 当我用 bash task sh 调用它时 它按预期工作 但是当用 task sh 调用它时 lo
  • Powershell 和 UTF-8

    我有一个 html 文件测试 html用atom创建 其中包含 Test 编码 utf 8 当我使用 Powershell 控制台阅读它时 我使用的是法语 Windows Get Content Raw test html 我得到这个 Te
  • Java中的内存流

    我正在寻找 Java 中的内存流实现 实施情况 应该大致模仿 NET内存流 http msdn microsoft com en us library system io memorystream aspx执行 基本上我想上课MemoryS
  • 通过代码配置Ipython后端使用retina显示模式

    我使用代码来配置 Jupyter 笔记本 因为我有一个包含大量笔记本的存储库 并且希望保持所有笔记本的样式一致性 而不必在每个笔记本的开头编写冗长的设置 这样 我所做的就是拥有一种配置 CSS 的方法 一种用于设置 Matplotlib 另
  • 如何使用 API 在 YouTube 社区选项卡上上传帖子?

    我搜索了一些相关内容 但找不到 如何使用 YouTube API 在 YouTube 社区选项卡上上传帖子 v3 不可以吗 遗憾的是 我在 Google 论坛中找到了更多有关此问题的信息 他们说不要发布开发人员类型的问题 我也在这里寻找有关
  • 覆盖 React Framer Motion 中的转换延迟

    我创建motion div组件 其中包含initial animate and whileTap特性
  • map.setMyLocationEnabled(true);不管用

    我刚刚开始开发一个 android 项目并正在使用 Google Map API 我可以在我的应用程序上获取地图 但是当我尝试使用以下命令启用当前位置时map setMyLocationEnabled true 应用程序说不幸的是应用程序已
  • DELETE FROM ... 报告“.”处或附近的语法错误

    我试图从数据库中仅删除一项数据 但是 当我编写命令时 我不断收到一些语法错误 您能告诉我错误在哪里吗 这是我尝试过的命令 DELETE FROM database userprofile WHERE user username some E
  • 我正在尝试编写一个返回多个值的宏

    这条线上出现错误 Finalrow Cells Row Count 1 End X1UP Row Error is 对象所需的运行时错误 424 下面是代码 Sub MyVlookup Dim r As Long C As Long Col
  • 在MATLAB MEX库中使用boost,与MATLAB的版本不同

    我们正在创建许多使用我们的通信库的 MATLAB MEX 文件 这个通信库大量使用了Boost 现在 MATLAB 也在内部使用 boost 这意味着在标准设置中 我们不能使用与 MATLAB 附带的版本不同的 boost 版本 否则就会发
  • Excel中如何将长表格转换为宽表格?

    一张图片胜过千言万语 假设在一张纸中我有下表 使用这些信息 我想以编程方式在另一张纸中生成这样的表格 有点将长表格分解为宽表格 你怎样才能做到这一点 使用VBA Range G1 K99 Clear For Each xx In Range
  • MapActivity 中的 SherlockActionBar

    我在整个应用程序中广泛使用 Sherlock Action Bar 但我有一个继承自 MapActivity 的活动 因此我无法使其继承自 SherlockActivity 有什么方法可以利用地图中的 Sherlock 操作栏来自定义它吗
  • 在 SQL Server 中将标识列重置为零?

    如何在 SQL Server 中将表的 Identity 列重置为零 Edit 我们如何使用 LINQ to SQL 来做到这一点 DBCC CHECKIDENT MyTable RESEED NewValue 您还可以执行截断表 但是 当
  • += 事件运算符

    public void Bar Foo foo new Foo foo MyEvent foo MyEvent foo FireEvent void foo MyEvent object sender EventArgs e Foo sen
  • Spring Security 5 OAuth2客户端密码授予类型

    我有2个应用程序 Spring应用程序1是客户端和资源服务器 Spring应用程序2是授权服务器 用户将能够登录应用程序 1 并访问其资源 我想实现以下流程 用户在登录表单中输入他的凭据 gt 应用程序 1 将使用用户凭据及其密码从应用程序
  • MFC 中的国际化

    终于 经过多年的推迟 将我的应用程序本地化为英语以外的其他几种语言 第一个挑战是设计与我的 C MFC 应用程序的集成 该应用程序具有数十个对话框和无数字符串 我遇到了两种可能的替代实现 将本地化资源文件编译并部署为 DLL 提取所有字符串