qt cmake 使用自带翻译工具配置步骤
- 创建Qt CMake 程序
- 配置项目 CMake 及 代码
- 使用流程
- 最终CMake 如下
- 最终工程链接为:
- 参考
创建Qt CMake 程序
配置项目 CMake 及 代码
- 在CMake 中添加如下代码, 导入相关的翻译库
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools) #jimbo tr
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools) #jimbo tr
- 继续进行必要步骤
set(TS_FILES ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}_zh_CN.ts) #jimbo tr
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) #jimbo tr
- 将添加到 source 里面,方便在Qt creator 里面查看
#jimbo tr
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
${TS_FILES}
)
- 在CMake的最后添加如下代码, 作用是找出lupdate 和 lrelease 的 可执行文件的路径,并在执行CMake的时候,会自动执行lupdate 和 lrelease 的功能。
#jimbo tr
find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)
message("lupdate:" ${LUPDATE_EXECUTABLE})
message("lrelease: "${LRELEASE_EXECUTABLE})
execute_process(
COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_SOURCE_DIR} -ts ${TS_FILES}
)
execute_process(
COMMAND ${LRELEASE_EXECUTABLE} ${TS_FILES}
)
- 在 app 构建结束后,将代码目录的qtTrans_zh_CN.qm的二进制文件拷贝到 build 的exe 目录
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_SOURCE_DIR}/${PROJECT_NAME}_zh_CN.qm" ${CMAKE_CURRENT_BINARY_DIR}
)
- main.cpp 文件导入代码如下
#include "mainwindow.h"
#include <QApplication>
#include <QLocale>
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
// 工作目录为 可执行文件的 exe所在的 目录
auto isSue = translator.load("qtTrans_zh_CN.qm", QCoreApplication::applicationDirPath());
a.installTranslator(&translator);
MainWindow w;
w.show();
return a.exec();
}
使用流程
- 在 ui 文件随便添加几个 button 和 label
- 在 mainwindow.cpp 中随便加几个tr(。。。) 包裹的文字
auto testStr = tr("not good");
qDebug() << "not good > " << testStr << QCoreApplication::applicationDirPath();
- 重新执行下 CMake 文件。 这时
qtTrans_zh_CN.ts
会将 代码里面所有待翻译的 字符串导入到当前文件
qtTrans_zh_CN.ts
文件用Qt Linguist
编辑
- 翻译字符串填好好,标记为 完成
- 再次编译 CMake 文件,这时候
lrelease
会将qtTrans_zh_CN.ts
转换成qtTrans_zh_CN.qm
,并存储在 当前代码的文件夹里面 - 编译运行程序。这时会将代码目录的
qtTrans_zh_CN.qm
拷贝到 exe 所在目录 - 运行程序,
QTranslator
会 加载 exe 目录的qtTrans_zh_CN.qm
翻译。 - 实际显示文本为翻译后的文本
最终CMake 如下
cmake_minimum_required(VERSION 3.5)
project(qtTrans VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools) #jimbo tr
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools) #jimbo tr
set(TS_FILES ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}_zh_CN.ts) #jimbo tr
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) #jimbo tr
#jimbo tr
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
${TS_FILES}
)
qt_add_executable(${PROJECT_NAME}
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
install(TARGETS ${PROJECT_NAME}
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(${PROJECT_NAME})
endif()
#jimbo tr
find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)
message("lupdate:" ${LUPDATE_EXECUTABLE})
message("lrelease: "${LRELEASE_EXECUTABLE})
execute_process(
COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_SOURCE_DIR} -ts ${TS_FILES}
)
execute_process(
COMMAND ${LRELEASE_EXECUTABLE} ${TS_FILES}
)
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_SOURCE_DIR}/${PROJECT_NAME}_zh_CN.qm" ${CMAKE_CURRENT_BINARY_DIR}
)
最终工程链接为:
https://github.com/goldWave/QT_Demo/tree/main/qtcreator_translate_demo
参考
https://blog.csdn.net/weixin_44488341/article/details/135929421