2010-07-28 13 views
6

में जावास्क्रिप्ट फ़ाइल में स्थानीय संदेशों का उपयोग कैसे करें asp.net में जावास्क्रिप्ट फ़ाइल में स्थानीय संदेशों का उपयोग कैसे करें।एएसपीनेट

मेरे पास जावास्क्रिप्ट फ़ाइल (वैश्विक-स्क्रिप्ट.जेएस) है जिसमें मेरी सभी स्क्रिप्ट शामिल हैं। मैं एक और फ़ाइल (message.js) का उपयोग करता हूं जिसमें सभी स्थिर त्रुटि संदेश हैं (उदा: "क्या आप वाकई हटाना चाहते हैं?") ताकि इसे स्थानीयकृत किया जा सके।

क्या यह संभव है कि यह मुख्य स्क्रिप्ट फ़ाइल अन्य फ़ाइल (message.js) के बिना स्थानीयकृत करे, ताकि मैं एक स्क्रिप्ट संदर्भ को हटा सकूं?

उत्तर

5

एएसपी.नेट स्क्रिप्ट मैनेजर नियंत्रण में आपकी स्क्रिप्ट के लिए localization प्रदान करने की क्षमता है।

अपने स्क्रिप्ट अपने विधानसभा में अंतर्निहित है, तोas a resource using the WebResourceAttribute तो you can use the ScriptResourceAttribute ScriptManager पता है कि तुम कहीं है कि आप किसी भी समय अपनी स्क्रिप्ट परोसा जाता है परोसा चाहते एक .resx फ़ाइल में संग्रहीत कुछ स्थानीय तार है कि यह बताने के लिए। इन तारों को पृष्ठ में JSON ऑब्जेक्ट के रूप में इंजेक्शन दिया जाता है और फिर आपकी मुख्य स्क्रिप्ट में आप शाब्दिक तारों के बजाय JSON ऑब्जेक्ट का आउटपुट संदर्भ देते हैं।

उदाहरण के लिए, अगर आप इस तरह अपनी स्क्रिप्ट एम्बेड होगा:

[assembly: System.Web.UI.WebResource("ProjectNamespace.MyScript.js", "application/x-javascript")] 
[assembly: System.Web.UI.ScriptResource("ProjectNamespace.MyScript.js", "ProjectNamespace.MyScriptResources", "Messages")] 

"ProjectNamespace.MyScript.js" एम्बेडेड संसाधन अपनी स्क्रिप्ट है कि करने के लिए पूरा पथ है। ScriptResourceAttribute में, दूसरा पैरामीटर एम्बेडेड .resx फ़ाइल (शून्य से .resx एक्सटेंशन) का पूरा पथ है जिसमें सभी स्थानीय संदेश शामिल हैं। आप किसी अन्य .resx की तरह व्यवहार करते हैं, इसलिए आपके पास डिफ़ॉल्ट संस्कृति के लिए MyScriptResources.resx होगा, फिर मैक्सिकन स्पैनिश ओवरराइड के लिए MyScriptResources.es-MX.resx आदि। ScriptResourceAttribute में अंतिम पैरामीटर JSON का नाम है ऑब्जेक्ट जो उत्पन्न होगा।

अपनी स्क्रिप्ट में, आप JSON ऑब्जेक्ट संदर्भ:

function DoSomething() 
{ 
    alert(Messages.ErrorMessage); 
} 

ऊपर स्निपेट में, "त्रुटिसंदेश" .resx फ़ाइल में स्ट्रिंग संसाधनों में से एक का नाम है।

यदि आप स्क्रिप्ट एम्बेड करते हैं, तो इसे एक टैग का उपयोग करके स्क्रिप्ट मैनेजर से संदर्भित करें जो एक असेंबली और नाम निर्दिष्ट करता है।

वैकल्पिक रूप से, आप "MyScript.js," "MyScript.es-MX.js," "MyScript.en-UK.js," आदि की तरह स्क्रिप्ट की पूरी तरह से स्थानीय प्रतियां, रख सकते हैं जहां स्थानीय तर्क और संदेश स्क्रिप्ट में सही हार्डकोड किए गए हैं।

यदि आप यह स्थानीयकरण विधि करते हैं, तो इसे स्क्रिप्ट मैनेजर से संदर्भित करें जो पथ निर्दिष्ट करता है।

There is a really nice overview and links to detailed walkthroughs on this with code examples on MSDN.

ध्यान दें कि अगर आप ASP.NET MVC का उपयोग कर रहे, ScriptManager नियंत्रण वास्तव में इसके साथ काम नहीं करता। उस स्थिति में, आप jQuery globalization plugin या संभावित a custom ScriptManager replacement for use in MVC जैसे एक अलग समाधान को देखना चाहेंगे।

+0

मैं भी उसी समस्या के साथ काम कर रहा था। लेकिन मेरे मामले में, मैं एक एम्बेडेड संसाधन के रूप में जेएस फ़ाइल उत्पन्न करता हूं और मैं क्लाइंटस्क्रिप्ट मैनेजर का उपयोग करता हूं। और घटना संसाधन परियोजना और जेएसक्रिप्ट शामिल परियोजना अलग हैं। इसलिए, मुझे अपनी जेएस फ़ाइल से सही "संदेश" ऑब्जेक्ट नहीं मिल रहा है। कोई उपाय? –

1

मेरे पास एक समाधान है जिसे मैंने हल करने के लिए उपयोग किया है। यह आपको अपने जेएस फाइलों के भीतर एएसपीनेट वेब एप्लिकेशन में आयोजित अपने वैश्विक संसाधनों का उपयोग करने की अनुमति देता है। अनिवार्य रूप से यह आपके जेएस फाइलों की सेवा के लिए GetLocalisedScript.aspx पृष्ठ का उपयोग करता है।

protected void Page_Load(object sender, EventArgs e) 
    { 
     string retval = ""; 

     string file = Request["js"].ToString(); 

     using(StreamReader sr = new StreamReader(Server.MapPath(string.Format("~\\scripts\\{0}.js",file)))) 
     { 
      retval = sr.ReadToEnd(); 
      sr.Close(); 
     } 

     Regex rx = new Regex("##LOCALISE(.+?)##",RegexOptions.Singleline); 
     MatchCollection mc = rx.Matches(retval,0); 
     foreach (Match m in mc) 
     { 
      string strResxKey = m.Value.Replace("##LOCALISE(", "").Replace(")##", ""); 
      string val = GetGlobalResourceObject("myResource", strResxKey).ToString(); 
      retval = retval.Replace(m.Value, val); 
     } 
     //Just write out the XML data 
     Response.ContentType = "text/xml"; 
     //NOTE THAT THIS PAGE DOESN'T CONTAIN ANY HTML TAG, WHATSOEVER 
     Response.Output.Write(retval); 
    } 

मार्क अप

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetLocalisedScript.aspx.cs" Inherits="TestMulti.GetLocalisedScript" %> 

अपने पृष्ठ में तरह निम्नलिखित कुछ के साथ मानक src की जगह:

<script src="GetLocalisedScript.aspx?js=myJS" type="text/jscript" ></script> 

myJS है कहाँ

पेज इस प्रकार है आपके जेएस फ़ाइल का नाम।

फिर ## LOCALIZE() ## टैग शामिल करने के लिए अपनी जेएस फ़ाइल को संशोधित करें।

function alert2(val) { 
alert("##LOCALISE(Yes)##"); 
} 

GetLocalisedScript.aspx पृष्ठ संसाधन लुकअप के साथ सभी टैग को प्रतिस्थापित करेगा।

उम्मीद है कि यह किसी की मदद करेगा।