CloudCompare 是用Qt 寫的,Qt 有個配套的翻譯軟件叫Linguist,非常好用。生成對應的翻譯文件主要涉及兩個exe:lupdate
和lrelease
,它們在Qt的bin目錄下(類似這個:C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin
)
下面就講講官網上lupdate
和lrelease
這兩個exe的使用方法。官網鏈接:https://doc.qt.io/qt-5/linguist-manager.html#lupdate
以下的教程,是通用的,不只是適用於CloudCompare
lupdate
lupdate
負責生成ts文件,ts文件是Linguist能編輯的文件,其實是個xml格式的文件。lupdate
的大概用法如下:
lupdate xxx.h xxx.cpp -ts xxx.ts xxx.ts
-ts
選項的前面,是與ts文件關聯的源代碼文件,源代碼中被QObject::tr()
函數包含的字符串都會被提取出來,這些纔是可以被翻譯的。-ts
選項的後面,就是與即將生成的ts文件。一開始需要自己新建一個,改成.ts後綴即可。
根據它的用法,我們要生成一箇中文包,就先新建一個txt文件,然後改一下後綴,名稱可以爲:language_zh.ts
,把它放到.\CloudCompare\qCC\translations\
目錄下。然後再打開powershell,調用lupdate
如下:
lupdate YOUR_FILE_LIST -ts language_zh.ts
上面的這個YOUR_FILE_LIST
變量,就是你想關聯的源代碼的文件列表,就是一個數組,你可以用任意方式獲取它。下面就用一個powershell腳本來實現(請自行更改相應路徑)
$QT_DIR="C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin"
$CC_DIR="D:\Codes\CloudCompare"
$CC_BUILD_DIR="D:\Codes\CloudCompare\Build"
$TS_DIR="D:\Codes\CloudCompare\qCC\translations"
# files need to link
$build_files=(dir $CC_BUILD_DIR -R *.h).FullName+(dir $CC_DIR -R *.cpp).FullName
$qcc_files=(dir $CC_DIR_QCC -R *.h).FullName+(dir $CC_DIR_QCC -R *.cpp).FullName
$files = $build_files+$qcc_files
$files_less = @()
foreach($f in $files)
{
if($f.Contains("auto_gen") -or
$f.Contains("CMakeFiles") -or
$f.Contains("moc") -or
$f.Contains("\common\") -or
$f.Contains("\contrib\") -or
$f.Contains("\plugins\"))
{
continue
}
$files_less += $f
}
$ts_files=(dir $TS_DIR -R *.ts).FullName
# call lupdate
cd $QT_DIR
lupdate $files_less -ts $ts_files
powershell腳本可以用系統自帶的ISE編輯、運行
生成了ts文件,就可以用Linguist打開了。首次打開可以選擇地區、語言等等。這個設置後面也可以改,如下圖:
lrelease
lrelease
負責生成qm文件,二進制文件,就是cc運行時需要的。lrelease
使用非常簡單,後面直接跟需要發佈的ts文件。
lrelease language_zh.ts
上面就會生成與這同名的qm文件,然後放到cc能夠識別的位置就行了。
接下來大量的工作就是用Linguist翻譯……
手動翻譯可以參考一下這個中英對照表:https://blog.csdn.net/xinjiang666/article/details/100587647
如果有興趣,可以嘗試一下下面的教程
短語書,批量翻譯
短語書,批量翻譯教程:
https://doc.qt.io/qt-5/linguist-translators.html
https://het.as.utexas.edu/HET/Software/html/linguist-translators.html
某個大神寫的,用谷歌自動翻譯:https://github.com/esutton/i18n-translate-qt-ts
隨着CC版本的不斷變化,每一版都需要有對應的ts文件,否則關聯文件對應不上,但是如果我們有短語書,則可以應用到任何版本,減少一部分工作量