C++ अनुप्रयोगों का अंतर्राष्ट्रीयकरण: विश्व स्तरीय सॉफ्टवेयर बनाना

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

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

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

आपका C++ कोड दुनिया की सभी भाषाओं में क्यों बोलना चाहिए?

\n\n

कल्पना करें: आपने C++ में एक आदर्श पार्सर या उच्च-प्रदर्शन वाला सर्वर लिखा है। यह तेज़ चलता है, न्यूनतम मेमोरी खाता है, लेकिन केवल रूसी में संदेश दिखाता है। और कल आपका उत्पाद कोई जापानी निगम खरीद लेता है। क्या करें? पूरे आउटपुट को फिर से लिखें? सैकड़ों if (lang == "jp") डालें? यह नरक का रास्ता है।

\n\n

मिलिए C++ अंतर्राष्ट्रीयकरण (या बस i18n C++ — "internationalization" शब्द से, जहाँ i और n के बीच 18 अक्षर हैं) से। यह केवल "बटनों का अनुवाद" नहीं है, बल्कि डिज़ाइन का एक पूरा दर्शन है जो आपके एप्लिकेशन को किसी भी भाषा, संस्कृति और एन्कोडिंग के साथ सही ढंग से काम करने की अनुमति देता है। C++ अंतर्राष्ट्रीयकरण के बिना, एक प्रोजेक्ट स्थानीय सीमा तक ही सीमित रहने को अभिशप्त है। इसके साथ, आप वैश्विक बाजार में प्रवेश करते हैं।

\n\n

इस लेख में, हम जानेंगे कि मानक उपकरणों और शक्तिशाली लाइब्रेरीज़ की मदद से C++ स्थानीयकरण को कैसे वश में किया जाए। कोई बेकार की बात नहीं — केवल काम करने वाला कोड और वास्तविक मामले।

\n\n

अंतर्राष्ट्रीयकरण के तीन स्तंभ: Locale, Encoding और Messages

\n\n

कोड लिखने से पहले, आइए समझें कि व्यवहार में C++ अंतर्राष्ट्रीयकरण में क्या शामिल है। आपको तीन कार्यों को हल करना होगा:

\n\n
    \n
  • लोकेल (Locale): तिथियों, संख्याओं और मुद्रा को कैसे फ़ॉर्मेट करें। अमेरिका में 03/15/2024 लिखते हैं, जर्मनी में — 15.03.2024।
  • \n
  • एन्कोडिंग (Encoding): Unicode के साथ कैसे काम करें। सिरिलिक, चित्रलिपि, अरबी लिपि — यह सब बिना गड़बड़ी के संग्रहीत और प्रदर्शित होना चाहिए।
  • \n
  • संदेश (Messages): अनुवादित स्ट्रिंग्स को कैसे संग्रहीत और प्रतिस्थापित करें। "File not found" का हिंदी में अर्थ "फ़ाइल नहीं मिली" है।
  • \n
\n\n

कम से कम एक बिंदु की अनदेखी आपके एप्लिकेशन को कद्दू में बदल देगी। चलिए क्रम से चलते हैं।

\n\n

मूल स्तर: मानक लोकेल और std::locale

\n\n

C++ की मानक लाइब्रेरी std::locale क्लास प्रदान करती है। यह C++ अंतर्राष्ट्रीयकरण के लिए आपका पहला उपकरण है। यह दशमलव विभाजक और तिथि आउटपुट फ़ॉर्मेट को बदल सकता है।

\n\n

उदाहरण: संख्याओं और तिथियों का फ़ॉर्मेटिंग

\n\n
#include <iostream>\n#include <locale>\n#include <ctime>\n#include <iomanip>\n\nvoid print_date(double value) {\n    std::cout.imbue(std::locale("en_US.UTF-8"));\n    std::cout << "EN: " << value << std::endl;\n\n    std::cout.imbue(std::locale("de_DE.UTF-8"));\n    std::cout << "DE: " << value << std::endl;\n\n    std::cout.imbue(std::locale("ru_RU.UTF-8"));\n    std::cout << "RU: " << value << std::endl;\n}\n\nint main() {\n    double pi = 3.14159;\n    print_date(pi);\n\n    // तिथियों के साथ कार्य\n    std::time_t t = std::time(nullptr);\n    std::tm* tm = std::localtime(&t);\n\n    std::cout.imbue(std::locale("en_US.UTF-8"));\n    std::cout << "EN date: " << std::put_time(tm, "%x") << std::endl;\n\n    std::cout.imbue(std::locale("ru_RU.UTF-8"));\n    std::cout << "RU date: " << std::put_time(tm, "%x") << std::endl;\n\n    return 0;\n}
\n\n

महत्वपूर्ण: लोकेल के नाम (जैसे, "ru_RU.UTF-8") ऑपरेटिंग सिस्टम पर निर्भर करते हैं। Windows पर वे "Russian_Russia.1251" हो सकते हैं। यह पहली बड़ी समस्या है। सरल कार्यों के लिए std::locale के माध्यम से मानक C++ स्थानीयकरण ठीक है, लेकिन गंभीर प्रोजेक्ट्स के लिए विशेष लाइब्रेरीज़ का उपयोग करना बेहतर है।

\n\n

उन्नत स्तर: Boost.Locale — अंतर्राष्ट्रीयकरणकर्ता का सबसे अच्छा दोस्त

\n\n

यदि आप C++ में लिख रहे हैं और C++ अंतर्राष्ट्रीयकरण सही ढंग से करना चाहते हैं — तो Boost.Locale का उपयोग करें। यह लाइब्रेरी तीनों समस्याओं का समाधान करती है: यह Unicode के साथ काम कर सकती है, कुछ भी फ़ॉर्मेट कर सकती है, और .po और .mo फ़ाइलों (GNU gettext फ़ॉर्मेट) से अनुवादित स्ट्रिंग्स निकाल सकती है।

\n\n

स्थापना और कनेक्शन

\n

Boost.Locale Boost का हिस्सा है। इसे अपने CMakeLi में शामिल करें

ब्लॉग

पुस्तक अनुशंसाएँ