我有一个由我自己构建的项目,由不同的可执行文件和不同的库构建。
这个想法就像:
/Src/
ExecA/CMakeLists.txt
ExecB/CMakeLists.txt
LibC/CMakeLists.txt
LibD/CMakeLists.txt
ExecA使用LibC和LibD, ExecB仅使用LibC 或者......让我说...并非所有可执行文件都使用所有库。
我已经在每个CMakeLists.txt中写了这句话,允许我生成ts和qm文件:
SET(LANGUAGES ${SUPPORTED_LANGUAGES)
SET(LANGUAGE_TS_FILES)
FOREACH(LANGUAGE ${LANGUAGES})
SET(TS_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${LIBRARY_NAME}_${LANGUAGE}.ts")
SET(LANGUAGE_TS_FILES ${LANGUAGE_TS_FILES} ${TS_FILE})
SET_SOURCE_FILES_PROPERTIES(${TS_FILE} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}")
ENDFOREACH(LANGUAGE ${LANGUAGES})
IF(LANGUAGE_TS_FILES)
QT4_CREATE_TRANSLATION(qm_files ${FILES} ${QMLFILES} ${LANGUAGE_TS_FILES})
ENDIF(LANGUAGE_TS_FILES)
然后将qm文件加载到随附的qrc文件中。 库:
set(RESOURCES
${CMAKE_CURRENT_BINARY_DIR}/translations_${LIBRARY_NAME}.qrc
)
可执行:
set(RESOURCES
${CMAKE_CURRENT_BINARY_DIR}/translations_${EXECUTABLE_NAME}.qrc
)
创建库时,我有一个像
这样的句子add_library(${LIBRARY_NAME} ${FILES} ${HEADERS} ${HEADERS_MOC} {RESOURCES} ${qm_files})
和可执行文件:
add_executable(${EXECUTABLE_NAME} ${FILES} ${HEADERS} ${HEADERS_MOC} ${RESOURCES} ${qm_files} LibA LibB)
使用此代码我能够生成ts文件,我编辑它们然后我可以生成qm文件,以便在应用程序启动时加载。 我面临的问题是只有应用程序中存在的代码是本地化的。该库的代码未本地化。
我读到我必须直接加载库的翻译,但是,无论我在哪里尝试从qrc加载qm文件:
myappTranslator.load(langstr);
我收到了一个假的回复库的所有qm文件。 它适用于可执行文件。
有关调查如何对库进行本地化的任何提示?