3

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

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

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

背景:假设我使用英语作为源语言,并且我的应用程序还有 5 个翻译文件。现在事实证明,英文文本没有很好地表达,需要更改。由于 lupdate 使用的启发式方法,我会在更改之后遇到其他 5 个翻译“丢失”这个翻译的问题吗?还是您通常认为这是一种好处,因为翻译也应该被审查?

对你的经历很感兴趣!

问候,

费边

4

2 回答 2

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

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

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

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

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

于 2012-10-03T21:17:58.380 回答
0

Qt 方法是将您的母语消息包含在用 tr(" ") 标志而不是单独的字符串表包装的代码中

有一个工具可以提取所有这些并为您的(人工)翻译创建一个文件,然后替换应用程序代码中的字符串。见http://qt-project.org/doc/qt-4.8/linguist-manual.html

它还具有 printf() 类型格式,带有位置相关标志,因此在不同的语言中,您可以使用 tr("The %1 is before the %2") 和 tr("zer %2 ist bevor %1")

于 2012-10-03T18:11:11.853 回答