6 votes

Créer des fichiers de traduction Qt avec CMake

Je rencontre un problème lorsque j'essaie d'ajouter le processus de génération des traductions à l'intérieur du processus CMake.

Maintenant j'ai le CMakeLists.txt suivant:

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/defines.h.cmake
               ${CMAKE_CURRENT_BINARY_DIR}/defines.h)

file(GLOB_RECURSE UI_FILES *.ui)
file(GLOB_RECURSE CODE_FILES *.cpp)

qt5_wrap_ui(UI_HEADERS ${UI_FILES})

# Qt5LinguistTools
find_package(Qt5LinguistTools)
FILE(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../resources/langs/*.ts")
QT5_create_translation(QM_FILES ${CODE_FILES} ${TS_FILES})

# Resources
qt5_add_resources(RESOURCE_FILES ../resources/resources.qrc)

# Windows application icon
if (WIN32)
  set(WINDOWS_RES_FILE ${CMAKE_CURRENT_BINARY_DIR}/resources.obj)
  if (MSVC)
    add_custom_command(OUTPUT ${WINDOWS_RES_FILE}
      COMMAND rc.exe /fo ${WINDOWS_RES_FILE} resources.rc
      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/win
    )
  else()
    add_custom_command(OUTPUT ${WINDOWS_RES_FILE}
      COMMAND windres.exe resources.rc ${WINDOWS_RES_FILE}
      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/win
    )
  endif()
endif()

#Déplacer les fichiers Qm dans le dossier des langues des ressources
install(FILES ${QM_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/../resources/langs)

add_executable(${CMAKE_PROJECT_NAME} WIN32
  ${QM_FILES}
  ${UI_HEADERS}
  ${CODE_FILES}
  ${RESOURCE_FILES}
  ${WINDOWS_RES_FILE}
)
target_link_libraries(${CMAKE_PROJECT_NAME}
  Qt5::Widgets
  QtAwesome
)

if (UNIX)
  install(TARGETS ${CMAKE_PROJECT_NAME}
          RUNTIME DESTINATION bin)
elseif (WIN32)
  install(TARGETS ${CMAKE_PROJECT_NAME}
          DESTINATION .)
endif()

Il semble que ce code génère correctement les fichiers .qm, mais pas avant d'être lu par le fichier de ressources. Ainsi, je reçois une erreur: NMAKE : fatal error U1073: don't know how to make '..\..\..\resources\langs\lang_en_US.qm'

Peut-être que je ne le fais pas de la bonne manière ou que je dois lire les fichiers de langue depuis un autre endroit qui n'est pas à l'intérieur du fichier de ressources.

Pouvez-vous me donner un conseil sur la manière de générer les fichiers QM et de les ajouter au processus de build.

7voto

wasthishelpful Points 10726

De la documentation:

La mise à jour des traductions peut être effectuée en ajoutant les fichiers qm à la liste source de votre bibliothèque/exécutable, de sorte qu'ils soient toujours mis à jour, ou en ajoutant une cible personnalisée pour contrôler quand ils sont mis à jour/générés.

Vous pouvez créer des cibles personnalisées et ajouter des dépendances :

add_custom_target(translations ALL DEPENDS ${QM_FILES})

add_custom_target(resources ALL DEPENDS ${RESOURCE_FILES})

add_dependencies(resources translations)

add_executable(${CMAKE_PROJECT_NAME} WIN32
  ${UI_HEADERS}
  ${CODE_FILES}
  ${RESOURCE_FILES}
  ${WINDOWS_RES_FILE}
)
add_dependencies(${CMAKE_PROJECT_NAME} resources)

3voto

Patrizio Bekerle Points 148

C'est ce que je fais pour QOwnNotes : https://github.com/pbek/QOwnNotes/blob/develop/src/CMakeLists.txt

# Fichiers de traduction
SET(QON_TS_FILES
languages/QOwnNotes_en.ts
        languages/QOwnNotes_de.ts
        languages/QOwnNotes_fr.ts
        languages/QOwnNotes_pl.ts
        languages/QOwnNotes_zh.ts
        languages/QOwnNotes_ru.ts
        languages/QOwnNotes_pt.ts
        languages/QOwnNotes_es.ts
        languages/QOwnNotes_nl.ts
        languages/QOwnNotes_hu.ts
        languages/QOwnNotes_ja.ts
        languages/QOwnNotes_it.ts
        languages/QOwnNotes_ar.ts
)

qt5_add_translation(QON_QM_FILES ${QON_TS_FILES})
add_custom_target(translations DEPENDS ${QON_QM_FILES})

if(NOT QT_TRANSLATIONS_DIR)
# Si ce répertoire est manquant, nous sommes dans un environnement Qt5.
# Extrayez l'emplacement de l'exécutable qmake
get_target_property(QT5_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
# Demandons à Qt5 où mettre les traductions
execute_process( COMMAND ${QT5_QMAKE_EXECUTABLE} -query QT_INSTALL_TRANSLATIONS
OUTPUT_VARIABLE qt_translations_dir OUTPUT_STRIP_TRAILING_WHITESPACE )
# Assurons-nous d'avoir / et non \ comme qmake donne sur windows
file( TO_CMAKE_PATH "${qt_translations_dir}" qt_translations_dir)
set( QT_TRANSLATIONS_DIR ${qt_translations_dir} CACHE PATH
"L'emplacement des traductions de Qt" FORCE)
endif()

install(FILES ${QON_QM_FILES}
DESTINATION ${QT_TRANSLATIONS_DIR})

add_executable(QOwnNotes ${SOURCE_FILES} ${RESOURCE_ADDED} ${QON_QM_FILES})

Cela vous aide-t-il ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X