这个问题是关于最佳做法的。我目前正在坚持Qt国际化体系。
您在Qt应用程序中使用什么作为源文本?
背景:假设我使用英语作为源语言,并为我的应用程序添加了5个翻译文件。现在事实证明,英文文本没有很好地制定,需要改变。由于lupdate使用的启发式方法,我是否会遇到其他5个翻译在变更之后“丢失”此翻译的问题?或者你通常认为这是一个好处,因为翻译也应该被审查?
对您的经历非常感兴趣!
问候,
费边
答案 0 :(得分:4)
是英语,即使它不是您的家乡。 AFAIK是世界上唯一一种只用7位ASCII完全表达的语言,因此不需要你使用源代码编码。它也是人类翻译的普遍理解语言。但是,源代码中的“写入”意味着将所有内容括在tr(“”)中,从而实现预期的翻译。如果没有翻译(没有installTranslator()
调用),tr()
是无操作,因此将显示文本。这同样适用于已安装的翻译器的缺失翻译。因此,您的翻译不需要完成,未翻译的文本将显示在您的“源代码”英语中。
“英语翻译”适用于一个很少使用的功能:而不是愚蠢的“ 1个消息接收”你可以拥有任何复数的正确文本,Qt将为你没有任何编码。只需使用tr() overload with using the last numeric parameter并根据参数n
提供TS文件中的所有复数变体。没有更多无穷无尽的其他意大利面和三元经营者。
如果您的目标是多种语言(即不仅仅是英语和其他语言),那么设置“英语翻译”也有利于代码的一致性。英语被视为另一种语言,您可以像使用任何其他语言一样切换到它。如果您没有英文翻译,则需要卸载翻译器以退回到翻译器,然后再安装任何其他语言。并不是说它对Qt来说是一个大问题,它只是关于代码的一致性。你可以做[语言,翻译]的地图,不需要特别对待英语。
没有ids。您将发现自己开发命名约定只是为了不与代码的不同部分的自己的翻译重叠。无论如何,您都需要将id到可读字符串的映射提供给人工翻译。关于“失去翻译”的恐惧。如果原始文本发生显着变化,那么强制重新翻译是一件好事。如果它没有那么大的改变,那么Linguist很可能会保留它,因为TS文件也保留了源文件行。
如有疑问,请阅读Qt's internationalization guide
答案 1 :(得分:0)
Qt方法是在包含tr(“”)标志的代码中包含您的本机语言消息,而不是单独的字符串表
有一个工具可以提取所有这些并为您的(人工)翻译器创建一个文件,然后它会替换应用程序代码中的字符串。见http://qt-project.org/doc/qt-4.8/linguist-manual.html
它还有一个printf()类型格式,带有位置相关的标志,所以在不同的语言中你可以有tr(“%1在%2之前”)和tr(“zer%2 ist bevor%1”)< / p>