2009-10-19 10 views
9

मेरे पास एकाधिक डोमेन के साथ प्रोग्राम है, कुछ स्रोत फ़ाइलों में विभिन्न टेक्स्ट डोमेन के साथ dgettext() कॉल शामिल हैं।गेटटेक्स्ट: dgettext() स्ट्रिंग्स को डोमेन.po फ़ाइलों को निकालें

gettext-strings को एकाधिक .po फ़ाइलों में निकालने के लिए कैसे करें? उदाहरण के लिए, dgettext('one', 'Hello') पर कॉल करें एक.po, और dgettext('two', 'Bye') पर दो.po पर जाना चाहिए। xgettext बस टेक्स्ट डोमेन को अनदेखा करता है और सबकुछ एक फ़ाइल में रखता है।

+0

मुझे प्रत्येक डोमेन को अलग से कैसे पार्स करने के लिए एक [सुझाव] (http://stackoverflow.com/a/5354360/645186) मिला। हालांकि, यह एक कामकाज है। – Shef

उत्तर

0

यदि आप लिनक्स का उपयोग कर रहे हैं, तो * .po में हेरफेर करने के लिए gtranslator प्रोग्राम का उपयोग करें और अपनी * .po फ़ाइलों का परीक्षण करें।

2

सबसे पहले आपको डोमेन को अलग करने का एक तरीका चाहिए।

उदाहरण के लिए, मान लीजिए कि आप एप्लिकेशन के लिए lib के लिए एक डोमेन और एक है, तो dgettext() कॉल के लिए एक शॉर्टकट बना सकते हैं;

_app(msg) -> dgettext("app", msg); 

और lib डोमेन के लिए एक:

_lib(msg) -> dgettext("lib", msg); 

इस तरह, सभी अपने कोड पर इन कॉल जोड़ें;

show_message(_app("Choose a directory to save your work.")); 
show_message(_lib("No space left on device.")); 

याद रखें कि आप जब अपने आवेदन आरंभ दोनों डोमेन के लिए bindtextdomain() कॉल करने के लिए की जरूरत है।

उन्हें निकालने के लिए आप अपने स्रोत पेड़ में सभी फ़ाइल नाम पर xgettext अलग-अलग कीवर्ड निर्दिष्ट करने की आवश्यकता है कि इन मार्करों शामिल हैं: उनके द्विआधारी मो संस्करण में

xgettext --keyword=_app -d domain1 filenames... 
xgettext --keyword=_lib -d domain2 filenames... 

अंत में, पुलिस फाइलों के दोनों संकलन और उन्हें सही स्थान पर कॉपी/इंस्टॉल करें।

+0

प्रश्न के टिप्पणियों में उल्लिखित अनुसार, मुझे पहले से ही यह समाधान पता था, लेकिन प्रयास के लिए धन्यवाद। – Shef

+0

यदि आपको लगता है कि यह एक कामकाज है तो मुझे नहीं लगता कि समस्या के समाधान होंगे जो गैर-कामकाज हैं। विकल्प आपके स्वयं के प्रोग्राम को लिखना होगा जो dgettext() कॉल निकालता है, लेकिन फिर आप xgettext के सभी तर्कों को बहुत अधिक डुप्लिकेट करेंगे। –

+1

यह कोई समाधान नहीं है, लेकिन मैं आपको बक्षीस देने वाला हूं, क्योंकि यह अन्यथा बर्बाद हो जाएगा। – Shef