2010-04-22 10 views
8

मैं ऑटोोटूल से सेमेक तक एक प्रोजेक्ट माइग्रेट कर रहा हूं। मेरे पास गेटटेक्स्ट समर्थन के बारे में एक सवाल है।क्या .pot फ़ाइलों को अद्यतन करने के लिए कोई cmake फ़ंक्शन है?

एक मौजूदा FindGettext.cmake मॉड्यूल एक अच्छा समारोह में प्रावधान है कि नहीं है:

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

जहां एक बर्तन फ़ाइल और अनुवाद पो fil प्रदान करते हैं; समारोह पीओ फाइलों को जीएमओ फाइलों में बदलने का ख्याल रखता है, और यह सुनिश्चित करने के लिए उचित स्थापना लक्ष्य जोड़ता है कि फाइल रनटाइम पर पाई जा सकती है। सब अच्छा और अच्छा।

अब सवाल आता है: आप अपनी पॉट फाइलों को कैसे अपडेट करते हैं और जब आप नए संदेश जोड़ते हैं तो आप पीओ फाइलें कैसे करते हैं?

इसके लिए, ऑटोोटूल एक "अपडेट-पीओ" लक्ष्य उत्पन्न करेगा, (जिसे मैं समझता हूं), अनुवादित तार वाली सभी फाइलों की सूचियों के साथ एक POTFILES.in पढ़ता है, इसे अन्य जानकारी के साथ मिश्रित करता है, और समाप्त होता है पीओ उत्पन्न करने के लिए xgetext कॉलिंग। मुझे लगता है कि 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 निष्पादन योग्य खोजना है, फ़ाइलों को सूचीबद्ध करता है, और इसे हाथ से करता है? यह मेकफ़ाइल संस्करण काफी जटिल लगता है (हालांकि यह कई मामलों को संभालने लगता है); मैं नहीं cmake बराबर लिखने के लिए होने मन नहीं होता;)

धन्यवाद

पीएच

उत्तर

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} 
) 

सी कार्यक्रमों के लिए, मैं उपयोग कर रहा हूँ निम्नलिखित के रूप में _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 केडी विकी पृष्ठ के अनुसार, संपादन के लिए सेमेक का उपयोग करके पेशाब एक अच्छा विचार नहीं है। अनुवाद अद्यतन करने के लिए बेहतर स्टैंडअलोन स्क्रिप्ट का उपयोग करें।

वास्तव में, निष्कर्षण और संदेशों के विलय के बाहर के स्रोत बनाता है की CMake अवधारणा पर अच्छी तरह से नक्शा नहीं है, और CMake इस चरण के लिए बहुत ज्यादा मदद नहीं प्रदान कर सकते हैं, या तो।

इसलिए, इस ट्यूटोरियल में, हम पहले चरण को स्टैंडअलोन शैल स्क्रिप्ट के साथ संभाल लेंगे, और केवल दूसरा चरण सीएमके द्वारा संभाला जाएगा।

+0

जबकि आपका उत्तर सहायक हो सकता है, तो आप 7-वर्षीय प्रश्न का उत्तर दे रहे हैं। कृपया पोस्ट करने से पहले उन संदेशों की पोस्टिंग तिथियां देखें जिन्हें आप जवाब देना चाहते हैं। –

+3

लेकिन 7 साल की उम्र में समस्या क्या है? लोग इस प्रश्न पर जा रहे हैं (मुझे सहित) इस पृष्ठ पर जाएं। और यहां ऐसी कोई जानकारी नहीं थी। इस प्रश्न की खोज करने के बाद, मैंने भविष्य में खोजकर्ताओं के लिए यहां अपने परिणाम प्रदान किए। – Ashark

संबंधित मुद्दे