आप ASP.Net MVC एप्लिकेशन विकसित कर रहे हैं, क्या आप? अन्य उत्तर डेस्कटॉप अनुप्रयोगों के लिए विशिष्ट प्रतीत होते हैं। मुझे सामान्य चीजों पर कब्जा करने दें:
स्थान का पता लगाना
यह काफी महत्वपूर्ण है कि आपका एप्लिकेशन उपयोगकर्ता के लोकेल का सही पता लगाता है। डेस्कटॉप एप्लिकेशन में, CultureInfo.CurrentCulture पसंदीदा स्वरूपण लोकेल रखता है (वह जिसे संख्याओं, तिथियों, मुद्राओं इत्यादि को प्रारूपित करने के लिए उपयोग किया जाना चाहिए) जबकि संस्कृतिइन्फो.CurrentUICulture पसंदीदा उपयोगकर्ता इंटरफ़ेस लोकेल रखता है (स्थानीय संदेशों को प्रदर्शित करने के लिए इसका उपयोग किया जाना चाहिए) । जब तक आप कुछ फैंसी लोकेल डिटेक्शन वर्कफ़्लो को लागू नहीं करना चाहते (यानी मांग पर बदलती भाषा का समर्थन करना चाहते हैं) वेब अनुप्रयोगों के लिए, आपको दोनों संस्कृतियों को ऑटो में सेट करना चाहिए (जब तक कि AcceptLanguage हेडर से लोकेल का पता लगाने के लिए)।
तार बाहर करना
सभी तार संसाधनों से आने चाहिए, वह है रेक्स फाइलें। Winforms App में यह स्थानीय रूप से प्रापर्टी को सही पर सेट करके आसानी से प्राप्त किया जा सकता है। आपको अपने मॉडलों से मैन्युअल रूप से (दुर्भाग्य से) स्ट्रिंग्स को बाहरी करने की आवश्यकता होगी। यह अपेक्षाकृत सरल भी है। Asp.Net में आपको मैन्युअल रूप से सब कुछ बाहरी करने की आवश्यकता होगी ...
लेआउट
आपको निश्चित रूप से स्ट्रिंग विस्तार की अनुमति देने की आवश्यकता है। Winforms की दुनिया में यह TableLayoutPanel के माध्यम से प्राप्त करने योग्य है जिसका उपयोग यह सुनिश्चित करने के लिए किया जाना चाहिए कि लेआउट लंबे पाठ को समायोजित करने के लिए स्वचालित रूप से समायोजित हो जाएगा। वेब दुनिया में, आप भाग्य से थोड़ा बाहर हैं। आपको सीएसएस स्थानीयकरण तंत्र को लागू करने की आवश्यकता हो सकती है - सीएसएस परिभाषाओं को संशोधित (ओवरराइड) करने का एक तरीका। यह स्थानीयकरण के लोगों को मांग पर शैली के मुद्दों को संशोधित करने की अनुमति देगा। सुनिश्चित करें कि प्रदान किए गए पृष्ठ में प्रत्येक HTML तत्व में अद्वितीय आईडी है - यह इसे ठीक से लक्षित करने की अनुमति देगा।
संस्कृति विशिष्ट मुद्दे
ग्राफिक्स, रंगों और ध्वनियों के उपयोग से बचें जो पश्चिमी संस्कृति के लिए विशिष्ट हो सकते हैं। यदि आपको वास्तव में इसकी आवश्यकता है, तो कृपया स्थानीयकरण का साधन प्रदान करें। दिशा-संवेदी ग्राफिक्स से बचें (क्योंकि यह एक समस्या होगी जब आप अरबी या हिब्रू कहने के लिए स्थानीयकरण का प्रयास करेंगे)। इसके अलावा, यह मत समझिए कि पूरी दुनिया एक ही नंबर (यानी अरबी के लिए सच नहीं) का उपयोग कर रही है।
ToString () और Parse ()
के लिए सुनिश्चित करें हमेशा CultureInfo पारित जब ToString बुला () जब तक यह समर्थित नहीं है। इस तरह से आप अपने इरादों पर टिप्पणी कर रहे हैं। उदाहरण के लिए: यदि आप आंतरिक रूप से कुछ संख्या का उपयोग कर रहे हैं और किसी कारण से इसे स्ट्रिंग उपयोग में बदलने की आवश्यकता है:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
उन संख्याओं के लिए जो उपयोगकर्ता के उपयोग के लिए प्रदर्शित होने वाली हैं:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
Parse (), TryParse () और यहां तक कि ParseExact () पर भी यही बात लागू होती है - CultureInfo के समुचित उपयोग के बिना कुछ गंदे कीड़े पेश किए जा सकते हैं। ऐसा इसलिए है क्योंकि माइक्रोसॉफ्ट में कुछ गरीब आत्मा, अच्छे इरादों से भरे हुए ने फैसला किया कि यह एक अच्छा विचार है। ) वह / वह उपयोगकर्ता के लिए, सही प्रदर्शित करना चाहते हैं? यह पता करें कि यह हमेशा ऐसा नहीं होता है - उदाहरण के लिए डेटाबेस में अपना एप्लिकेशन संस्करण नंबर संग्रहीत करने का प्रयास करें और फिर इसे संस्करण वर्ग के उदाहरण में परिवर्तित करें। सौभाग्य।
तिथियां और समय क्षेत्र
UTC में DateTime को हमेशा स्टोर और इंस्टेंट करना सुनिश्चित करें (DateTime.UtcNow के बजाय DateTime.Now का उपयोग करें)। प्रदर्शित होने पर इसे स्थानीय प्रारूप में स्थानीय समय में परिवर्तित करें:
DateTime now = DateTime.UtcNow;
var s = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);
यदि आपको शरीर में समय के संदर्भ के साथ ईमेल भेजने की आवश्यकता है, तो समय क्षेत्र की जानकारी शामिल करना सुनिश्चित करें - दोनों यूटीसी ऑफसेट और शहरों की सूची शामिल करें:
DateTime someDate; // i.e. from database
var formattedDate = String.Format("{0} {1}",
someDate.ToLocaleTime().ToString(CultureInfo.CurrentCulture),
TimeZoneInfo.Local.DisplayName);
मिश्रित संदेश
आपको पहले ही चेतावनी दी जा चुकी है कि तार को न बदलें। इसके बजाय आप शायद String.Format () का उपयोग करेंगे जैसा कि ऊपर दिखाया गया है। हालाँकि, मुझे यह बताना होगा कि आपको यौगिक संदेशों का उपयोग कम से कम करना चाहिए। ऐसा केवल इसलिए है क्योंकि लक्ष्य व्याकरण के नियम काफी भिन्न हैं, इसलिए अनुवादकों को न केवल वाक्य को फिर से क्रम में रखने की आवश्यकता हो सकती है (यह प्लेसहोल्डर्स और स्ट्रिंग.फार्मेट ()) का उपयोग करके हल किया जाएगा, लेकिन इसके आधार पर पूरे वाक्य को अलग तरीके से अनुवाद करें प्रतिस्थापित किया जाएगा। मैं आपको कुछ उदाहरण देता हूँ:
// Multiple plural forms
English: 4 viruses found.
Polish: Znaleziono 4 wirusy. **OR** Znaleziono 5 wirusów.
// Conjugation
English: Program encountered incorrect character | Application encountered incorrect character.
Polish: Program napotkał nieznaną literę | Aplikacja napotkała nieznaną literę.
अन्य संघटन मुद्दे
सामंजस्य केवल तार तक सीमित नहीं है। नियंत्रणों को एक साथ रखने से बचें, कहते हैं:
[पाठ संख्या के साथ बॉक्स] दिनों में मुझे फिर से याद दिलाएं।
इसे कुछ इस तरह से फिर से डिज़ाइन किया जाना चाहिए: मुझे इस दिनों की संख्या में फिर से याद दिलाएं: [पाठ बॉक्स]।
चरित्र एन्कोडिंग और फोंट
हमेशा, यूनीकोड (यानी UTF-8 में) जो भी पाठ है, उसे सहेजें, स्थानांतरित करें। हार्ड-कोड फोंट न करें - स्थानीयकरण को उन्हें संशोधित करने की आवश्यकता हो सकती है और यह डिफ़ॉल्ट फ़ॉन्ट फॉल-बैक तंत्र (Winform के मामले में) को बंद कर देगा। याद रखें कि अधिकांश क्षेत्रों (अर्थात उपयोगकर्ता नाम) में "अजीब" वर्णों की अनुमति दें।
परीक्षा
आपको संभवतः तथाकथित छद्म अनुवाद को लागू करने की आवश्यकता होगी, जो कि जर्मन संस्कृति के लिए संसाधन बनाने के लिए और उपसर्ग और प्रत्यय को जोड़ने वाले अपने अंग्रेजी तार को कॉपी करने के लिए है। आप कंपाउंड स्ट्रिंग्स का आसानी से पता लगाने के लिए प्लेसहोल्डर्स को भी लपेट सकते हैं। छद्म अनुवाद का उद्देश्य स्थानीयकरणीय मुद्दों जैसे हार्ड-कोडिंग स्ट्रिंग्स, लेआउट मुद्दों और यौगिक संदेशों के अत्यधिक उपयोग का पता लगाना है।