当前位置: 首页 > news >正文

Qt6 CMake 中引入 Qt Linguist 翻译功能

qt cmake 使用自带翻译工具配置步骤

  • 创建Qt CMake 程序
    • 大体流程
    • 配置项目 CMake 及 代码
    • 使用流程
    • 最终CMake 如下
    • 最终工程链接为:
    • 参考

创建Qt CMake 程序

大体流程

在这里插入图片描述

配置项目 CMake 及 代码

  1. 在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
  1. 继续进行必要步骤
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
  1. 将添加到 source 里面,方便在Qt creator 里面查看
#jimbo tr
set(PROJECT_SOURCESmain.cppmainwindow.cppmainwindow.hmainwindow.ui${TS_FILES}
)
  1. 在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}
)
  1. 在 app 构建结束后,将代码目录的qtTrans_zh_CN.qm的二进制文件拷贝到 build 的exe 目录
add_custom_command(TARGET ${PROJECT_NAME}POST_BUILDCOMMAND  "${CMAKE_COMMAND}" -E copy "${CMAKE_SOURCE_DIR}/${PROJECT_NAME}_zh_CN.qm" ${CMAKE_CURRENT_BINARY_DIR}
)
  1. 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();
}

使用流程

  1. 在 ui 文件随便添加几个 button 和 label
    在这里插入图片描述
  2. 在 mainwindow.cpp 中随便加几个tr(。。。) 包裹的文字
    auto testStr = tr("not good");qDebug() << "not good > " << testStr << QCoreApplication::applicationDirPath();
  1. 重新执行下 CMake 文件。 这时qtTrans_zh_CN.ts 会将 代码里面所有待翻译的 字符串导入到当前文件
    在这里插入图片描述
  2. qtTrans_zh_CN.ts 文件用 Qt Linguist 编辑
    在这里插入图片描述
  3. 翻译字符串填好好,标记为 完成
    在这里插入图片描述
  4. 再次编译 CMake 文件,这时候lrelease 会将 qtTrans_zh_CN.ts 转换成 qtTrans_zh_CN.qm,并存储在 当前代码的文件夹里面
  5. 编译运行程序。这时会将代码目录的 qtTrans_zh_CN.qm 拷贝到 exe 所在目录
  6. 运行程序,QTranslator 会 加载 exe 目录的 qtTrans_zh_CN.qm翻译。
  7. 实际显示文本为翻译后的文本在这里插入图片描述

最终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 trset(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_SOURCESmain.cppmainwindow.cppmainwindow.hmainwindow.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} PROPERTIESMACOSX_BUNDLE_GUI_IDENTIFIER my.example.comMACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}MACOSX_BUNDLE TRUEWIN32_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_BUILDCOMMAND  "${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


http://www.mrgr.cn/news/65300.html

相关文章:

  • npm入门教程18:npm发布npm包
  • 24/11/4 算法笔记 蛇形卷积
  • ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验
  • 使用 API 和离线库查询 IP 地址方法详解
  • Android——动态注册广播
  • 从 vue 源码看问题 — 如何理解 vue 响应式?
  • LeetCode每日一题633---平方数之和
  • runner,hook介绍
  • 在Java中如何创建一个类和对象?
  • Chromium127编译指南 Mac篇(一)- 环境准备详解
  • [实战-11] FlinkSql 设置时区对TIMESTAMP和TIMESTAMP_LTZ的影响
  • 每日一问:什么是SQL注入?注入方式和预防方法有哪些?
  • 100种算法【Python版】第35篇——PageRank算法
  • Java中的排序
  • 爱普生SG-8101CA可编程晶振应用在工业自动化机器人
  • 从0开始学习Linux——文本编辑器
  • java动态导入导出excel,javassist动态创建类
  • C/C++ stackful 有栈协同程式的一些缺点。
  • django电商易购系统-计算机设计毕业源码61059
  • JAVA通过AOP自定义注解记录日志
  • 100种算法【Python版】第38篇—— Tarjan算法
  • 智能推荐系统介绍
  • 【人工智能-初级】练习题:matplotlib基础练习30例
  • Python 中的迭代器与生成器详解
  • 关于halcon的可变形logo模板匹配find_local_deformable_modle_xld解释及简化匹配代码
  • JavaScript函数