आपके C# एप्लिकेशन को अंतर्राष्ट्रीयकरण की आवश्यकता क्यों है?
\nकल्पना करें: आपने नोट्स प्रबंधित करने के लिए एक शानदार सेवा लिखी है। सब कुछ काम करता है, इंटरफ़ेस साफ-सुथरा है, उपयोगकर्ता संतुष्ट हैं। लेकिन केवल रूसी भाषी। जैसे ही आप अमेरिका या जर्मनी के बाज़ार में जाते हैं — और प्रोजेक्ट रुक जाता है। कोड खराब होने के कारण नहीं, बल्कि इसलिए कि "Сохранить" बटन "Save" में नहीं बदलता, और "Ошибка ввода" संदेश विदेशी को डराता है।
\nयही स्थानीयकरण की समस्या है। .NET दुनिया में इसके समाधान को C# अंतर्राष्ट्रीयकरण (या i18n — "internationalization" शब्द से, जहाँ 18 i और n के बीच के अक्षरों की संख्या है) कहा जाता है। यदि आप C# और .NET प्लेटफ़ॉर्म (Core, 5/6/7/8/9) का उपयोग करते हैं, तो आपके पास पहले से ही एप्लिकेशन को बहुभाषी बनाने के लिए सबसे शक्तिशाली टूलकिट मौजूद है। इस लेख में हम इसे व्यवहार में समझेंगे: सरल संसाधनों से लेकर "फ्लाई पर" भाषा बदलने तक।
\n\nमूल बातें: संस्कृति और तटस्थ भाषा क्या है?
\nकोड लिखने से पहले, शब्दों को समझ लेते हैं। .NET में स्थानीयकरण के लिए System.Globalization नाम स्थान के दो मुख्य वर्ग जिम्मेदार हैं:
- \n
- CultureInfo — एक ऑब्जेक्ट जो भाषा और क्षेत्रीय मानकों का वर्णन करता है (उदाहरण के लिए,
ru-RU,en-US,de-DE)। \n - CurrentUICulture — उपयोगकर्ता इंटरफ़ेस की वर्तमान संस्कृति। अनुवाद खोजते समय सिस्टम इसी पर निर्भर करता है। \n
- CurrentCulture — तिथियों, संख्याओं, मुद्रा का प्रारूप। इसे भी बदला जा सकता है, लेकिन अनुवाद के लिए पहला महत्वपूर्ण है। \n
C# एप्लिकेशन में हम आमतौर पर संसाधन फ़ाइलों (.resx) का उपयोग करते हैं। ये XML फ़ाइलें हैं जहाँ किसी विशिष्ट संस्कृति से जुड़े स्ट्रिंग, चित्र और अन्य डेटा संग्रहीत होते हैं। उदाहरण के लिए:
\n- \n
Messages.resx— डिफ़ॉल्ट स्ट्रिंग (आमतौर पर अंग्रेज़ी)। \n Messages.ru.resx— रूसी अनुवाद। \n Messages.de.resx— जर्मन अनुवाद। \n
जब एप्लिकेशन चलता है, .NET स्वचालित रूप से वर्तमान UICulture से मेल खाने वाली फ़ाइल का चयन करता है। यदि सटीक मिलान नहीं है — तो तटस्थ (आधार) फ़ाइल का उपयोग करता है।
Visual Studio में पहली संसाधन फ़ाइल बनाना
\nमान लीजिए, हमारे पास एक कंसोल एप्लिकेशन या ASP.NET Core प्रोजेक्ट है। हम Resources फ़ोल्डर जोड़ते हैं और उसके अंदर Strings.resx फ़ाइल बनाते हैं। इसे भरें:
नाम | मान\n-------------|-------------------\nWelcomeMsg | हमारे ऐप में आपका स्वागत है!\nGoodbyeMsg | अलविदा!\n\nअब Strings.ru.resx बनाएँ:
नाम | मान\n-------------|-------------------\nWelcomeMsg | Добро пожаловать в наше приложение!\nGoodbyeMsg | До свидания!\n\nध्यान दें: कुंजियों के नाम समान होने चाहिए। सहेजने के बाद Visual Studio स्वचालित रूप से Strings क्लास उत्पन्न करेगा जिसमें स्थिर गुणों के माध्यम से स्ट्रिंग तक पहुँच होगी।
प्रोग्रामेटिक रूप से भाषा बदलना
\nC# अंतर्राष्ट्रीयकरण को काम करने के लिए, एप्लिकेशन निष्पादन की शुरुआत में (उदाहरण के लिए, Main या Startup में) वांछित संस्कृति सेट करनी होगी। यह इस प्रकार दिखता है:
using System.Globalization;\nusing System.Threading;\n\n// इंटरफ़ेस की रूसी भाषा सेट करें\nCultureInfo culture = new CultureInfo("ru-RU");\nThread.CurrentThread.CurrentUICulture = culture;\nThread.CurrentThread.CurrentCulture = culture; // तिथि/संख्या प्रारूपों के लिए\n\n// अब संसाधनों तक पहुँचें\nConsole.WriteLine(Strings.WelcomeMsg); // आउटपुट: Добро пожаловать в наше приложение!\n\nयदि आप उपयोगकर्ता को "फ्लाई पर" (बिना पुनरारंभ किए) भाषा बदलने की क्षमता देना चाहते हैं, तो संस्कृति बदलने के बाद इन पंक्तियों को फिर से कॉल करें। ASP.NET Core में इसके लिए middleware का उपयोग किया जाता है:
\napp.UseRequestLocalization(new RequestLocalizationOptions\n{\n DefaultRequestCulture = new RequestCulture("en-US")