一、参考链接
Qt中,软件多语言国际化翻译的方法与步骤 - 知乎 (zhihu.com)
QT 避坑指南:如何优雅的使用 QtCreator 格式化代码 - 墨天轮 (modb.pro)
二、Qt 国际化支持
1. Qt 项目(CMake)设置国际化支持_qt cmake 国际化-CSDN博客
#生成ts文件的文件夹
set(TS_DIR "${CMAKE_SOURCE_DIR}")
set(TS_FILES
"${TS_DIR}/qt3_en_US.ts"
#"${TS_DIR}/aidiapp.ts"
#"${TS_DIR}/aidi_zh_CN.ts"
#"${TS_DIR}/aidi_zh_TW.ts"
#"${TS_DIR}/aidi_en_US.ts"
)
#模拟更新和发布的命令代码
find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)
#生成ts和qm文件
foreach(_ts_file ${TS_FILES})
execute_process(
COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_SOURCE_DIR} -ts ${_ts_file})
execute_process(
COMMAND ${LRELEASE_EXECUTABLE} ${_ts_file})
endforeach()
2. 在源代码和UI上,添加“中文字符串”;
3. 主界面菜单 -> 构建 -> 执行CMake
4. 修改 qt3_en_US.ts 文件,完成翻译
5. 在 Qt Creator 中的 Terminal 控制台中,执行:lrelease qt3_en_US.ts,生成或更新 'qt3_en_US.qm';
6. 在 Qt Creator 中,添加 qrc 资源文件,在资源文件中,添加前缀 “/i18n”,在前缀中,添加文件 “qt3_en_US.qm”;
7. 编译并运行程序即可;
代码:translator.load(":/i18n/" + baseName)
可能需要安装 VulkanSDK
注意:
也可以直接使用(不创建资源文件):
translator.load("qt3_en_US.qm")
但需要保证正确生成 qt3_en_US.qm
三、Qt 国际化后,按钮自动适配字符串长度
在 Qt 设计师中,设置 QPushButton 的 SizePolicy 水平策略属性为 Preferred 即可;
四、如何正确获取 “lupdate 需要的字符串”
- tr(""):适用于 类内部;
- QCoreApplication::translate:适用于 类外部
例如:
#define STR_Arch tr("进程架构") (这样 tr 调用出错)
也可以表示为:
#define STR_Arch QCoreApplication::translate("YourContext", "进程架构")
"YourContext" 应该被替换成一个合适的上下文名,这通常是与翻译字符串相关的类名。如果您不在类中,您可以使用任何适当的字符串来区分不同的翻译上下文。
五、CMakeLists.txt 末尾添加以下代码自动调用 lupdate
set(TS_FILES
"./qt3_en_US.ts"
# 其他 .ts 文件...
)
file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.ui")
find_program(LUPDATE_EXECUTABLE lupdate)
if(NOT LUPDATE_EXECUTABLE)
message(SEND_ERROR "lupdate tool not found")
endif()
foreach(_ts_file ${TS_FILES})
execute_process(
COMMAND ${LUPDATE_EXECUTABLE} ${SOURCES} -ts ${_ts_file}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endforeach()