问候所有人,
我正在尝试使用CMake进行QT国际化。 我已按如下方式配置了我的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工具)生成TS文件,从源头自动提取“tr()”方法吗? (这意味着我不必创建任何TS文件,上面的i18n / core_jp.ts将自动生成)
2. QM文件有什么特别之处?
提前致谢
答案 0 :(得分:7)
在CMake文档中,请参阅QT4_CREATE_TRANSLATION
和QT4_ADD_TRANSLATION
宏。
所以你应该做以下事情:
SET(Lang_files
example.ts
)
...
QT4_CREATE_TRANSLATION(LangSrcs ${Lang_files})
...
ADD_EXECUTABLE(project_name ... others sources ... ${LangSrcs})
答案 1 :(得分:4)
根据http://itk.org/Wiki/CMake:How_To_Build_Qt4_Software
翻译二进制文件(* .qm)同样来自该网站的底部
Usage - Updating the .ts files
当你想要它处理所有你的 源文件(寻找新的文本) 翻译),配置cmake打开 UPDATE_TRANSLATIONS,然后make 你的项目。 CMake将修改你的 您的SOURCE文件夹中的.ts文件 除了生成.qm文件。 警告:请注意,CMake将更新源.ts文件,这意味着如果>你做一个make clean,它会删除你的源.ts文件!所以这是一个好主意>尽快关闭UPDATE_TRANSLATIONS。
答案 2 :(得分:2)
我的解决方案依赖于通过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}")
答案 3 :(得分:0)
您可以使用qt / [qt_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
所以[source-file | path]-是您的选择,就像我想的那样。 尝试使用源文件名称列表来调用它。