2012-03-20 16 views
6

PHP content management systemएक्स्टेंसिबल बनाने के लिए, भाषा अनुवाद महत्वपूर्ण हैं। मैं एक अनुवाद प्रणाली के लिए प्रोग्रामिंग दृष्टिकोण की खोज कर रहा था, और मैंने सोचा कि Qt Linguist एक अच्छा उदाहरण था।अनियमित नियमों के साथ भाषाओं में अनुवाद

यह क्यूटी प्रलेखन से एक उदाहरण उपयोग है:

int n = messages.count(); 
showMessage(tr("%n message(s) saved", "", n)); 

क्यूटी ज्ञात भाषा के नियमों का उपयोग निर्धारित करने के लिए "message" है एक "s" अंग्रेजी में संलग्न।

जब मैं अपने विकास दल के साथ कि उदाहरण के पालन-पोषण, वे एक ऐसा मुद्दा है को जोखिम में डाल मॉडलिंग की तानाना प्रभावशीलता क्यूटी के tr() समारोह के बंद की खोज की।

यह एक समान उदाहरण है, सिवाय इसके कि अब कुछ गंभीरता से गलत है।

int n = deadBacteria.count(); 
showMessage(tr("%n bacterium(s) killed", "", n)); 

"bacterium" का बहुवचन "bacteria" है। "s" संलग्न करना अनुचित है।

मुझे क्यूटी भाषाविद् के साथ बहुत अधिक अनुभव नहीं है, लेकिन मैंने नहीं देखा है कि यह अनियमित संयोग और रूपों को कैसे प्रबंधित करता है।

एक और जटिल वाक्यांश "%n cactus(s) have grown." हो सकता है। बहुवचन "cactii" होना चाहिए, और "have" को एक कैक्टस होने पर "has" से संगत होने की आवश्यकता है।

आपको लगता है कि तार्किक सुधार इन अनियमित शब्दों से बचने के लिए है क्योंकि इन्हें प्रोग्रामिंग में उपयोग नहीं किया जाता है। खैर, यह दो तरह से उपयोगी नहीं है:

  1. शायद वहाँ एक भाषा है कि एक अनियमित तरीके से संज्ञाओं को संशोधित करता है, भले ही स्रोत स्ट्रिंग अंग्रेजी में काम करता है, "%n message(s) saved" की तरह है। MyImaginaryLanguage में, उचित तरीके से अनुवादित स्ट्रिंग के रूप में हो सकता है "1Message बचाया", "M2essage बचाया" क्रमश: %n मूल्यों 1, 2, और 3, के लिए "Me3ssage बचाया", और यदि ऐसा नहीं होता क्यूटी लिंगुइस्ट के समान दिखने के नियम हैं।
  2. एक सीएमएस एक्स्टेंसिबल बनाने के जैसे मैं की जरूरत है मेरा होने के लिए, वेब अनुप्रयोगों के सभी प्रकार के कारक की जरूरत है। किसी ने निर्माण कर सकते हैं एक role-playing game कि वाक्य की आवश्यकता की तरह निर्माण किया जा करने के लिए "5 नागफनी हो गए हैं।" या हो सकता है एक सुरक्षा सॉफ्टवेयर कहा, "ClamAV 2 वायरस नहीं मिला।" के रूप में विरोध किया चाहता है "ClamAV 2 वायरस (ते) पाया।"

यदि अन्य क्यूटी डेवलपर्स इस के लिए एक समाधान है देखने के लिए ऑनलाइन खोज करने के बाद समस्या और कोई भी नहीं ढूंढ रहा, मैं स्टैक ओवरफ़्लो आया था।

  1. क्या एक्स्टेंसिबल और प्रभावी प्रोग्रामिंग तकनीक संभव अनियमित नियमों के साथ स्ट्रिंग का अनुवाद करने के लिए इस्तेमाल किया जाना चाहिए:

    मैं जानना चाहता हूँ?

  2. क्यूटी प्रोग्रामर और अनुवादक क्या करते हैं यदि उन्हें यह अनियमितता समस्या आती है?
+0

मैं क्यूटी बारे में कुछ पता नहीं है, लेकिन शायद आप एक विस्तार है जो एकवचन/दोहरी/बहुवचन अंत पार्स कोड सकता है? 'बैक्टीरी (ए/उम)', '(1 मैसेज/एम 2essage/Me3ssage) 'एक उदाहरण होगा जिसके लिए एक और काम की आवश्यकता होगी और हालांकि कम गतिशील हो। – Cyclone

उत्तर

6

आपने गलत समझा है कि क्यूटी में बहुलता कैसे काम करती है: यह स्वचालित अनुवाद नहीं है।

असल में आपके पास एक डिफ़ॉल्ट स्ट्रिंग है उदा। "% एन कैक्टस उग आया है।" जो आपके कोड में एक शाब्दिक है। आप जो कुछ भी आपको पसंद करते हैं उसे डाल सकते हैं उदा। "डिंगबैट विबल फू% एन बार"।

फिर आप अनुवाद भाषाओं को परिभाषित कर सकते हैं (एक ही भाषा के लिए जिसमें आपने स्रोत स्ट्रिंग लिखा है)।

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

तो जो भी भाषाविद् में अनुवाद करता है उसे स्रोत प्रदान किया जाएगा, और उदाहरण के लिए, एकवचन और बहुवचन भरना होगा।

स्रोत पाठ: %n cactus(s) have grown.

अंग्रेज़ी अनुवाद (एकवचन): %n cactus has grown.

अंग्रेज़ी अनुवाद (बहुवचन): %n cacti have grown.

आवेदन नहीं स्थापित अनुवाद यह तो मिलता है, तो स्रोत शाब्दिक पर वापस गिर जाता है। इसके अलावा स्रोत शब्दशः वह है जो अनुवाद करने वाले व्यक्ति को देखता है, इसलिए इसका अर्थ यह है कि आप इसका क्या मतलब रखते हैं। इसलिए "डिंगबैट विबल फू% एन बार" यह वर्णन करने के लिए एक अच्छा विचार नहीं हो सकता है कि कितने कैक्टि उगाए हैं।

अतिरिक्त पठन:

+0

आह, जो स्पष्ट जादू बताता है। मुझे क्यूटी भाषाविद् को कुछ समय देने की ज़रूरत होगी। – Deltik

3

आपकी सबसे अच्छी पसंद GNU gettext i18n ढांचे का उपयोग करना है। यह अच्छी तरह से integrated into PHP है, और आपको औपचारिक रूपों के बारे में सभी quirky व्याकरण नियम ठीक से define उपकरण देता है।

1

Qt Linguist का उपयोग करके आप लक्ष्य भाषा के आधार पर विभिन्न व्याकरणिक संख्याओं को संभाल सकते हैं। तो प्रत्येक बार %ntr स्ट्रिंग में पाया जाता है, अनुवादक को लक्ष्य भाषा के लिए सभी आवश्यक अनुवाद देने के लिए कहा जाएगा।अधिक जानकारी के लिए इस लेख की जाँच करें:

http://doc.qt.nokia.com/qq/qq19-plurals.html

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

  • कोई संबंधित समस्या नहीं^_^