2010-01-07 6 views
8

मेरे पास PyQt4 में लिखा गया कुछ एप्लिकेशन है जहां मैंने अंतर्राष्ट्रीयकरण और जीयूआई के स्थानीयकरण के लिए मानक पायथन गेटटेक्स्ट लाइब्रेरी का उपयोग किया है। यह मेरे लिए अच्छा काम करता है। लेकिन मैंने गेटटेक्स्ट को सिर्फ इसलिए चुना है क्योंकि मुझे पहले से ही गेटटेक्स्ट उपयोग का ज्ञान और अनुभव है, और Qt4 tr() दृष्टिकोण के साथ अनुभव का शून्य है।PyQt4 एप्लिकेशन के स्थानीयकरण के लिए QObject.tr() के बजाय गेटटेक्स्ट का उपयोग करने के पेशेवर और विपक्ष?

अब मैं दोनों दृष्टिकोणों की तुलना करना बेहतर समझना चाहता हूं और समझता हूं कि QObject.tr के बजाय गेटटेक्स्ट का उपयोग करके मैं क्या खो रहा हूं, और क्या कोई गंभीर कारण है कि मुझे Qt4/PyQt4 अनुप्रयोगों के लिए gettext का उपयोग क्यों नहीं करना चाहिए?

gettext का उपयोग कर की मेरी समझ फायदे में हैं:

  • GNU gettext परिपक्व है और यह मानक जिस वास्तविक जीएनयू/लिनक्स दुनिया में हो रहा है।
  • अनुवादकों के काम को सरल बनाने के लिए पीओ फाइलों के लिए पर्याप्त विशेष संपादक हैं, हालांकि पीओ टेम्पलेट्स की पाठ्य प्रकृति सख्ती से जरूरी नहीं है।
  • यहां तक ​​कि वेब सेवाएं भी उपलब्ध हैं जिनका उपयोग सहयोगी अनुवादों के लिए किया जा सकता है।
  • गेटटेक्स्ट मानक पायथन लाइब्रेरी है, इसलिए मुझे रनटाइम में इसका उपयोग करने के लिए कुछ खास इंस्टॉल करने की आवश्यकता नहीं है।
  • यह ngettext() के माध्यम से एकवचन/बहुवचन रूप चयन के लिए बहुत अच्छा समर्थन है।

क्या मैं QObject.tr() के फायदे के रूप में देखें:

  • यह देशी प्रौद्योगिकी के लिए क्यूटी 4/PyQt4 तो शायद यह तेजी से बेहतर है (हालांकि मैं साबित करने के लिए कोई डेटा नहीं है) काम करेंगे/है।
  • अनुवाद करने के लिए संदेश में अतिरिक्त संदर्भ जानकारी हो सकती है जो अनुवादकों को homonym शब्दों के लिए सर्वोत्तम रूपों का चयन करने में मदद करेगी, उदा। वास्तविक शब्द के आधार पर अंग्रेजी शब्द "पत्र" का अनुवाद "कैरेक्टर", "मेल" या यहां तक ​​कि "पेपर आकार" के रूप में भी किया जा सकता है।

क्या मैं() QObject.tr का नुकसान gettext बनाम के रूप में देखें:

  • मैं क्यूटी प्रलेखन कैसे वहाँ एकवचन/बहुवचन चयन समर्थित है में नहीं मिला था।
  • क्यूटी 4 टीएस अनुवाद टेम्पलेट एक्सएमएल प्रारूप में है और इसलिए विशेष संपादक (क्यूटी भाषाविद्) के बिना संपादित करने के लिए अधिक जटिल है और ऐसा लगता है कि कोई अन्य तृतीय-पक्ष समाधान या वेब सेवाएं नहीं हैं। तो अनुवादकों के लिए नए उपकरण सीखने की आवश्यकता होगी (यदि वे पहले से ही पीओ टूल्स से परिचित हैं)।

लेकिन ऊपर दिए गए सभी आइटम स्पष्ट रूप से यह कहने के लिए पर्याप्त नहीं हैं कि कोई भी उपकरण दूसरे से बेहतर है। और मैं बेहतर क्या है इसके बारे में लौ युद्ध शुरू नहीं करना चाहता क्योंकि यह बहुत ही व्यक्तिपरक है। मैं सिर्फ यह जानना चाहता हूं कि मैं QObject.tr() बनाम गेटटेक्स्ट के पेशेवरों और विपक्ष के रूप में क्या खो रहा हूं।

उत्तर

-1

आप जोड़ सकते हैं कि तर्क अलग-अलग प्रबंधित किए जाते हैं ...

gettext के साथ, हम

_("Hello %(name)s from %(city)s") % {person.__dict__}

कर सकते हैं जबकि PyQt में, हम

self.tr("Hello %1 from %2").arg(person.name).arg(person.city)

2

एक साधारण QObject.tr() का उपयोग करने के कारण करते हैं:

यह बचाता है विंडोज पर गेटटेक्स्ट स्थापित करने की आवश्यकता है, जिससे क्रॉस-प्लेटफॉर्म काम थोड़ा आसान हो जाता है। मैं विंडोज पर जितना संभव हो उतना बाइनरी निर्भरता रखने की कोशिश करता हूं।

2

सभी के पास उनके पेशेवर और विपक्ष हैं, लेकिन उन्हें अधिक स्पष्ट रूप से परिभाषित करने के लिए आपको मोबाइल वातावरण या डेस्कटॉप वातावरण को लक्षित करने पर पहले परिभाषित करना होगा।

हमारी कंपनी के भीतर हम अलग-अलग तरीकों का उपयोग करते हैं क्योंकि आदर्श समाधान अभी तक मौजूद नहीं है। डेस्कटॉप विकास के लिए हम पीओ फाइलों का उपयोग कर रहे हैं क्योंकि बटन स्केल नहीं किए गए हैं और इसलिए टेक्स्ट फिट होगा। मोबाइल विकास के लिए, स्ट्रिंग का अनुवाद बटन आकार पर निर्भर करता है जो परिदृश्य और चित्र उपकरणों पर भिन्न हो सकता है। तो यह थोड़ा सा जटिल करता है क्योंकि पीओ फ़ाइल में केवल एक निश्चित शब्द का 1 अनुवाद हो सकता है। इसलिए हमने XLIFF को इसके लिए चुना है, इसलिए हम एक स्ट्रिंग में अद्वितीय आईडी असाइन कर सकते हैं। यह एक आसान काम भी नहीं है, क्योंकि आरसी फाइलों को एक्सएलआईएफएफ फाइलों में कनवर्ट करने के लिए कोई अच्छा समाधान नहीं है। (क्योंकि वर्तमान उपकरण सभी स्ट्रिंग्स को "" के बीच परिवर्तित करते हैं जो निश्चित रूप से अवांछित व्यवहार है)। इसलिए मैंने इस कार्य के लिए कनवर्टर लिखा था।

हालांकि, स्थानीयकरण के बारे में सोचते समय, बहुवचन रूप बहुत महत्वपूर्ण हैं इसलिए यह एक अच्छा स्थानीयकरण समाधान नहीं है। इसलिए, मैं पीओ gettext के लिए जाना होगा।

ग्रीटिंग्स, फ्लोरिस।

2
वर्तमान समय

, क्यूटी बहुवचन रूपों को संभाल नहीं होती जब आप

+1

मैं जोड़ना होगा QT_TRANSLATE_NOOP का इस्तेमाल कर रही रहे हैं 'कि टीआर (" आप का चयन किया है% n आइटम (रों) ",, item.count()) ऐसा लगता है कि यह काम कर सकता है लेकिन यह क्यूटी के सिस्टम में बहुत खराब दस्तावेज है और वास्तव में यह नहीं बताता है कि चीजों को कैसे रखा जाए यदि आप वास्तव में एक प्रत्यय के बजाय दो (या अधिक) अलग तार चाहते हैं: 'tr (" % n आइटम {is | s} अब चयन में हैं। ",, item.count())' – SlySven

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

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