2017-04-24 60 views
1

我正在嘗試使用Java讀取.qm翻譯文件。 .qm文件是二進制文件。我無法訪問.ts文件。 而我沒有找到關於這些.qm文件的很多信息。 它們是如何構成的? 此致,使用Java讀取.qm翻譯文件

+0

如果您將Java與Qt C++項目(即Android)一起使用,最簡單的解決方案是使用JNI調用C++方法來執行翻譯。如果這是我可以舉例說明的情況。 – Felix

+0

該應用程序是Java Swing應用程序。我只會閱讀(並使用).qm文件。預計沒有其他交互作用。但爲什麼不是JNI。爲什麼不JNA?你的例子將非常感謝。 – lvr123

回答

0

沒有我知道的文件,但如果你看QTranslator::load你應該能夠遵循QM文件的格式。

您可能需要在Java中重新實現QTranslator,因爲您不僅需要加載文件的能力,還需要以Qt方式提取和應用翻譯。

+0

我深入瞭解這一點。謝謝。 – lvr123

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庫和執行這些方法

重要:
首先,我不知道java中如何處理DLL依賴。如果您在加載dll時遇到錯誤,可能是因爲您的dll的依賴關係不存在。其次,Qt通常需要在主線程中運行大多數操作的QCoreApplication。我沒有這樣的應用程序測試翻譯,它的工作。顯然,翻譯只有應用程序是不需要的。然而,根據你在你的dll中做什麼,我認爲這很重要。

如果您需要更多的細節,請隨時詢問。

+0

構建整個JNI說唱歌手是非常地獄,尤其是當你不熟悉C++和qt時。構建整個JNI說唱歌手是非常地獄。從頭開始構建它有點矯枉過正,因爲我願意這樣做。不管怎麼說,還是要謝謝你。我會試着直接用Java讀取文件。 – lvr123