cmake之Qt国际化
2022/4/21 23:13:07
本文主要是介绍cmake之Qt国际化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述
- 实验通过版本, Qt5, cmake-3.23
- 参考
- cmake中不会涉及到linguist的操作
- 当生成ts文件后, 手动使用linguist工具翻译好即可
核心代码
- 已经做好宏。 直接copy就能用
macro(_create_qm_file_ target_name qt_bin_dir TS_FILES bin_qrc_dir update_src_dir) set(update_all_ts_files ${target_name}_update_all_ts_files) set(create_all_qm_files ${target_name}_create_all_qm_files) add_custom_target(${update_all_ts_files} ALL) add_custom_target(${create_all_qm_files} ALL) IF (CMAKE_SYSTEM_NAME MATCHES "Linux") find_file(LUPDATE_PATH lupdate ${qt_bin_dir}) find_file(LRELEASE_PATH lrelease ${qt_bin_dir}) ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows") find_file(LUPDATE_PATH lupdate.exe ${qt_bin_dir}) find_file(LRELEASE_PATH lrelease.exe ${qt_bin_dir}) endif() foreach(TS_FILE ${TS_FILES}) # 把zh_CN.ts中的zh_CN提取出来 get_filename_component(LOCAL_LANGUAGE_NAME ${TS_FILE} NAME_WE) set(TS_TARGET_NAME "${target_name}_update_ts_file_${LOCAL_LANGUAGE_NAME}") add_custom_target(${TS_TARGET_NAME} COMMAND ${LUPDATE_PATH} ${update_src_dir} -ts ${TS_FILE} VERBATIM) # 将update_ts_file_<NAME>添加为update_all_ts_files的依赖,下同 add_dependencies(${update_all_ts_files} ${TS_TARGET_NAME}) set(QM_TARGET_NAME "${target_name}_create_qm_file_${LOCAL_LANGUAGE_NAME}") set(QM_FILE "${bin_qrc_dir}/${LOCAL_LANGUAGE_NAME}.qm") add_custom_target(${QM_TARGET_NAME} COMMAND ${LRELEASE_PATH} ${TS_FILE} -qm ${QM_FILE} VERBATIM) # 因为得先有ts文件才能生成qm文件,所以把构建ts文件的目标作为自己的依赖 add_dependencies(${QM_TARGET_NAME} ${TS_TARGET_NAME}) add_dependencies(${create_all_qm_files} ${QM_TARGET_NAME}) MESSAGE("aaa=${create_all_qm_files}") IF (NOT EXISTS ${QM_FILE}) message("a=${TS_FILE}") # message("b=${}") endif() endforeach() endmacro( )
宏解释
- target_name - 哪个项目
- qt_bin_dir - qt的安装目录,用于寻找 lupdate 和 lrease, 以windows为例,我这里传递qt_bin_dir, 指向本机Qt的安装路径
set(CMAKE_PREFIX_PATH "C:/major/development/tools/qt/5.14/install/5.14.2/msvc2015_64") set(qt_bin_dir ${CMAKE_PREFIX_PATH}/bin )
- TS_FILES - 项目的TS文件列表
- bin_qrc_dir - 编译目录下的qrc文件的路径, 参考中将qrc拷贝到了 build 目录下
- update_src_dir - 指向当需要更新ts文件的目录
使用范例
_create_qm_file_(${PROJECT_NAME} ${qt_bin_dir} ${TS_FILES} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src )
- 根据生成的项目, 就能增量更新ts文件了,下面以VS项目为例,执行后的项目如下
一个完整的cmakelists.txt
cmake_minimum_required(VERSION 3.18) project(cmake_demo01 LANGUAGES CXX) set(CMAKE_PREFIX_PATH "C:/major/development/tools/qt/5.14/install/5.14.2/msvc2015_64") set(qt_bin_dir ${CMAKE_PREFIX_PATH}/bin ) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(QT_VERSION 5) set(REQUIRED_LIBS Core Gui Widgets) set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Widgets) find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED) # ========================================================= # 语言家文件 # ========================================================= set(TS_FILES ${CMAKE_SOURCE_DIR}/lang/zh_CN.ts) macro(_create_qm_file_ target_name qt_bin_dir TS_FILES bin_qrc_dir update_src_dir) set(update_all_ts_files ${target_name}_update_all_ts_files) set(create_all_qm_files ${target_name}_create_all_qm_files) add_custom_target(${update_all_ts_files} ALL) add_custom_target(${create_all_qm_files} ALL) IF (CMAKE_SYSTEM_NAME MATCHES "Linux") find_file(LUPDATE_PATH lupdate ${qt_bin_dir}) find_file(LRELEASE_PATH lrelease ${qt_bin_dir}) ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows") find_file(LUPDATE_PATH lupdate.exe ${qt_bin_dir}) find_file(LRELEASE_PATH lrelease.exe ${qt_bin_dir}) endif() foreach(TS_FILE ${TS_FILES}) # 把zh_CN.ts中的zh_CN提取出来 get_filename_component(LOCAL_LANGUAGE_NAME ${TS_FILE} NAME_WE) set(TS_TARGET_NAME "${target_name}_update_ts_file_${LOCAL_LANGUAGE_NAME}") add_custom_target(${TS_TARGET_NAME} COMMAND ${LUPDATE_PATH} ${update_src_dir} -ts ${TS_FILE} VERBATIM) # 将update_ts_file_<NAME>添加为update_all_ts_files的依赖,下同 add_dependencies(${update_all_ts_files} ${TS_TARGET_NAME}) set(QM_TARGET_NAME "${target_name}_create_qm_file_${LOCAL_LANGUAGE_NAME}") set(QM_FILE "${bin_qrc_dir}/${LOCAL_LANGUAGE_NAME}.qm") add_custom_target(${QM_TARGET_NAME} COMMAND ${LRELEASE_PATH} ${TS_FILE} -qm ${QM_FILE} VERBATIM) # 因为得先有ts文件才能生成qm文件,所以把构建ts文件的目标作为自己的依赖 add_dependencies(${QM_TARGET_NAME} ${TS_TARGET_NAME}) add_dependencies(${create_all_qm_files} ${QM_TARGET_NAME}) endforeach() endmacro( ) # ========================================================= set(bin_trans_qrc trans.qrc) configure_file(${bin_trans_qrc} ${CMAKE_CURRENT_BINARY_DIR}) file(GLOB_RECURSE src_file ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) file(GLOB_RECURSE inc_file ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h) add_executable(${PROJECT_NAME} ${src_file} ${inc_file} ${CMAKE_CURRENT_BINARY_DIR}/trans.qrc) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) target_link_libraries(cmake_demo01 PRIVATE Qt5::Widgets Qt5::Core Qt5::Gui) _create_qm_file_(${PROJECT_NAME} ${qt_bin_dir} ${TS_FILES} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src )
这篇关于cmake之Qt国际化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升