Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将QT国际化集成到CMake?_C++_Qt_Internationalization_Qt4_Cmake - Fatal编程技术网

C++ 如何将QT国际化集成到CMake?

C++ 如何将QT国际化集成到CMake?,c++,qt,internationalization,qt4,cmake,C++,Qt,Internationalization,Qt4,Cmake,大家好, 我正在尝试将QT国际化与CMake结合使用。 我已按如下方式配置了我的cmake文件: #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} ${ri

大家好,

我正在尝试将QT国际化与CMake结合使用。 我已按如下方式配置了我的cmake文件:

#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工具)是否自动从源代码中提取“tr()”方法生成TS文件?(这意味着我不必创建任何TS文件,并且i18n/core_jp.TS以上的文件将自动生成)

2.什么是质量管理文件

提前感谢

根据

也从该网站的底部

Usage - Updating the .ts files
当你想让它处理你所有的 源文件(寻找新的文本) 转换),将cmake配置为启用 更新_翻译,然后制作 你的项目。CMake将修改您的 中源文件夹中的.ts文件 除了生成.qm文件之外。 警告:请注意,CMake将更新源.ts文件,这意味着如果>您进行清理,它将删除您的源.ts文件!!!因此,最好>尽快关闭更新翻译

在文档中,请参见
QT4\u创建\u翻译
QT4\u添加\u翻译

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

SET(Lang_files
  example.ts
)
...
QT4_CREATE_TRANSLATION(LangSrcs ${Lang_files})
...
ADD_EXECUTABLE(project_name ... others sources ... ${LangSrcs})

您可以使用qt/[qt|u version]/[msvc | mingw |……]/bin/中的lupdate.exe、linguist.exe和lrelease.exe吗

您可以这样使用它:

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 
所以,[源文件|路径]-是你的选择,就像我想的那样。
尝试使用源文件名列表调用它。

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

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

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}")

翻译二进制文件(*.qm)根据感谢,我遵循相同的程序,但没有生成任何内容!当我这样做的时候,我得到了:ScC/CMAKLISTHER的CGEDE错误。TXT: 44(AddiiSuxtuabl):找不到源文件:/home/PANZI/St/QJYPAD/QJYPYAD/Bug LaLaL/QJOYPADAD.DE.QM尝试扩展。C.C++。ccp.cp.cxx。mH.H.H+.HM.Hpp.hxx。in X.XXX只是好奇…您还在使用Qt3.5吗?:)