Qt从非源文件翻译字符串

时间:2011-02-03 22:39:26

标签: c++ qt translation

我有一个使用XML文件的Qt项目。这些XML文件包含人类可读的文本,应使用Qt工具(lupdate,lrelease,QtLinguist)翻译此文本。

问题是,是否可以通过lupdate在.ts文件中生成条目而不使用QT_TR_NOOP()宏和朋友在源代码文件中复制XML文件中的字符串?或者一般来说,如何在Qt项目的非源文件中翻译字符串?

2 个答案:

答案 0 :(得分:6)

我们遇到了同样的问题:包含人类可读字符串的XML文件。

我们的解决方案是确保XML文件中的人类可读字符串易于提取(我们将它们放在LABEL属性中)并且我们开发了一个小工具来解析XML文件,提取字符串,生成上下文(通过从XML文件中提取数据),然后生成包含QT_TR_NOOP()列表的CPP头文件。

此文件已添加到lupdate使用的项目文件(.pro)中。

这个解决方案对我们来说很好,但我们必须非常小心两件事:

  • 每次更改XML文件的内容时都运行此工具。
  • 确保XML文件是UTF-8编码的。

答案 1 :(得分:3)

只要.qm文件具有匹配的翻译/上下文,您就可以使用tr()在运行时翻译任何内容。 lupdate是否提取它不应该有任何区别。

我不知道如何让lupdate从任意XML中提取字符串,但这并不意味着你不能使用语言学家。

  1. .ts文件也是XML;制作一个将XML转换为.ts文件的XSLT应该很容易。如果你想要标准的东西而不仅仅是Qt,那么lupdate(和语言学家)也可以处理XLIFF个文件。
  2. 你可以拥有多个.ts文件(在设置时只需调用QTranslator :: load多次)
  3. 如果您真的希望将所有内容都放在翻译器的一个文件中,请让您的XSLT将lupdate生成的文件复制到其输出中。

    只要您使用的上下文名称不会复制源代码中使用的内容,这应该与许多应用程序为每个DLL加载.qm的方式不同(从Qt的角度来看)有GUI。