2012-05-09 5 views
3

J'écris une application GNOME et j'utilise CMake. Maintenant, je pense à rendre l'application traduisible, pour lequel GNU fournit intltool, gettext, msgfmt, etc. autotools prend en charge ces outils et l'ensemble du processus i18n hors de la boîte.Utiliser intltool avec cmake

Comment puis-je faire fonctionner ceci avec CMake? Y a-t-il des modules ou des extraits de code autour?

Répondre

2

De nos jours, la meilleure façon d'utiliser intltool et gettext avec CMake est, d'une part, de détecter si les modules sont présents dans le système et définir quelques variables comme celui-ci:

# Setting up Intl 
find_package (Intl REQUIRED) 
find_package(Gettext REQUIRED) 
include_directories(${INTL_INCLUDE_DIRS}) 
link_directories(${INTL_LIBRARY_DIRS}) 

Ensuite, vous pouvez construire les fichiers po comme celui-ci ::

FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) 

IF(NOT GETTEXT_MSGFMT_EXECUTABLE) 
    MESSAGE("------ 
    NOTE: msgfmt not found. Translations will *not* be installed 
------") 
ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) 

    SET(catalogname rkward) 

    FILE(GLOB PO_FILES *.po) 
    SET(GMO_FILES) 

    FOREACH(_poFile ${PO_FILES}) 
    GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) 
    STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName}) 
    STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode}) 

    IF(_langCode) 
     GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) 
     SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) 

     ADD_CUSTOM_COMMAND(OUTPUT ${_gmoFile} 
     COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} 
     DEPENDS ${_poFile}) 
     INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) 
     LIST(APPEND GMO_FILES ${_gmoFile}) 
    ENDIF(_langCode) 

    ENDFOREACH(_poFile ${PO_FILES}) 

    ADD_CUSTOM_TARGET(translations ALL DEPENDS ${GMO_FILES}) 

ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) 
1

Remmina semble avoir support gettext et utilise CMake: