首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将QT国际化集成到CMake中?

如何将QT国际化集成到CMake中?
EN

Stack Overflow用户
提问于 2011-04-12 11:42:13
回答 3查看 6.2K关注 0票数 19

大家好,

我正在尝试在CMake中使用QT国际化。我已经将我的cmake文件配置如下:

代码语言:javascript
复制
#Internalization - this should generate core_jp.ts ?
SET(rinzo_core_TRANSLATIONS
   i18n/core_jp.ts
   )

#these are my source files in the project
SET(FILES_TO_TRANSLATE
   ${rinzo_core_srcs} 
   ${rinzo_core_moh_srcs}
 )

QT4_CREATE_TRANSLATION(QM_FILES ${FILES_TO_TRANSLATE} ${rinzo_core_TRANSLATIONS})
QT4_ADD_TRANSLATION(QM ${rinzo_core_TRANSLATIONS})

但它不会生成任何TS或QM文件。

我的问题是-

1.Cmake(通过使用QT工具)会自动生成TS文件,从源代码提取"tr()“方法吗?(这意味着我不需要创建任何TS文件,i18n/core_jp.ts会自动生成)

2. QM文件到底是什么?

提前感谢

EN

回答 3

Stack Overflow用户

发布于 2011-04-15 16:44:00

CMake文档中,请参阅QT4_CREATE_TRANSLATIONQT4_ADD_TRANSLATION宏。

因此,您应该执行以下操作:

代码语言:javascript
复制
SET(Lang_files
  example.ts
)
...
QT4_CREATE_TRANSLATION(LangSrcs ${Lang_files})
...
ADD_EXECUTABLE(project_name ... others sources ... ${LangSrcs})
票数 7
EN

Stack Overflow用户

发布于 2020-03-25 20:33:02

我的解决方案依赖于通过add_custom_target手动调用的lupdate和lrelease工具,因此生成的文件不会在make clean中删除并放入源目录中。

我定义了一个函数,它扫描提供的目录,生成/更新ts文件,并将它们编译成同一目录下的qm文件,这样它们就可以通过.qrc文件添加到应用程序中

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.5)

project(l10n LANGUAGES CXX)
find_package(Qt5 COMPONENTS Core LinguistTools REQUIRED)

# genearats ts and qm file searching recursively SRC_DIR
function(generate_translations CUSTOM_TARGET TS_DIR TS_FILES SRC_DIR)
    set(UPADTE_TS_TARGET_NAME ${CUSTOM_TARGET}_ts)
    set(UPADTE_QM_TARGET_NAME ${CUSTOM_TARGET}_qm)

    add_custom_target(${UPADTE_TS_TARGET_NAME}
        COMMAND ${Qt5_LUPDATE_EXECUTABLE} -recursive ${SRC_DIR} -ts ${TS_FILES}
        WORKING_DIRECTORY ${TS_DIR})

    add_custom_target(${UPADTE_QM_TARGET_NAME}
        COMMAND ${Qt5_LRELEASE_EXECUTABLE} ${TS_FILES}
        WORKING_DIRECTORY ${TS_DIR})

    add_dependencies(${UPADTE_QM_TARGET_NAME} ${UPADTE_TS_TARGET_NAME} )
    add_dependencies(${CUSTOM_TARGET} ${UPADTE_QM_TARGET_NAME})
endfunction()

add_executable(l10n main.cxx)

target_link_libraries(l10n Qt5::Core)

set(MY_TS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/translate)
set(MY_TS_FILES foo_en.ts foo_en.ts)
set(MY_SOURCE_LOOKUP_DIR ${CMAKE_CURRENT_SOURCE_DIR})

generate_translations(l10n "${MY_TS_DIR}" "${MY_TS_FILES}" "${MY_SOURCE_LOOKUP_DIR}")
票数 2
EN

Stack Overflow用户

发布于 2019-01-25 15:25:00

你能从qt/qt_ linguist.exe /msvc|mingw|.../ lrelease.exe /使用lupdate.exe、linguist.exe和lrelease.exe吗?

你可以这样使用它:

代码语言:javascript
复制
Usage:
    lupdate [options] [project-file]
    lupdate [options] [source-file|path]... -ts ts-files
Options:
    -help  Display this information and exit.
    -noobsolete
           Drop all obsolete strings.
    -extensions [,]...
           Process files with the given extensions only.
           The extension list must be separated with commas, not with whitespace.
           Default: 'ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx'.
    -pluralonly
           Only include plural form messages.
    -silent
           Do not explain what is being done.
    -version
           Display the version of lupdate and exit 

所以,source-file|path -是你的选择,就像我想的那样。尝试使用源文件名列表调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5630155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档