विषय पर बढ़ें

अनुवादकों के लिए

यह पेज उस व्यक्ति के लिए है जो कैटलॉग संपादित करता है, कोड लिखने वाले के लिए नहीं। यह जान-बूझकर छोटा है, और इसे किसी प्रोजेक्ट के अपने अनुवादक-निर्देशों में लिंक या कॉपी करने के लिए बनाया गया है।

यहाँ कुछ भी आपसे Python पढ़ना नहीं माँगता। यहाँ की हर बात एक ही चीज़ के बारे में है: संदेश के वे हिस्से जो घुँघराले कोष्ठकों (curly braces) में हैं।

placeholder क्या होता है

कैटलॉग के किसी संदेश में घुँघराले कोष्ठकों के भीतर नाम हो सकते हैं:

msgid "Hello {name}"
msgstr ""

{name} एक placeholder है। जब प्रोग्राम यह संदेश दिखाता है तो वह {name} की जगह अपनी दी हुई कोई value रख देता है — किसी व्यक्ति का नाम, कोई फ़ाइल नाम, कोई संख्या। placeholder अनुवाद करने का शब्द नहीं है; वह एक ख़ाली जगह है।

आपका अनुवाद msgstr में जाता है, और उसे वह ख़ाली जगह बनाए रखनी होगी:

msgid "Hello {name}"
msgstr "こんにちは {name}"

आप क्या बदल सकते हैं, और क्या नहीं

आप कर सकते हैं:

  • placeholder को हिलाना — जहाँ भी लक्ष्य भाषा का व्याकरण उसे चाहे, संदेश के बिलकुल शुरू में भी।
  • placeholder को दोहराना, यदि भाषा को वह value दो बार चाहिए।
  • बाक़ी हर शब्द फिर से लिखना, विराम-चिह्न, अंतराल और वाक्य-क्रम समेत।

आप नहीं कर सकते:

  • कोष्ठकों के भीतर के नाम का अनुवाद। {name} {name} ही रहता है, उस भाषा में भी जो बाक़ी कुछ भी लातिन अक्षरों में नहीं लिखती।
  • कोष्ठक हटाना, या नाम को उनके बिना लिखना।
  • ASCII कोष्ठकों { } की जगह पूरी-चौड़ाई वाले रखना। कई input method पूरी-चौड़ाई वाले रूप बनाते हैं; वे लगभग एक जैसे दिखते हैं और काम नहीं करते।
  • फ़ॉर्मैटिंग जोड़ना, जैसे {name!r} या {amount:.2f}। कोई value कैसे दिखाई जाएगी, यह प्रोग्राम में तय होता है, कैटलॉग में नहीं।
  • ऐसा placeholder गढ़ना जो msgid में है ही नहीं।

यदि किसी संदेश को कोई ऐसी value चाहिए जो मूल संदेश देता ही नहीं, तो वह ऐसा संदेश है जिसे डेवलपर को बदलना होगा। जुगाड़ करने की बजाय यह बात कह दें।

बहुवचन रूप

गिनती वाला संदेश आपकी भाषा के हर बहुवचन रूप के लिए एक msgstr ख़ाना लेकर आता है, और वे कितने होंगे यह आपकी भाषा तय करती है — जापानी के लिए एक, जर्मन के लिए दो, रूसी के लिए तीन, अरबी के लिए छह। कैटलॉग आपको जितने ख़ाने दे, सब भरें।

दो नियम जिन पर लोग अक्सर फिसलते हैं:

  • ये ख़ाने "एकवचन, बहुवचन, और ज़्यादा बहुवचन" नहीं हैं। हर सूचकांक का वही अर्थ है जो आपकी भाषा का बहुवचन नियम कहता है। लातवियाई का तीसरा रूप अकेले शून्य के लिए है; स्लोवेनियाई का दूसरा ठीक दो के लिए; वेल्श सामान्य स्थिति को सूचकांक 0 पर और एकवचन को सूचकांक 1 पर रखती है।
  • दो ख़ानों में एक ही टेक्स्ट होना जायज़ हो सकता है। तुर्की, हंगेरियन, फ़ारसी और बांग्ला में संख्या के बाद संज्ञा एकवचन ही रहती है, इसलिए गिनती वाले संदेश के दोनों रूप एक ही स्ट्रिंग होते हैं। यह सही है, कॉपी-पेस्ट की चूक नहीं।

ऊपर के placeholder नियम हर रूप पर अलग-अलग लागू होते हैं।

fuzzy एंट्रियाँ

fuzzy चिह्नित एंट्री मशीन का अनुमान है: डेवलपर ने मूल संदेश बदला, और टूलिंग ने नए टेक्स्ट को आपके पुराने अनुवाद के साथ जोड़ दिया ताकि आपको शुरुआत के लिए कुछ मिल जाए।

#, fuzzy
msgid "Welcome back, {name}"
msgstr "こんにちは {name}"

fuzzy एंट्री प्रोग्राम उपयोग नहीं करता — वह उसकी जगह अनूदित न हुआ मूल दिखाता है — जब तक कोई टेक्स्ट सुधारकर fuzzy चिह्न हटा न दे। अधिकांश PO एडिटर में ठीक इसी के लिए एक बटन होता है।

विफलता का संदेश पढ़ना

कैटलॉग कंपाइल होते समय टूलिंग placeholders की जाँच करती है, और वह संदेश किसी प्रोग्रामर के लिए नहीं, आपके लिए लिखा गया है। केवल यह बताना कि {name} ग़ायब है, तब बंद गली है जब आप वे अक्षर अपनी आँखों के सामने देख सकते हैं; इसलिए जहाँ placeholder मौजूद दिखता है पर है नहीं, वहाँ संदेश कारण बताता है। मूल Hello {name} के विरुद्ध, इनमें से हर एक translation does not match the source placeholders: के अंतर्गत रिपोर्ट होता है

आपका अनुवाद कहता है दिया गया कारण
こんにちは {name} {name} is missing (the braces around it are not the ASCII { and })
こんにちは {{name}} {name} is missing (it is written {{name}}, which is how a literal brace is escaped)
こんにちは name {name} is missing (the name appears, but not inside braces)
こんにちは {名前} {name} is missing; {名前} is not in the source message

जो अक्षर दिखते ही नहीं, उन्हें अलग बर्ताव मिलता है। कोष्ठकों के भीतर no-break space कुछ ऐसा है जो input method पैदा करता है और कोई एडिटर नहीं दिखाता, इसलिए संदेश ऐसे अक्षर का नाम लेने की बजाय — जिसे आप कभी ढूँढ ही नहीं सकते — उसे code point से छाप देता है:

placeholder {<U+00A0>name} has a space inside the braces; write {name}

वह नाम जिसके अक्षर लिपियाँ मिलाते हैं — homoglyph का मामला, जहाँ सिरिलिक а लातिन से अभेद्य है — दो बार दिखाया जाता है, एक बार पठनीय रूप में और एक बार escaped, जो दोनों को अलग बताने वाला इकलौता रूप है:

translation does not match the source placeholders: {name} is missing;
{nаme} (n\u0430me) is not in the source message

यही असंदिग्धीकरण तब भी लागू होता है जब पूरी तरह एक ही लिपि में लिखा कोई ग्रीक या सिरिलिक नाम किसी ASCII स्रोत नाम से टकराता है, जिसमें एक-अक्षर वाला लातिन a / सिरिलिक а मामला भी शामिल है।

यदि इनमें से किसी से आपका सामना हो और सुधार स्पष्ट न लगे, तो सुरक्षित क़दम यह है कि आपने जो placeholder टाइप किया है उसे मिटा दें और msgid वाला कॉपी कर लें।

जाँचें क्या नहीं कर सकतीं

टूलिंग यह सत्यापित करती है कि आपके placeholders बरकरार हैं। वह यह नहीं बता सकती कि अनुवाद सटीक है, स्वाभाविक है, या इस संदर्भ के लिए ठीक है — वह पूरी तरह आप पर ही रहता है।

किसी भी जाँच से ज़्यादा दो चीज़ें मदद करती हैं:

  • अनुवादक टिप्पणी पढ़ें। संदेश के ऊपर #. से शुरू होने वाली पंक्ति डेवलपर की ओर से यह बताना है कि वह संदेश कहाँ दिखता है और उसका अर्थ क्या है।
  • msgctxt के बारे में पूछें। जब एक ही शब्द दो बार अलग-अलग contexts के साथ आता है, तो इसलिए कि दोनों का अनुवाद अलग होना चाहिए — जैसे "Open" बटन और "Open" अवस्था।