当前位置: 首页 > 工具软件 > linguist > 使用案例 >

QT6.3 CMake Linguist多语言配置记录

彭衡
2023-12-01

记录QT6.3使用CMake完成国际化

参照网上和教材的例子,产生的ts文件一直只有一个空的框架,无法在linguist中加载。绕了很多路,最后才发现是有编译项目没勾选。

第一步:在CMake文件中添加内容,参考https://doc.qt.io/qt-6/qtlinguist-cmake-qt-add-translations.html。

qt_add_lupdate(TestHello TS_FILES  TestHello.ts)
qt_add_lrelease(TestHello
    TS_FILES TestHello.ts
    QM_FILES_OUTPUT_VARIABLE qm_files)
qt_add_resources(TestHello "translations"
    PREFIX "/"
    BASE "${CMAKE_CURRENT_BINARY_DIR}"
    FILES "${qm_files}")

以上3条命令实际可以用以下命令替代,但qt_add_translations有可能会变更,所以不采用。

qt_add_translations(TestHello TS_FILES TestHello.ts)

添加完以上内容后,会在源代码目录下生成ts文件TestHello.ts,在编译目录生成qm文件TestHello.qm。 但这时的TestHello.ts只有一个框架,无法在linguist中加载。

第二步: 勾选lupdate 和 lrelease目标
在编译的”概要"里面有显示 :

CMake Warning at D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6LinguistTools/Qt6LinguistToolsMacros.cmake:241 (message):
  Translation file 'E:/QT/QT6/CH15/TestHello/TestHello.ts' does not exist.
  Consider building the target 'TestHello_lupdate' to create an initial
  version of that file.
Call Stack (most recent call first):
D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6LinguistTools/Qt6LinguistToolsMacros.cmake:371 (qt6_add_lrelease)
  CMakeLists.txt:54 (qt_add_lrelease)

这里提示TestHello_lupdate目标没有编译。

项目->Build->Build的步骤->Targets中勾选TestHello_lupdateTestHello_lrelease两个目标后,再次Build, 就会在编译输出中出现令人期待的结果:

[1/5 3.7/sec] cmd.exe /C "cd /D E:\QT\QT6\CH15\build-TestHello-Desktop_Qt_6_3_0_MinGW_64_bit-Debug && D:\Qt\Tools\CMake_64\bin\cmake.exe -DIN_FILE=E:/QT/QT6/CH15/build-TestHello-Desktop_Qt_6_3_0_MinGW_64_bit-Debug/.lupdate/TestHello_project.cmake -DOUT_FILE=E:/QT/QT6/CH15/build-TestHello-Desktop_Qt_6_3_0_MinGW_64_bit-Debug/.lupdate/TestHello_project.json -P D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6LinguistTools/GenerateLUpdateProject.cmake && D:\Qt\6.3.0\mingw_64\bin\lupdate.exe -project E:/QT/QT6/CH15/build-TestHello-Desktop_Qt_6_3_0_MinGW_64_bit-Debug/.lupdate/TestHello_project.json"
Updating '../TestHello/TestHello.ts'...
    Found 3 source text(s) (3 new and 0 already existing)

第三步: 在linguist中修改ts文件
这个时候再用linguist加载生成的TestHello.ts文件,就可以正常翻译了。再次编译就会使用修改后的ts文件。

第四处:在main.cpp中安装qm文件
最后,在main.cpp中安装qm文件即可。

#include <QApplication>
#include <QTranslator>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTranslator *tr = new QTranslator;
    bool test = tr->load(":/TestHello.qm");
    qDebug()<<test;
    a.installTranslator(tr);
    MainWindow w;
    w.show();
    return a.exec();
}

如果没有将qm文件作为资源编译到项目中,则需要在QTranslator的load中指定qm方件的绝对路径。其它更多用法参考https://doc.qt.io/qt-6/qtlinguist-cmake-qt-add-translations.html。

 类似资料: