PHP में अंतर्राष्ट्रीयकरण (i18n): वेबसाइट को बहुभाषी कैसे बनाएं
अंतर्राष्ट्रीयकरण (i18n) सॉफ्टवेयर को इस तरह डिज़ाइन करने की प्रक्रिया है कि इसे कोड में बदलाव किए बिना विभिन्न भाषाओं और क्षेत्रों के लिए आसानी से अनुकूलित किया जा सके। PHP में इसके लिए कई शक्तिशाली उपकरण मौजूद हैं, जो कोड और टेक्स्ट को अलग करने और फिर गतिशील रूप से आवश्यक भाषा लोड करने की अनुमति देते हैं।
इस लेख में, हम PHP में i18n को लागू करने के लिए मुख्य दृष्टिकोणों और लाइब्रेरीज़ पर चर्चा करेंगे, जिसमें बिल्ट-इन फ़ंक्शन gettext, एक्सटेंशन intl और लोकप्रिय लाइब्रेरीज़ जैसे Symfony Translation शामिल हैं।
1. i18n की मुख्य अवधारणाएँ
उपकरणों पर जाने से पहले, मुख्य शब्दों को समझना महत्वपूर्ण है:
- लोकेल (locale) — भाषा और क्षेत्र का संयोजन (उदाहरण:
ru_RU,en_US,de_DE)। - अनुवाद — मूल स्ट्रिंग को दूसरी भाषा में उसके समकक्ष से बदलना।
- बहुवचन (Pluralization) — संख्या के आधार पर शब्दों का सही रूप (उदाहरण: "1 फ़ाइल", "2 फ़ाइलें", "10 फ़ाइलें")।
- फ़ॉर्मेटिंग — तिथियों, संख्याओं, मुद्राओं को लोकेल के अनुसार अनुकूलित करना।
2. बिल्ट-इन gettext लाइब्रेरी
gettext i18n के लिए एक क्लासिक उपकरण है, जो PHP में बिल्ट-इन है। यह अनुवाद संग्रहीत करने के लिए .po (Portable Object) और .mo (Machine Object) फ़ाइलों का उपयोग करता है।
इंस्टॉलेशन और सेटअप
सुनिश्चित करें कि php.ini में gettext एक्सटेंशन सक्षम है:
extension=gettextबुनियादी सेटअप का उदाहरण:
<?php// लोकेल सेट करेंsetlocale(LC_ALL, 'ru_RU.UTF-8');// डोमेन निर्दिष्ट करें (.mo फ़ाइल का नाम)bindtextdomain('messages', './locale');// एन्कोडिंगbind_textdomain_codeset('messages', 'UTF-8');// डोमेन चुनेंtextdomain('messages');
// अनुवाद का उपयोग करेंecho gettext("Hello, World!"); // आउटपुट: "Здравствуй, Мир!"// या संक्षिप्त रूप मेंecho _("Hello, World!");?>फ़ाइल संरचना
आपकी अनुवाद फ़ाइलें locale फ़ोल्डर में होनी चाहिए:
locale/├── ru_RU/│ └── LC_MESSAGES/│ └── messages.po│ └── messages.mo└── en_US/ └── LC_MESSAGES/ └── messages.po └── messages.momessages.po फ़ाइल का उदाहरण:
msgid "Hello, World!"msgstr "Здравствуй, Мир!"
msgid "Files: %d"msgstr "Файлы: %d".po को .mo में कंपाइल करने के लिए msgfmt उपयोगिता का उपयोग करें:
msgfmt messages.po -o messages.mo3. intl एक्सटेंशन (Internationalization Functions)
intl एक्सटेंशन लोकेल के साथ काम करने के लिए अधिक आधुनिक क्षमताएँ प्रदान करता है, जिसमें संख्याओं, तिथियों और संदेशों का फ़ॉर्मेटिंग शामिल है।
इंस्टॉलेशन
sudo apt-get install php-intl # Ubuntu/Debian के लिएMessageFormatter के साथ संदेश फ़ॉर्मेटिंग
<?php$locale = 'ru_RU';$message = '{0} приветствует {1}!';$fmt = new MessageFormatter($locale, $message);echo $fmt->format(['PHP', 'Мир']);// आउटपुट: PHP приветствует Мир!?>बहुवचन (Pluralization)
<?php$locale = 'ru_RU';$pattern = '{0, plural, one {# файл} few {# файла} other {# файлов}}';$fmt = new MessageFormatter($locale, $pattern);echo $fmt->format([1]); // 1 файлecho $fmt->format([2]); // 2 файлаecho $fmt->format([10]); // 10 файлов?>तिथियों और संख्याओं का फ़ॉर्मेटिंग
<?php$locale = 'ru_RU';$fmt = new NumberFormatter($locale, NumberFormatter::DECIMAL);echo $fmt->format(1234567.89); // 1 234 567,89
$dateFmt = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE);echo $dateFmt->f