Qt 国际化:您在 Qt 应用程序中使用什么作为源文本?

Fab*_*ian 4 qt localization internationalization

这个问题是关于最佳实践的。我目前正在研究 Qt 国际化系统。

您在 Qt 应用程序中使用什么作为源文本?

  1. 您是否在应用程序代码中编写英文文本并将其用作最终语言?
  2. 或者您是否编写了英文文本,但仍然为英文版本设置了专用翻译文件,以便代码中的文本永远不会向客户显示?
  3. 或者您是否在代码中使用ID(例如“ID_ABOUT_US”),以便语言文件在更改英文文本时永远不会“丢失”翻译?

背景: 假设我使用英语作为源语言,并且我的应用程序还有 5 个翻译文件。现在发现英文文本表述得不好,需要修改。由于 lupdate 使用的启发式方法,我是否会遇到其他 5 个翻译在更改后“丢失”此翻译的问题?或者您通常认为这是一个好处,因为翻译也应该进行审核?

对你的经历很感兴趣!

问候,

法比安

Pav*_*nek 5

  1. 是的,英语,即使它不是你的母语。AFAIK 是世界上唯一一种仅用 7 位 ASCII 即可完全表达的语言,因此不需要您处理源代码编码。它也是人类翻译人员普遍理解的语言。然而,在源代码中“编写”意味着将所有内容都包含在 tr("") 中,从而实现预期翻译。如果没有翻译(没有installTranslator()调用),tr()则为无操作,因此将显示文本。这同样适用于已安装翻译器的缺失翻译。所以你的翻译不需要完成,未翻译的文本将以你的“源代码”英文显示。

  2. “英语翻译”对于一个很少使用的功能很有用:而不是愚蠢的“收到 1 条消息”,您可以为任何复数提供正确的文本,Qt 会为您完成,无需任何编码。只需使用tr() 重载并使用最后一个数字参数,并在 TS 文件中为每个参数提供所有复数变体n。不再有无休止的 if-else 意大利面条和三元运算符。

    如果您的目标是多种语言(即不仅是英语和其他语言),那么设置“英语翻译”也有利于代码的一致性。英语被视为另一种语言,您可以像任何其他语言一样切换到它。如果您没有英文翻译,则需要卸载翻译器才能使用它,然后再次安装任何其他语言。这对 Qt 来说并不是一个大问题,这只是代码一致性的问题。你可以做一个[语言,翻译]的地图,不需要专门对待英语。

  3. 没有 ID。您会发现自己开发命名约定只是为了不与代码不同部分的翻译重叠。无论如何,您都需要向人工翻译人员提供 id 到可读字符串的映射。关于“失去翻译”的恐惧。如果原文发生了重大变化,那么强制重新翻译是一件好事。如果它没有改变那么多,那么 Linguist 很可能会保留它,因为 TS 文件也保留源文件行。

如有疑问,请阅读Qt 的国际化指南

  • 我不喜欢使用英语短语作为别名的想法。我用身份证。这种方法的唯一缺点是,如果我忘记添加翻译,用户将看到不可读的垃圾。另一方面,如果我忘记了翻译,并且在开发过程中看到了这个字符串,我肯定会注意到,它很引人注目并且引人注目。 (3认同)