PHP में अंतर्राष्ट्रीयकरण (i18n): gettext और आधुनिक तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP में अंतर्राष्ट्रीयकरण (i18n): बुनियादी से आधुनिक समाधान तक

अंतर्राष्ट्रीयकरण (i18n) सॉफ्टवेयर को इस तरह डिजाइन करने की प्रक्रिया है कि उसे कोड बदले बिना विभिन्न भाषाओं और क्षेत्रों के लिए आसानी से अनुकूलित किया जा सके। PHP में i18n लागू करने के कई तरीके हैं, बिल्ट-इन फंक्शन से लेकर शक्तिशाली लाइब्रेरी तक। इस लेख में हम मुख्य टूल्स और बेस्ट प्रैक्टिसेज पर चर्चा करेंगे।

अंतर्राष्ट्रीयकरण क्यों जरूरी है?

i18n का मुख्य उद्देश्य इंटरफेस टेक्स्ट को कोड से अलग करना है। इससे आप:

  • एप्लिकेशन लॉजिक बदले बिना नई भाषाएं जोड़ सकते हैं
  • कई लोकल (तारीख, संख्या, मुद्रा प्रारूप) को सपोर्ट कर सकते हैं
  • अनुवादकों के लिए अनुवाद प्रक्रिया को सरल बना सकते हैं
  • क्षेत्रीय मानकों (जैसे फोन नंबर फॉर्मेट) का पालन कर सकते हैं

बिल्ट-इन सपोर्ट: gettext

PHP अनुवाद के लिए एक शक्तिशाली gettext मैकेनिज्म प्रदान करता है। यह क्लासिक तरीका है जो ज्यादातर Linux सिस्टम में उपयोग होता है।

इंस्टॉलेशन और सेटअप

सुनिश्चित करें कि gettext एक्सटेंशन इंस्टॉल है। ज्यादातर Linux डिस्ट्रीब्यूशन में यह डिफ़ॉल्ट रूप से उपलब्ध है। Windows के लिए php.ini में php_gettext.dll को सक्षम करना पड़ सकता है।

अनुवाद फाइलें बनाना

पहले लोकल के लिए एक डायरेक्टरी बनाएं। सामान्य संरचना:

locale/
  hi_IN/
    LC_MESSAGES/
      messages.po
      messages.mo
  en_US/
    LC_MESSAGES/
      messages.po
      messages.mo

.po (Portable Object) फाइलें अनुवाद वाली टेक्स्ट फाइलें हैं। हिंदी के लिए messages.po का उदाहरण:

msgid "Welcome"
msgstr "स्वागत है"

msgid "Hello, %s!"
msgstr "नमस्ते, %s!"

.po को बाइनरी .mo में कंपाइल करने के लिए msgfmt यूटिलिटी का उपयोग करें:

msgfmt locale/hi_IN/LC_MESSAGES/messages.po -o locale/hi_IN/LC_MESSAGES/messages.mo

कोड में उपयोग

gettext के साथ PHP स्क्रिप्ट का उदाहरण:

<?php
// लोकल और डोमेन सेट करें
$locale = 'hi_IN';
putenv("LANG=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain('messages', __DIR__ . '/locale');
textdomain('messages');

// स्ट्रिंग का अनुवाद
echo gettext('Welcome'); // आउटपुट: "स्वागत है"
echo _('Hello, %s!', 'राहुल'); // आउटपुट: "नमस्ते, राहुल!"
?>

_() फंक्शन gettext() का शॉर्टकट है। प्लेसहोल्डर के साथ अनुवाद के लिए sprintf() का उपयोग करें:

echo sprintf(_('Hello, %s!'), $username);

आधुनिक तरीका: symfony/translation

बड़े प्रोजेक्ट्स के लिए symfony/translation लाइब्रेरी अधिक सुविधाजनक है। यह अधिक लचीला इंटरफेस, विभिन्न फॉर्मेट (YAML, XLIFF, JSON) का सपोर्ट और फ्रेमवर्क के साथ आसान इंटीग्रेशन प्रदान करती है।

Composer के माध्यम से इंस्टॉल करें

composer require symfony/translation

उपयोग का उदाहरण

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\ArrayLoader;

$translator = new Translator('hi_IN');
$translator->addLoader('array', new ArrayLoader());

// सीधे अनुवाद जोड़ें (प्रदर्शन के लिए)
$translator->addResource('array', [
    'Welcome' => 'स्वागत है',
    'Hello %name%' => 'नमस्ते, %name%',
], 'hi_IN');

// अंग्रेजी पर स्विच करें
$translator->setLocale('en_US');
$translator->addResource('array', [
    'Welcome' => 'Welcome',
    'Hello %name%' => 'Hello, %name%',
], 'en_US');

// उपयोग
echo $translator->trans('Welcome'); // "Welcome"
echo $translator->trans('Hello %name%', ['%name%' => 'John']); // "Hello, John"
?>

YAML फाइलों के साथ काम करना

messages.hi.yaml फाइल बनाएं:

Welcome: स्वागत है
'Hello %name%': 'नमस्ते, %name%'

लोड

अनुशंसाएँ