使用Java读取.qm翻译文件

时间:2017-04-24 13:17:20

标签: java qt internationalization

我试图用Java读取.qm翻译文件。 .qm文件是二进制文件。我无法访问.ts文件。 而且我没有找到关于这些.qm文件的更多信息。 他们是如何构建的? 的问候,

2 个答案:

答案 0 :(得分:0)

我所知道的文档没有,但如果你查看QTranslator::load,你应该能够遵循QM文件的格式。

您可能需要在Java中重新实现<If><Else>,因为您不仅需要加载文件,还需要以Qt方式提取和应用翻译。

答案 1 :(得分:0)

根据OP的要求:

您可以使用Qt库和JNI来使用这些文件。通过在c ++ dll中使用翻译器,您可以轻松地翻译字符串。但是,您无法提取文件或列出包含的翻译。但如果你需要的只是实际翻译,那么这个解决方案应该可行。

我不能给出一个真实的例子,因为我现在才在理论上如何运作,我没有尝试过,因为它并非无足轻重。但如果你渴望尝试一下,那么一般的想法就是:

  1. 创建一个C ++ DLL并针对QtCore构建它。最简单的方法是从他们的网站qt.io下载Qt。例如,您可以使用QtCreator创建默认库项目。 注意:除了Qt5Core.dll,Qt还需要其他库才能正常运行。它们都包含在安装中,但是一旦部署了应用程序,那些当然也必须包括在内。
  2. 将JNI包含在C ++项目中并链接到它。如果你是新手,这是一个很好的教程:Java Programming Tutorial
  3. 创建包装器方法。 cpp中的方法,你可以从java调用java字符串,将它们转换为QString,用QTranslator转换它们并将它们转换回来。
  4. 使用Java加载库并执行这些方法
  5. 重要:
    首先,我不知道java如何处理dll依赖项。如果在加载dll时遇到错误,可能是因为你的dll的依赖项不存在。其次,对于大多数操作,Qt通常需要在主线程中运行QCoreApplication。我在没有这样的应用程序的情况下测试了翻译器,并且它有效。显然对于翻译而言,不需要应用程序。但是,根据你在dll中所做的事情,我认为这一点很重要。

    如果您需要更多详细信息,请随时提出。