我正在嘗試使用Java讀取.qm翻譯文件。 .qm文件是二進制文件。我無法訪問.ts文件。 而我沒有找到關於這些.qm文件的很多信息。 它們是如何構成的? 此致,使用Java讀取.qm翻譯文件
回答
沒有我知道的文件,但如果你看QTranslator::load
你應該能夠遵循QM文件的格式。
您可能需要在Java中重新實現QTranslator
,因爲您不僅需要加載文件的能力,還需要以Qt方式提取和應用翻譯。
我深入瞭解這一點。謝謝。 – lvr123
按OP的要求:
您可以通過使用Qt庫和JNI使用這些文件。通過在C++ dll中使用轉換器,您可以輕鬆轉換字符串。但是,您無法提取文件或列出包含的翻譯。但如果你需要的只是實際的翻譯,這個解決方案應該可以工作。
我不能舉一個真實的例子,因爲我只是現在它在理論上是如何工作的,我還沒有嘗試過,因爲它不是微不足道的。但是如果你急於嘗試,總體思路是:
- 創建一個C++的DLL,並針對QtCore構建它。最簡單的方法是從他們的網站qt.io下載Qt。你可以例如用QtCreator創建一個默認的庫項目。 注意:除了Qt5Core.dll,Qt還需要其他庫才能正常運行。它們都包含在安裝中,但是一旦部署了應用程序,那當然也必須包含它們。
- 將JNI包含在C++項目中並與之鏈接。如果你是新手,下面是一個很好的教程:Java Programming Tutorial
- 創建你的包裝方法。 cpp中的方法可以從java調用帶有java字符串的方法,將它們轉換爲QString,使用QTranslator轉換它們並將它們轉換回來。
- 負荷的Java庫和執行這些方法
重要:
首先,我不知道java中如何處理DLL依賴。如果您在加載dll時遇到錯誤,可能是因爲您的dll的依賴關係不存在。其次,Qt通常需要在主線程中運行大多數操作的QCoreApplication
。我沒有這樣的應用程序測試翻譯,它的工作。顯然,翻譯只有應用程序是不需要的。然而,根據你在你的dll中做什麼,我認爲這很重要。
如果您需要更多的細節,請隨時詢問。
構建整個JNI說唱歌手是非常地獄,尤其是當你不熟悉C++和qt時。構建整個JNI說唱歌手是非常地獄。從頭開始構建它有點矯枉過正,因爲我願意這樣做。不管怎麼說,還是要謝謝你。我會試着直接用Java讀取文件。 – lvr123
- 1. Qt翻譯文件(qm)info
- 2. Qt5加載.qm翻譯文件
- 3. 在Qt中的動態翻譯中加載qm文件
- 4. 翻譯文件,使用此代碼谷歌翻譯的Java API
- 5. 如何在Visual Studio Qt項目中包含C:\ Qt \ 5.9.1 \ msvc2015 \翻譯.qm文件(Qt framework qm文件)?
- 6. 翻譯文本文件使用谷歌翻譯API或其他
- 7. 使用java讀取文件頭文件
- 8. 從文本文件中讀取單個單詞並翻譯 - C
- 9. 使用QTranslator加載qm文件
- 10. 使用谷歌翻譯API翻譯PDF文件
- 11. 使用谷歌翻譯自動翻譯django.po文件
- 12. 使用ant編譯在java中讀取靜態文件
- 13. 應用翻譯使用gettext .po文件
- 14. angular-translate在翻譯文件中翻譯
- 15. Doctrine可翻譯如何只讀取記錄與翻譯
- 16. 使用gettext翻譯.js文件
- 17. 使用make來翻譯reST文件
- 18. 使用csv文件的Symfony翻譯
- 19. Drupal翻譯文件
- 20. Kohana翻譯文件
- 21. Magento翻譯文件
- 22. 角翻譯文件
- 23. 翻譯PHP文件
- 24. 用XML讀取文件Java
- 25. 用java讀取tzdata文件
- 26. 用Java讀取XSD文件
- 27. 用Java讀取XML文件
- 28. 用Java讀取bin文件
- 29. 用Java讀取XML文件
- 30. 用Java讀取文件
如果您將Java與Qt C++項目(即Android)一起使用,最簡單的解決方案是使用JNI調用C++方法來執行翻譯。如果這是我可以舉例說明的情況。 – Felix
該應用程序是Java Swing應用程序。我只會閱讀(並使用).qm文件。預計沒有其他交互作用。但爲什麼不是JNI。爲什麼不JNA?你的例子將非常感謝。 – lvr123