Qt 翻译非源文件中的字符串

发布于 2024-10-16 02:27:29 字数 206 浏览 0 评论 0原文

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

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

I have a Qt project which uses XML files. Those XML files contain human-readable text and this text should be translated by using the Qt tools (lupdate, lrelease, QtLinguist).

The question is if it is possible to generate entries in .ts file via lupdate without duplicating the strings from the XML files in a source code file by using the QT_TR_NOOP() macro and friends? Or in general, how do you translate strings in non-source files for Qt projects?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤君无依 2024-10-23 02:27:29

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

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

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

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

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

We had the same problem : XML files containing human readable strings.

Our solution was to make sure that human readable strings in the XML files were easy to extract (we put them in a LABEL attribute) and we developped a small tool which would parse the XML files, extract the strings, generate a context (by extracting data from the XML file), and then generating a CPP header file containing a list of QT_TR_NOOP().

This file was added to our project file (.pro) that was used by lupdate.

This solution was fine for us but we had to be very careful about two things :

  • run this tool each time the content of an XML file changed.
  • make sure the XML files are UTF-8 encoded.
聊慰 2024-10-23 02:27:29

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

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

  1. .ts 文件也是 XML;制作将 XML 转换为 .ts 文件的 XSLT 应该很容易。如果您想针对标准的东西而不仅仅是 Qt,lupdate(和语言学家)也可以处理 XLIFF文件。
  2. 您可以拥有多个 .ts 文件(只需在设置时多次调用 QTranslator::load 即可)

如果您确实希望将所有内容都放在翻译器的一个文件中,请让您的 XSLT 将 lupdate 生成的文件复制到其输出中。

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

You can translate anything you want at runtime by using tr(), as long as the .qm file has a matching translation/context. It shouldn't make any difference whether lupdate extracted it or not.

I don't know how to make lupdate to extract strings from arbitrary XML, but that doesn't mean you can't use linguist.

  1. .ts files are also XML; it should be easy to make an XSLT that transforms your XML into a .ts file. If you want to target something standard instead of just Qt, lupdate(and linguist) can process also XLIFF files.
  2. you can have multiple .ts files (just call QTranslator::load more than once when setting it up)

If you really want to have it all in one file for the translator, have your XSLT copy the lupdate-generated file into its output.

As long as you use a context name that doesn't duplicate something used in the source code, this shouldn't be any different (from Qt's point of view) from the way many apps load a .qm for each DLL that has GUI.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文