2009-12-08 12 views
8

मैं एक ही कमांड के साथ PHP फ़ाइलों के साथ xgettext का उपयोग कर .po फ़ाइल को संकलित कैसे कर सकता हूं?रिक्यूसिव xgettext?

मेरी PHP फाइलें पदानुक्रम में मौजूद हैं, और सीधे xgettext कमांड को कम करने के लिए प्रतीत नहीं होता है।

उत्तर

17

मिल गया:

find . -iname "*.php" | xargs xgettext 

मैं -exec से पहले उपयोग करने के लिए कोशिश कर रहा था, लेकिन वह केवल एक समय में एक फ़ाइल को चलाने होगा। यह उन्हें गुच्छा पर चलाता है।

ये Google!

+0

अच्छी तरह से यह मेरे लिए काम नहीं कर रहा है, लेकिन आपने मुझे संभावना के लिए एक रास्ता दिखाया है अन्यथा स्वीकार किया जाएगा और इसके साथ रहेंगे जैसे कि –

+0

हाय, अच्छा काम है, लेकिन अंत में जोड़ने के लिए becarefull आदेश, जब तक यह – Ata

+2

काम नहीं करेगा यह गलत है, क्योंकि यदि एक कमांडलाइन पर फिट करने के लिए बहुत सारी फ़ाइलें हैं, तो xargs कई बार xgettext चलाएगा, जिससे पहले के आक्रमणों को गिरफ्तार किया जा सकता है। बस जोड़ना -j सही नहीं है, या तो, क्योंकि आपको पहले फ़ाइल को हटाने की आवश्यकता है या आप पुराने डेटा से जुड़ जाएंगे। –

0

यहां विंडोज के लिए एक समाधान है। सबसे पहले, गेटटेक्स्ट इंस्टॉल करें और GnuWin32 टूल्स संग्रह से खोजें।

आप निम्न आदेश बाद में चला सकते हैं:

find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ; 

आउटपुट फ़ाइल से पहले अस्तित्व में है आदेश चला रहा है, इसलिए नई परिभाषाओं को इसके साथ विलय किया जा सकता है।

+0

शायद सिगविन स्थापित और उपयोग कर रहे हैं? मुझे पता है कि यह मूल समाधान नहीं है, लेकिन आपको एक ही परिणाम मिलना चाहिए। – neezer

6

WINDOWS कमांड लाइन के लिए एक simpe समाधान है:

xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"` 

फ़ाइलें जिसका में विधि gettext के सभी उपयोगों के लिए प्रविष्टियों उत्पन्न करता है:

@echo off 
echo Generating file list.. 
dir html\wp-content\themes\wpt\*.php /L /B /S > %TEMP%\listfile.txt 
echo Generating .POT file... 
xgettext -k_e -k__ --from-code utf-8 -o html\wp-content\themes\wpt\lang\wpt.pot -L PHP --no-wrap -D html\wp-content\themes\wpt -f %TEMP%\listfile.txt 
echo Done. 
del %TEMP%\listfile.txt 
+0

कुछ चेतावनी सिर्फ मामले में: 'pygettext.py' विकल्प '-f' का समर्थन नहीं करता है। – Morwenn

0

यह समाधान मैं मैक पर पुनरावर्ती खोज के लिए मिला है विस्तार phf है, सबफ़ोल्डर सहित और उन्हें अनुवाद/संदेशों.pot में सम्मिलित करता है।

+2

थोड़ा वर्णनात्मक पाठ छोड़ दें –

0

आप इसे एक ही कमांड से प्राप्त नहीं कर सकते हैं। Xgettext विकल्प --files-from आपका मित्र है।

find . -name '*.php' >POTFILES 
xgettext --files-from=POTFILES 

आप सकारात्मक है कि आप भी कई स्रोत फ़ाइलों आप भी find उपयोग कर सकते हैं xargs साथ की जरूरत नहीं है कर रहे हैं:

find . -name "*.php" -print0 | xargs -0 xgettext 

हालांकि, अगर आप भी कई स्रोत फ़ाइलें है, xargsxgettext कई लागू करेगा कई बार ताकि आपके प्लेटफ़ॉर्म की अधिकतम कमांड-लाइन लंबाई पार न हो।

rm -f messages.po 
echo >messages.po 
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing 

साथ कि तुलना करें: आदेश अपने आप को उस मामले के खिलाफ की रक्षा करने के लिए आपको, xgettext विकल्प -j, --join-existing उपयोग करने के लिए बासी संदेशों पहले फाइल निकालने के लिए, और एक खाली एक के साथ प्रारंभ करें ताकि xgettext जमानत नहीं करता है POTFILES में स्रोत फ़ाइलों की सूची के साथ पहले दिया गया सरल समाधान!

find का उपयोग --exec के साथ बहुत अक्षम है क्योंकि यह xgettext -j को प्रत्येक स्रोत फ़ाइल के लिए अनुवाद करने योग्य तारों की खोज के लिए एक बार बुलाएगा।xgettext -j के विशेष मामले में यह और भी अक्षम है क्योंकि xgettext को प्रत्येक आमंत्रण (जो प्रत्येक इनपुट स्रोत फ़ाइल के साथ है) के साथ मौजूदा मौजूदा आउटपुट फ़ाइल messages.po को पढ़ना है।