अपने ऐप को बिना नुकसान पहुँचाए PO फाइल्स का अनुवाद कैसे करें
TABLE OF CONTENTS
PO फ़ाइलें साधारण टेक्स्ट फ़ाइलों जैसी दिखती हैं, जब तक कि कोई अनुवादित %s, गुम बहुवचन रूप, या संपादित msgid आपकी ऐप को न तोड़ दे। इस वर्कफ़्लो का उपयोग करें ताकि आप मानव-उन्मुख स्ट्रिंग्स का अनुवाद कर सकें और gettext संरचना जस की तस बनी रहे।
पूरी फ़ाइल को सामान्य टेक्स्ट ट्रांसलेटर में पेस्ट न करें। एक PO फ़ाइल स्रोत कोड के करीब होती है: शब्द अनुवाद योग्य हैं, लेकिन फ़ाइल संरचना, प्लेसहोल्डर, टिप्पणियाँ और बहुवचन इंडेक्स बिना बदलाव के बने रहने चाहिए।
विधि 1: PO फ़ाइल ट्रांसलेटर का उपयोग करें
इसे तब चुनें जब आप सबसे तेज़ और सुरक्षित पहला ड्राफ्ट चाहते हैं और msgid / msgstr जोड़ियों को हाथ से संपादित नहीं करना चाहते।
-
मूल
.poफ़ाइल का बैकअप लें। अनुवादक को कुछ भेजने से पहले अपनी रिपॉजिटरी में एक साफ़ कॉपी रखें। अगर अनुवादित फ़ाइल में कोई गड़बड़ी हो जाए, तो तुलना के लिए आपके पास एक सही वर्शन होना चाहिए। -
PO-अनुकूल ट्रांसलेटर खोलें। gettext फ़ाइलों के लिए बने टूल का उपयोग करें, जैसे OpenL PO Translator, जो एक पे-पर-यूज़ डॉक्युमेंट ट्रांसलेशन टूल है। PO-अनुकूल टूल को लक्ष्य स्ट्रिंग्स का अनुवाद करना चाहिए, जबकि स्रोत स्ट्रिंग्स, टिप्पणियाँ, प्लेसहोल्डर और फ़ाइल संरचना जस की तस रखनी चाहिए। अगर आप अभी टूल चुन रहे हैं, तो हमारे सर्वश्रेष्ठ PO ट्रांसलेटर गाइड में विकल्पों की तुलना करें।
-
.poफ़ाइल अपलोड करें। उस भाषा फ़ाइल का उपयोग करें जिसमेंmsgidऔरmsgstrप्रविष्टियाँ हों। अगर आपके पास केवल.potटेम्पलेट है, तो पहले उससे लक्ष्य-भाषा की.poफ़ाइल बनाएं, फिर.poफ़ाइल अपलोड करें। -
स्रोत और लक्ष्य भाषा चुनें। स्रोत भाषा को
msgidके अंदर के टेक्स्ट से मिलाएं, न कि अपने एडमिन इंटरफ़ेस की भाषा से। उदाहरण के लिए, अगर फ़ाइल में अंग्रेज़ीmsgidस्ट्रिंग्स हैं और आपको स्पेनिश आउटपुट चाहिए, तो English to Spanish चुनें। -
अनुवादित फ़ाइल डाउनलोड करें। इसे उसी लोकेल नामकरण कन्वेंशन के साथ सेव करें, जैसा आपका फ्रेमवर्क अपेक्षा करता है। WordPress प्लगइन्स अक्सर टेक्स्ट-डोमेन प्लस लोकेल पैटर्न का उपयोग करते हैं, जबकि Django आमतौर पर फ़ाइलों को
locale/<language>/LC_MESSAGES/के तहत स्टोर करता है। -
सबसे पहले जोखिम भरे स्ट्रिंग्स की समीक्षा करें। अनुवादित फ़ाइल में
%,{,},<,>,msgid_plural,msgctxt, और#, fuzzyको खोजें। ये वे एंट्रीज़ हैं जो रनटाइम व्यवहार को सबसे अधिक प्रभावित कर सकती हैं। -
अनुवादित फ़ाइल को अपने ऐप में टेस्ट करें। भाषा को लोकली लोड करें और उन स्क्रीन पर क्लिक करें जहाँ अनुवादित स्ट्रिंग्स का उपयोग हुआ है। एक PO फ़ाइल का काम केवल अनुवाद होने पर पूरा नहीं होता; यह तब पूरा होता है जब ऐप अभी भी सही ढंग से रेंडर होता है।
विधि 2: Poedit में PO फ़ाइलों का अनुवाद करें
इसे तब चुनें जब आपको मानव समीक्षा, वर्डप्रेस संगतता, या सावधानीपूर्वक एंट्री-दर-एंट्री वर्कफ़्लो की आवश्यकता हो।
-
फ़ाइल को Poedit में खोलें। Poedit PO और अन्य स्थानीयकरण फ़ॉर्मेट्स के लिए एक समर्पित अनुवाद संपादक है; इसका बेसिक एडिटर मुफ़्त है, जबकि भारी वर्कफ़्लो के लिए पेड प्रो फ़ीचर्स भी हैं। वर्डप्रेस के लिए, आधिकारिक Polyglots हैंडबुक में बताया गया है कि Poedit
.poऔर.moफ़ाइलें POT फ़ाइल से बना सकता है और बहुवचन रूपों व UTF-8 को सपोर्ट करता है। -
अगर स्रोत बदला है तो POT टेम्पलेट से अपडेट करें। अगर डेवलपर्स ने ऐप का टेक्स्ट बदला है, तो अनुवाद से पहले
.poफ़ाइल को नवीनतम.potसे अपडेट करें। इससे नए, हटाए गए और अस्पष्ट स्ट्रिंग्स दिखती रहती हैं और पुराना UI टेक्स्ट चुपचाप नहीं रह जाता। -
केवल
msgstrफ़ील्ड का अनुवाद करें।msgidवह स्रोत स्ट्रिंग है जिसे आपका ऐप अनुवाद खोजने के लिए इस्तेमाल करता है। सामान्य gettext वर्कफ़्लो में, अनुवादकों कोmsgstrएडिट करना चाहिए, न किmsgidको। -
प्लेसहोल्डर्स को बिल्कुल वैसा ही रखें।
%s,%d,%1$s,{name},%(count)s,:nameया HTML टैग्स जैसे वेरिएबल्स का अनुवाद या स्पेसिंग न बदलें। अगर शब्दों का क्रम बदलना ज़रूरी हो, तो प्लेसहोल्डर को एक यूनिट के रूप में शिफ्ट करें। -
बहुवचन रूपों को अलग-अलग अनुवाद के रूप में संभालें। एक बहुवचन एंट्री में
msgid,msgid_plural, और कईmsgstr[n]वैल्यूज़ हो सकती हैं। लक्ष्य भाषा के लिए जितने बहुवचन स्लॉट ज़रूरी हैं, उतने भरें—हर जगह एक ही वाक्य कॉपी न करें। -
यदि आपकी ऐप को इसकी आवश्यकता है तो
.moफ़ाइल को सेव और कम्पाइल करें। कुछ स्टैक डेवलपमेंट के दौरान सीधे.poफ़ाइल पढ़ते हैं, लेकिन WordPress और कई gettext सेटअप रनटाइम पर कम्पाइल की गई.moफ़ाइल का उपयोग करते हैं। Poedit सेव करते समय.moकम्पाइल कर सकता है; Django मेंdjango-admin compilemessagesके साथ मैसेज कम्पाइल किए जा सकते हैं। -
अपलोड से पहले चेतावनियाँ हल करें। Poedit में चेतावनी आइकन अक्सर टूटे हुए प्लेसहोल्डर, गायब वेरिएबल या बहुवचन मेल न होने की ओर इशारा करते हैं। WordPress, Django, Drupal या आपके रिलीज़ ब्रांच में ट्रांसलेशन इम्पोर्ट करने से पहले इन्हें ठीक करें।
तरीका 3: लोकलाइज़ेशन प्लेटफ़ॉर्म का उपयोग करें
इस विकल्प को चुनें जब कई ट्रांसलेटर, रिव्यूअर या रिलीज़ मैनेजर एक ही PO फ़ाइल पर काम करना चाहते हैं।
-
PO फ़ाइल को ऐसे प्लेटफ़ॉर्म में इम्पोर्ट करें जो gettext को सपोर्ट करता हो। Weblate और इसी तरह के लोकलाइज़ेशन प्लेटफ़ॉर्म PO वर्कफ़्लो को सपोर्ट करते हैं। टीम लोकलाइज़ेशन प्लेटफ़ॉर्म अक्सर पेड प्रोडक्ट होते हैं, हालांकि Weblate का ओपन-सोर्स सेल्फ-होस्टेड विकल्प भी है। इनके द्वारा कमेंट्स, हेडर, फजी स्ट्रिंग्स और प्लेसहोल्डर की हैंडलिंग अलग होती है, इसलिए प्रोडक्शन फ़ाइल अपलोड करने से पहले फॉर्मेट सेटिंग्स जरूर जांचें।
-
प्लेसहोल्डर और टैग चेक सेट करें। printf-स्टाइल प्लेसहोल्डर, नामित वेरिएबल, HTML/XML टैग और बहुवचन फॉर्म के लिए QA नियम चालू करें। ये चेक उन गलतियों को पकड़ते हैं जिन्हें सामान्य स्पेलचेक नहीं देख सकता।
-
डेवलपर कमेंट्स को विज़िबल रखें। PO कमेंट्स में कॉन्टेक्स्ट हो सकता है जैसे सोर्स रेफरेंस, एक्सट्रैक्टेड डेवलपर नोट्स, फ्लैग्स और पिछले सोर्स स्ट्रिंग्स। ट्रांसलेटर को ये नोट्स चाहिए होते हैं जब कोई छोटा UI लेबल जैसे “Open” क्रिया, विशेषण या मेन्यू कमांड हो सकता है।
-
रिव्यू के साथ ट्रांसलेशन मेमोरी का उपयोग करें। ट्रांसलेशन मेमोरी बार-बार आने वाले UI स्ट्रिंग्स के लिए उपयोगी है, लेकिन यह पुराने ट्रांसलेशन को नए कॉन्टेक्स्ट में कॉपी कर सकती है। जब
msgctxt, सोर्स रेफरेंस या आसपास का UI बदल जाए तो री-यूज़ किए गए स्ट्रिंग्स की रिव्यू करें। -
PO फ़ाइल एक्सपोर्ट करें और लोकल चेक चलाएँ। एक्सपोर्ट पर आंख बंद करके भरोसा न करें। ट्रांसलेटेड फ़ाइल को वापस ऐप में डालें, जरूरत हो तो कम्पाइल करें, और मर्ज करने से पहले स्क्रीन टेस्ट करें।
PO फ़ाइल के नियम जिन्हें कभी नहीं तोड़ना चाहिए
| PO item | अनुवाद करें? | सुरक्षित उदाहरण | क्यों ज़रूरी है |
|---|---|---|---|
msgid | नहीं | msgid "Save changes" | ऐप इस स्रोत स्ट्रिंग को कई gettext वर्कफ़्लो में लुकअप कुंजी के रूप में इस्तेमाल करता है। |
msgstr | हाँ | msgstr "Cambios guardar करें" | यह वह लक्षित भाषा का पाठ है जो उपयोगकर्ता देखते हैं। |
msgctxt | नहीं | msgctxt "button" | संदर्भ एक जैसे स्रोत स्ट्रिंग्स में अंतर करता है। |
%s, %d, %1$s | नहीं | Hello, %s -> Hola, %s | रनटाइम कोड इन प्लेसहोल्डर्स को लाइव मानों से बदलता है। |
{name}, %(count)s, :name | नहीं | Welcome, {name} | नामित वेरिएबल्स को ऐप कोड से मेल खाना चाहिए। |
| HTML टैग्स | आमतौर पर नहीं | <strong>Warning</strong> | केवल टेक्स्ट का अनुवाद करें, टैग सिंटैक्स का नहीं। |
msgid_plural | नहीं | msgid_plural "%d files" | स्रोत बहुवचन मूल कोड पथ का हिस्सा है। |
msgstr[0], msgstr[1] | हाँ, सावधानी से | msgstr[0] "%d file" | हर लक्षित भाषा के अपने बहुवचन नियम होते हैं। |
#, fuzzy | पहले समीक्षा करें | #, fuzzy | फज़ी का मतलब है अनुवाद पुराना या अपुष्ट हो सकता है। |
#. डेवलपर टिप्पणियाँ | आमतौर पर नहीं | #. Button label | ये नोट्स अनुवादकों को संदर्भ समझने में मदद करते हैं। |
त्वरित उदाहरण: सुरक्षित बनाम ख़राब PO अनुवाद
यहाँ एक सामान्य gettext एंट्री है:
#. %s उपयोगकर्ता का डिस्प्ले नाम है।
#, c-format
msgid "Welcome back, %s"
msgstr ""
एक सुरक्षित स्पेनिश अनुवाद %s को अपरिवर्तित रखता है:
#. %s उपयोगकर्ता का डिस्प्ले नाम है।
#, c-format
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, %s"
एक ख़राब अनुवाद प्लेसहोल्डर को बदल देता है:
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, % s"
वह छोटा सा स्पेस भी मायने रखता है। GNU msgfmt --check-format ऐसे फॉर्मेट-स्ट्रिंग मिसमैच पकड़ने के लिए बनाया गया है, जैसे कि ग़लत % प्लेसहोल्डर, और Poedit भी आम प्लेसहोल्डर समस्याओं के बारे में चेतावनी देता है। उन स्ट्रिंग्स की विस्तृत सूची के लिए जिन्हें अनछुआ छोड़ना चाहिए, हमारा गाइड देखें: क्या अनुवाद नहीं करना है।
अनुवादित PO फ़ाइल की जाँच कैसे करें
- अगर आपके पास gettext इंस्टॉल है तो gettext वैलिडेशन चलाएँ।
msgfmt --check --check-format -o /tmp/messages.mo path/to/messages.po
यह सिंटैक्स, हेडर और फॉर्मेट स्ट्रिंग्स की जाँच करता है, फिर अगर फाइल वैध है तो एक अस्थायी कंपाइल्ड कैटलॉग लिखता है।
- फाइल को अपने फ्रेमवर्क के अनुसार कंपाइल करें।
django-admin compilemessages
Django प्रोजेक्ट्स के लिए, compilemessages उन .po फाइलों को कंपाइल करता है जो makemessages से बनाई गई हैं, ताकि gettext सपोर्ट के लिए .mo फाइलें तैयार हो सकें।
- खाली अनुवाद खोजें।
grep -n 'msgstr ""' path/to/messages.po
खाली msgstr फील्ड्स अनुवाद न किए गए एंट्री के लिए जानबूझकर छोड़ी जा सकती हैं, लेकिन रिलीज़ के समय ये आपको चौंकाएँ नहीं।
- फजी स्ट्रिंग्स खोजें।
grep -n '#, fuzzy' path/to/messages.po
फजी स्ट्रिंग्स को रिलीज़ से पहले किसी व्यक्ति द्वारा रिव्यू किया जाना चाहिए। डिफ़ॉल्ट रूप से, msgfmt फजी अनुवादों का उपयोग नहीं करता जब तक आप --use-fuzzy के साथ कंपाइल न करें, इसलिए फजी एंट्री फाइनल कैटलॉग में अनुवाद न किए गए स्ट्रिंग की तरह व्यवहार कर सकती है।
- असली UI का परीक्षण करें। उन स्क्रीन को खोलें जिनमें फॉर्म, बहुवचन गिनती, त्रुटि संदेश, खाता मेनू और भुगतान प्रक्रिया शामिल हैं। PO वैलिडेशन फाइल की समस्याएँ पकड़ता है; केवल UI परीक्षण से ही अटपटा शब्द चयन, ओवरफ्लो और संदर्भ की कमी जैसी समस्याएँ पकड़ में आती हैं।
आपको कौन-सा तरीका अपनाना चाहिए?
| स्थिति | सर्वोत्तम तरीका | क्यों |
|---|---|---|
| आपको एक PO फ़ाइल के लिए जल्दी से पहला ड्राफ्ट चाहिए | PO फ़ाइल अनुवादक | संरचना बनाए रखते हुए सबसे तेज़ तरीका |
| आप कोई WordPress प्लगइन या थीम मेंटेन करते हैं | Poedit | परिचित WordPress वर्कफ़्लो और .mo संकलन के साथ |
| आप कोई Django ऐप मेंटेन करते हैं | PO अनुवादक या Poedit, फिर compilemessages | अनुवाद तेज़ हो सकता है, लेकिन फ्रेमवर्क संकलन फिर भी ज़रूरी है |
| आपके पास कई भाषाएँ और समीक्षक हैं | स्थानीयकरण प्लेटफ़ॉर्म | बेहतर असाइनमेंट, इतिहास, गुणवत्ता नियंत्रण और समीक्षा नियंत्रण |
| आप डेवलपर-फेसिंग स्ट्रिंग्स का अनुवाद कर रहे हैं | मशीन अनुवाद के बाद मानव समीक्षा | कोड शब्द, प्लेसहोल्डर और संदर्भ अधिक मायने रखते हैं |
| आप JSON या फ्रंटएंड i18n फ़ाइलों का भी स्थानीयकरण कर रहे हैं | फ़ॉर्मेट-विशिष्ट वर्कफ़्लो अपनाएँ | PO नियम हमेशा JSON, YAML या ICU संदेशों पर लागू नहीं होते |
अगर आपके प्रोजेक्ट में gettext PO फ़ाइलें और JSON लोकेल फ़ाइलें दोनों शामिल हैं, तो हर फ़ॉर्मेट का अनुवाद ऐसे टूल से करें जो उसकी संरचना को समझता हो। PO फ़ाइलें msgid और msgstr के इर्द-गिर्द घूमती हैं; JSON स्थानीयकरण कुंजी और मानों के इर्द-गिर्द। इस वर्कफ़्लो के लिए, हमारा 2026 के सर्वश्रेष्ठ JSON अनुवादकों का गाइड देखें।
अक्सर पूछे जाने वाले सवाल
क्या मैं PO फ़ाइलों का अनुवाद Google Translate से कर सकता हूँ?
आप व्यक्तिगत msgstr मानों को सामान्य अनुवादक में कॉपी कर सकते हैं, लेकिन पूरी PO फ़ाइल को सामान्य टेक्स्ट अनुवादक में अपलोड या पेस्ट करना जोखिम भरा है। सामान्य अनुवादक msgid, टिप्पणियाँ, उद्धरण एस्केपिंग, बहुवचन सूचकांक या प्लेसहोल्डर बदल सकते हैं। इसके बजाय PO-अनुकूल अनुवादक, Poedit या स्थानीयकरण प्लेटफ़ॉर्म का उपयोग करें।
.po, .pot, और .mo में क्या अंतर है?
.pot वह टेम्पलेट है जो स्रोत कोड से निकाला जाता है। इसमें आमतौर पर मूल स्ट्रिंग्स होती हैं लेकिन कोई पूर्ण अनुवाद नहीं। .po एक लक्ष्य भाषा के लिए संपादन योग्य अनुवाद फ़ाइल है। .mo संकलित बाइनरी कैटलॉग है जिसे कई gettext-आधारित ऐप्स रनटाइम पर लोड करते हैं।
क्या मुझे msgid का अनुवाद करना चाहिए?
नहीं, सामान्य वर्कफ़्लो में नहीं। msgstr का अनुवाद करें। GNU gettext मैनुअल के अनुसार, msgid मूल अनुवादित न किया गया स्ट्रिंग है और msgstr उसका अनुवाद है; msgid स्ट्रिंग्स gettext टूल्स द्वारा बनाई और प्रबंधित की जाती हैं।
मैं कैसे जांचूं कि कोई PO फ़ाइल वैध है या नहीं?
अगर gettext उपलब्ध है तो msgfmt --check --check-format चलाएँ, फ़ाइल को Poedit में खोलें, या अपनी स्थानीयकरण प्लेटफ़ॉर्म के QA चेक्स का उपयोग करें। फिर फ़ाइल को ऐप में संकलित करें और टेस्ट करें। वैधता जांचना ज़रूरी है, लेकिन यह UI टेस्टिंग का विकल्प नहीं है।
अगर मैं कोई प्लेसहोल्डर तोड़ दूँ तो क्या होगा?
सबसे अच्छा मामला, ऐप एक अजीब स्ट्रिंग दिखाएगा। सबसे खराब स्थिति में, रनटाइम फ़ॉर्मैटर एक त्रुटि फेंक सकता है क्योंकि अनुवादित स्ट्रिंग अब उन वेरिएबल्स से मेल नहीं खाती जो कोड में पास की जाती हैं। प्लेसहोल्डर को केवल पूर्ण टोकन के रूप में ही स्थानांतरित करना चाहिए, कभी भी अनुवाद या आंशिक रूप से संपादित नहीं करना चाहिए।
क्या OpenL PO फ़ाइलों का अनुवाद कर सकता है?
हाँ। OpenL PO Translator विशेष रूप से gettext .po फ़ाइलों के लिए बनाया गया है और यह दावा करता है कि अनुवाद करते समय प्लेसहोल्डर और वेरिएबल्स को ज्यों का त्यों रखता है, 100+ भाषाओं में। इसमें पे-पर-यूज़ डॉक्युमेंट ट्रांसलेशन वर्कफ़्लो है, इसलिए जब PO संरचना को सुरक्षित रखना मैन्युअल काम से ज़्यादा ज़रूरी हो, तो इसे तेज़ ड्राफ्ट के लिए इस्तेमाल करें। अगर आपके पास केवल .pot टेम्पलेट है, तो OpenL का उपयोग करने से पहले लक्ष्य भाषा की .po फ़ाइल बना लें।
स्रोत
- GNU gettext मैनुअल: PO फाइलें — PO फाइल फॉर्मेट की आधिकारिक gettext व्याख्या।
- GNU gettext मैनुअल: PO फाइल प्रविष्टियाँ —
msgid,msgstr, टिप्पणियाँ, फ्लैग्स और प्रविष्टि संरचना का स्रोत। - GNU gettext मैनुअल: बहुवचन रूप वाली प्रविष्टियाँ — बहुवचन-रूप प्रविष्टि संरचना का स्रोत।
- GNU gettext मैनुअल: msgfmt इनवोकेशन —
msgfmt --checkऔर फॉर्मेट-स्ट्रिंग वैलिडेशन का स्रोत। - OpenL PO Translator — प्लेसहोल्डर और वेरिएबल्स को सुरक्षित रखते हुए
.poफाइलों के अनुवाद के लिए OpenL उत्पाद पृष्ठ। - Poedit — PO अनुवाद संपादक और प्रो ऑफरिंग के लिए आधिकारिक Poedit साइट।
- WordPress Polyglots Handbook: Poedit — Poedit, POT फाइलें, PO फाइलें, MO संकलन और प्लेसहोल्डर चेतावनियों के उपयोग पर WordPress मार्गदर्शन।
- Django प्रलेखन: अनुवाद — संदेश फाइलों और अनुवाद के लिए Django वर्कफ़्लो।
- Django प्रलेखन: compilemessages —
.poफाइलों को.moफाइलों में संकलित करने के लिए Django कमांड संदर्भ। - Drupal प्रलेखन: PO और POT फाइलें —
.po,.pot, संदर्भ, बहुवचन रूप, टिप्पणियाँ और वेरिएबल्स की Drupal व्याख्या। - Weblate प्रलेखन: GNU gettext PO — PO हेडर, पूर्व स्रोत स्ट्रिंग्स, अप्रचलित स्ट्रिंग्स और जनरेटेड MO फाइलों पर स्थानीयकरण-प्लेटफ़ॉर्म नोट्स।