2012-05-09 72 views
3

我正在編寫一個GNOME應用程序並使用CMake。現在我正在考慮讓應用可翻譯,爲此GNU提供intltool,gettext,0 msgfmt等。自動工具支持這些工具和開箱即用的全部i18n流程。與cmake一起使用intltool

我該如何得到CMake的支持?是否有任何模塊或代碼片段?

回答

2

如今,最好的方式通過CMake使用intltoolgettext一起是,首先,檢測是否所述模塊是存在於系統中並設置幾個變量是這樣的:

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

然後,您可以建立po文件這樣的:

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似乎有gettext的支持和使用CMake的:

相關問題