2010-04-22 22 views
8

我正在將項目從autotools遷移到cmake。我有一個關於gettext支持的問題。是否有一個cmake函數來更新.pot文件?

有一個現有的FindGettext.cmake模塊提供了一個很好的功能:

GETTEXT_CREATE_TRANSLATIONS(foo.pot ALL fr.po de.po) 

在那裏你提供一個鍋文件並翻譯PO FIL;該功能負責將po文件轉換爲gmo文件,並添加適當的安裝目標以確保可以在運行時找到文件。一切都很好,很好。

現在出現了這樣一個問題:當你添加新消息時,你如何更新你的鍋文件和你的po文件?

爲此,autotools會生成一個「update-po」目標,(據我所知),讀取一個POTFILES.in,其中包含所有包含翻譯後字符串的文件列表,並將其與其他信息混合並結束調用xgetext生成po。我認爲coresponding Makefile的任務是包含類似的一個:

case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ 
    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ 
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ 
    --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ 
    --files-from=$(srcdir)/POTFILES.in \ 
    --copyright-holder='$(COPYRIGHT_HOLDER)' \ 
    --msgid-bugs-address="$$msgid_bugs_address" \ 
;; \ 
*) \ 
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ 
    --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ 
    --files-from=$(srcdir)/POTFILES.in \ 
    --copyright-holder='$(COPYRIGHT_HOLDER)' \ 
    --package-name="$${package_gnu}ube" \ 
    --package-version='0.4.0-dev' \ 
    --msgid-bugs-address="$$msgid_bugs_address" \ 
;; \ 
esac 

所以,在我重新發明輪子,有一個現有的cmake的功能,做同樣的事情? 或者我必須找到xgettext可執行文件,列出這些文件並手動執行此操作? makefile版本看起來很複雜(儘管它似乎處理很多情況);我不會介意不必編寫CMake的同等學歷;)

感謝

PH

回答

6

不要讓autotool膨脹嚇唬你。 :-)

您可以使用下面的代碼:

SET(_potFile ${PROJECT_NAME}.pot) 
ADD_CUSTOM_COMMAND(OUTPUT ${_potFile} 
    COMMAND ${XGETTEXT_CMD} ${_xgettext_option_list} -o ${_potFile} ${_src_list} 
    DEPENDS ${_src_list} 
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 
    COMMENT "Extract translatable messages to ${_potFile}" 
) 

ADD_CUSTOM_TARGET(pot_file ${_all} 
DEPENDS ${_potFile} 
) 

對於C程序中,我使用以下爲_xgettext_option_list

--language=C --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 -s 
--package-name=${PROJECT_NAME} --package-version=${PRJ_VER} 

我沒有徹底改造了車輪時FindGettext沒有了選項ALL(當它是cmake-2.4時):-)

2

根據this kde wiki頁面,使用cmake進行編輯urces不是一個好主意。更好地使用獨立腳本來更新翻譯。

事實上,信息的提取和合並沒有很好地映射到的亂源構建CMake的概念,這一步CMake的不能 提供太多的幫助,無論是。

因此,在本教程中,我們將使用一個 獨立shell腳本處理第一步,只有第二步將由 CMake處理。

+0

雖然你的答案可能有幫助,但你正在回答一個7歲的問題。請在發佈之前查看您想要回復的消息的發佈日期。 – 2017-05-03 18:46:05

+3

但問題是7歲的問題是什麼?人們正在搜索這個問題(包括我)ang轉到此頁面。在這裏沒有這樣的信息。在我探索完這個問題後,我在這裏爲未來的搜索者提供了結果。 – Ashark 2017-05-03 19:11:52

相關問題