【问题标题】:wxWidgets and wxLocale -- gettext and the symbolic language inside the application?wxWidgets 和 wxLocale——gettext 和应用程序中的符号语言?
【发布时间】:2012-12-04 11:09:04
【问题描述】:

我正在使用 wxWidgets 重写我们的旧应用程序。该应用程序使用旧的自制语言词典机制,我想使用 wxWidgets 支持的标准gettext 方式替换它。

问题在于应用程序内部不使用用户可读的字符串,而是使用应使用所选语言词典翻译的符号标识符。换句话说,翻译应该总是发生。例如,代码说:

wxMenu * mnuParamSelect = new wxMenu();
mnuParamSelect->Append(wxID_mnuiParamSelect,
                       _("mnuiParamSelect"),
                       _("hlpParamSelect"));

这样,它使用默认的符号语言,必须始终翻译(如符号mnuiParamSelect 为英语为Select the parametres...Vyber parametry... 为@ 987654326@等)。

考虑到gettext,这似乎不是通常的方法。我对gettext 很陌生。我应该注意与符号语言识别方法相关的任何问题吗?

感谢您的时间和经验,

彼得

【问题讨论】:

    标签: internationalization wxwidgets


    【解决方案1】:

    据我所知,第一个大问题是创建新的翻译会很困难(或者至少很耗时),因为翻译者只会看到符号 id,并且需要在一个不同的文件。

    第二个问题:如果您使用诸如“%d 个文件”之类的 printf 样式格式,如果符号 id 不包含这些格式说明符,gettext(即 msgfmt)将不会为您进行任何语法检查。因此,例如,如果您的翻译器添加了过多的“%d”,则应用程序在与该翻译一起使用时可能会崩溃。

    【讨论】:

    • 是的,我明白这一点。另一方面,应用已经不小了。它已经在内部使用了符号标识。我们使用四种语言版本。这样,我们就有了一些脚本和一个基于文本文件的数据库,以及用于同步翻译的工具(即尚未翻译成什么语言的内容)。在获得了一些 po 文件的经验之后,我可能可以轻松地生成它们。无论如何,如果文本不是符号,gettext 是否会检查 printf 占位符的数量?
    • 是的; msgfmt -c 不仅检查 printf 占位符的数量,还检查它们的顺序是否正确。实际上,如果您打算以这种非正统的方式使用它并避免利用它提供的功能,我看不出转向 gettext 的意义。
    • 实际上,我可能会在应用程序的新部分中混合使用旧的应用程序方法和经典的 gettext。研究这种可能性的主要原因是迁移到 wxWidgets GUI,其中_("automatically translated texts") 的工作似乎很自然。另一方面,我需要替换很多与 GUI 相关的代码,如果某些事情可以自动化或手动机械地完成(无需太多重新思考)......
    • 我不认为编写一个脚本用相应的字符串替换源代码中的符号 id 会非常困难,例如英文 .po 文件。也就是说,如果gettext方式是你想要转换的方式。
    • 谢谢!我将很快制定相关问题。
    【解决方案2】:

    po 文件可以包含一个 msgctx(消息上下文)字段,它构成了 id 的一部分。

    因此,您可以使用 msgctx 作为符号名称,使用 msgid 作为默认语言环境文本,使用 msgstr 作为翻译文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多