Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java读取.qm翻译文件_Java_Qt_Internationalization - Fatal编程技术网

用Java读取.qm翻译文件

用Java读取.qm翻译文件,java,qt,internationalization,Java,Qt,Internationalization,我正在尝试用Java读取.qm翻译文件。 .qm文件是二进制文件。我没有访问.ts文件的权限。 我找不到关于这些.qm文件的太多信息。 它们是如何组织的? 关于,据我所知,没有任何文档,但是如果您查看,您应该能够遵循QM文件的格式 您可能需要在Java中重新实现QTranslator,因为您不仅需要加载文件的能力,还需要以Qt方式提取和应用翻译。据我所知,没有文档,但如果您查看,您应该能够遵循QM文件的格式 您可能需要在Java中重新实现QTranslator,因为您不仅需要加载文件的能力,还需

我正在尝试用Java读取.qm翻译文件。 .qm文件是二进制文件。我没有访问.ts文件的权限。 我找不到关于这些.qm文件的太多信息。 它们是如何组织的?
关于,

据我所知,没有任何文档,但是如果您查看,您应该能够遵循QM文件的格式


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

据我所知,没有文档,但如果您查看,您应该能够遵循QM文件的格式

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

根据OP的要求:

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

我不能给出一个真实的例子,因为我现在才知道它在理论上是如何工作的,我还没有尝试过,因为它不是微不足道的。但如果你想尝试一下,一般的想法是:

创建C++ DLL并构建它以对抗QtCar。最简单的方法是从他们的网站下载Qt。例如,可以使用QtCreator创建默认库项目注意:除了Qt5Core.dll,Qt还需要其他库才能正确运行。它们都包含在安装中,但一旦部署了应用程序,当然也必须包含它们 将JNI包含到C++项目中,并链接到它。如果您是新手,这里有一个不错的教程:
  • 创建包装器方法。在cpp中,您可以从java调用方法,这些方法获取java字符串,将它们转换为QString,使用QTranslator翻译它们,然后将它们转换回来
  • 用Java加载库并执行这些方法
  • 重要提示:
    首先,我不知道java如何处理dll依赖关系。如果在加载dll时遇到错误,可能是因为dll的依赖项不存在。其次,Qt的大多数操作通常需要在主线程中运行
    QCoreApplication
    。我在没有这样的应用程序的情况下测试了翻译器,结果成功了。因此,显然,对于翻译,只有应用程序是不需要的。但是,根据您在dll中的操作,我认为了解这一点很重要

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

    根据OP的要求:

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

    我不能给出一个真实的例子,因为我现在才知道它在理论上是如何工作的,我还没有尝试过,因为它不是微不足道的。但如果你想尝试一下,一般的想法是:

    创建C++ DLL并构建它以对抗QtCar。最简单的方法是从他们的网站下载Qt。例如,可以使用QtCreator创建默认库项目注意:除了Qt5Core.dll,Qt还需要其他库才能正确运行。它们都包含在安装中,但一旦部署了应用程序,当然也必须包含它们 将JNI包含到C++项目中,并链接到它。如果您是新手,这里有一个不错的教程:
  • 创建包装器方法。在cpp中,您可以从java调用方法,这些方法获取java字符串,将它们转换为QString,使用QTranslator翻译它们,然后将它们转换回来
  • 用Java加载库并执行这些方法
  • 重要提示:
    首先,我不知道java如何处理dll依赖关系。如果在加载dll时遇到错误,可能是因为dll的依赖项不存在。其次,Qt的大多数操作通常需要在主线程中运行
    QCoreApplication
    。我在没有这样的应用程序的情况下测试了翻译器,结果成功了。因此,显然,对于翻译,只有应用程序是不需要的。但是,根据您在dll中的操作,我认为了解这一点很重要


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

    我会深入了解。谢谢,我很喜欢。谢谢。如果你使用java和Qt C++项目(即Android),最简单的解决方案是使用JNI调用C++方法来进行翻译。如果是这样的话,我可以举一个例子。这个应用程序是JavaSwing应用程序。我只会读取(并使用)这个.qm文件。预计不会有其他互动。但为什么不是JNI呢。为什么不是JNA?如果你使用java和Qt C++项目(即Android),最简单的解决方案是使用JNI调用C++方法来进行翻译。如果是这样的话,我可以举一个例子。这个应用程序是JavaSwing应用程序。我只会读取(并使用)这个.qm文件。预计不会有其他互动。但为什么不是JNI呢。为什么不是JNA?你的例子将被大大的理解。构建整个JNI说唱器是一个地狱,尤其是当你不是(我)熟悉C++和QT。打造整个JNI说唱歌手简直是地狱。从头开始构建它有点过分,因为我想这样做。无论如何谢谢你。我会尝试在java中直接读取文件。构建整个JNI说唱器是非常糟糕的,尤其是当你不熟悉C++和QT时。打造整个JNI说唱歌手简直是地狱。从头开始构建它有点过分,因为我想这样做。无论如何谢谢你。我将尝试用Java直接读取该文件。。