आपकी PHP साइट को अलग-अलग भाषाओं में क्यों बोलना चाहिए?
\n\nकल्पना करें: आपने एक आदर्श उत्पाद बनाया है — तेज़, सुविधाजनक, समस्याओं का समाधान करने वाला। लेकिन एक अड़चन है: आपका इंटरफ़ेस केवल हिंदी में बोलता है। जर्मनी, जापान या ब्राज़ील के संभावित ग्राहक बिना कुछ समझे टैब बंद कर देते हैं। यह सिर्फ खोया हुआ मुनाफा नहीं है — यह पूरे बाज़ारों का नुकसान है।
\n\nअंतर्राष्ट्रीयकरण (i18n — 'internationalization' से, जहाँ i और n के बीच 18 अक्षर हैं) और स्थानीयकरण (l10n) — यह स्टार्टअप के लिए कोई 'टिक' नहीं, बल्कि एक रणनीतिक उपकरण है। कई डेवलपर इस शब्द से डरते हैं, सोचते हैं कि पूरा कोड फिर से लिखना होगा। वास्तव में, PHP में अनुवादों का सही संगठन एक सुरुचिपूर्ण प्रक्रिया है जो कोड को साफ और व्यवसाय को वैश्विक बनाती है।
\n\nइस लेख में, हम PHP एप्लिकेशन के अंतर्राष्ट्रीयकरण के तीन वास्तविक दृष्टिकोणों पर चर्चा करेंगे: सरल arrays से लेकर शक्तिशाली intl एक्सटेंशन और क्लासिक gettext तक। आप सीखेंगे कि केवल टेक्स्ट का अनुवाद कैसे नहीं करना है, बल्कि तारीखों, संख्याओं और बहुवचन रूपों के साथ सही ढंग से कैसे काम करना है — क्योंकि अरबी, पोलिश या हिंदी में अपने नियम होते हैं।
PHP में i18n के मुख्य दृष्टिकोण
\n\nकोड लिखने से पहले, आर्किटेक्चर चुनना ज़रूरी है। मोटे तौर पर सभी विधियाँ तीन श्रेणियों में विभाजित हैं। कौन सी चुननी है — यह प्रोजेक्ट के पैमाने और प्रदर्शन आवश्यकताओं पर निर्भर करता है।
\n\n1. Arrays और ini-फ़ाइलें (DIY दृष्टिकोण)
\n\nसबसे आसान तरीका — अनुवादों को associative arrays या .ini फ़ाइलों में स्टोर करना। छोटे प्रोजेक्ट या MVP के लिए एकदम सही।
// lang/hi.php\nreturn [\n 'welcome' => 'वेबसाइट पर आपका स्वागत है!',\n 'logout' => 'लॉग आउट',\n 'cart_empty' => 'कार्ट खाली है'\n];\n\n// lang/en.php\nreturn [\n 'welcome' => 'Welcome to the website!',\n 'logout' => 'Logout',\n 'cart_empty' => 'Cart is empty'\n];\n\nइसका उपयोग सरल है: उपयोगकर्ता के session या cookie के आधार पर सही फ़ाइल शामिल करें।
\n\nfunction __($key) {\n static $lang = null;\n if ($lang === null) {\n $locale = $_SESSION['lang'] ?? 'hi';\n $lang = include "lang/{$locale}.php";\n }\n return $lang[$key] ?? $key;\n}\n\necho __('welcome'); // वेबसाइट पर आपका स्वागत है!\n\nलाभ: सरलता, किसी एक्सटेंशन की आवश्यकता नहीं, आसानी से कैश किया जा सकता है (Redis में भी स्टोर कर सकते हैं)।
\nनुकसान: बहुवचन रूपों का समर्थन नहीं (खुद से कोड लिखना होगा), बड़े प्रोजेक्ट के लिए असुविधाजनक (एक फ़ाइल में 100500 कीज़)।
2. Gettext — क्लासिक तरीका
\n\nGettext Unix दुनिया में अंतर्राष्ट्रीयकरण का डी-फैक्टो मानक है। PHP में यह gettext एक्सटेंशन के माध्यम से उपलब्ध है। यह एक शक्तिशाली उपकरण है जो WordPress, Drupal और Symfony में उपयोग होता है।
पहले .po फ़ाइलें बनाएं (उदाहरण के लिए, हिंदी के लिए):
# hi_IN/LC_MESSAGES/messages.po\nmsgid "Hello, %s!"\nmsgstr "नमस्ते, %s!"\n\nmsgid "You have %d new message"\nmsgid_plural "You have %d new messages"\nmsgstr[0] "आपके पास %d नया संदेश है"\nmsgstr[1] "आपके पास %d नए संदेश हैं"\n\nफिर msgfmt टूल से .mo फ़ाइल में कंपाइल करें। PHP कोड में यह इस तरह दिखता है:
putenv('LC_ALL=hi_IN.UTF-8');\nsetlocale(LC_ALL, 'hi_IN.UTF-8');\nbindtextdomain('messages', './locale');\ntextdomain('messages');\n\necho gettext('Hello, %s!', 'राहुल'); // नमस्ते, राहुल!\n\n// बहुवचन रूप — जादू:\necho ngettext('%d message', '%d messages', 3); // 3 संदेश\n\nवैसे, विकास को तेज़ करने के लिए Poedit का उपयोग करें — यह अनअनुवादित स्ट्रिंग्स को हाइलाइट करेगा।
\n\n3. Intl एक्सटेंशन (PHP 5.3+)
\n\nअगर आपको सिर्फ टेक्स्ट का अनुवाद नहीं, बल्कि देश के मानकों के अनुसार संख्या, तारीख या मुद्रा को सही ढंग से फ़ॉर्मेट करना है — तो Intl का उपयोग करें। यह ICU (International Components for Unicode) लाइब्रेरी पर आधारित है।
// संख्या फ़ॉर्मेटिंग