我有一个使用XML文件的Qt项目。这些XML文件包含人类可读的文本,应使用Qt工具(lupdate,lrelease,QtLinguist)翻译此文本。
问题是,是否可以通过lupdate在.ts文件中生成条目而不使用QT_TR_NOOP()宏和朋友在源代码文件中复制XML文件中的字符串?或者一般来说,如何在Qt项目的非源文件中翻译字符串?
答案 0 :(得分:6)
我们遇到了同样的问题:包含人类可读字符串的XML文件。
我们的解决方案是确保XML文件中的人类可读字符串易于提取(我们将它们放在LABEL
属性中)并且我们开发了一个小工具来解析XML文件,提取字符串,生成上下文(通过从XML文件中提取数据),然后生成包含QT_TR_NOOP()
列表的CPP头文件。
此文件已添加到lupdate
使用的项目文件(.pro)中。
这个解决方案对我们来说很好,但我们必须非常小心两件事:
答案 1 :(得分:3)
只要.qm文件具有匹配的翻译/上下文,您就可以使用tr()在运行时翻译任何内容。 lupdate是否提取它不应该有任何区别。
我不知道如何让lupdate从任意XML中提取字符串,但这并不意味着你不能使用语言学家。
如果您真的希望将所有内容都放在翻译器的一个文件中,请让您的XSLT将lupdate生成的文件复制到其输出中。
只要您使用的上下文名称不会复制源代码中使用的内容,这应该与许多应用程序为每个DLL加载.qm的方式不同(从Qt的角度来看)有GUI。