2011-06-24 12 views
17

हम कई भाषाओं/संस्कृतियों में इंट्रानेट उपयोग के लिए बड़े एएसपी.NET अनुप्रयोगों का निर्माण कर रहे हैं। हम स्थानीयकरण ग्रंथों के लिए सर्वर पक्ष पर RESX फ़ाइलों के साथ वैश्वीकरण का उपयोग करते हैं और GetResourceText का उपयोग करते हैं।जावास्क्रिप्ट में रेक्स से ग्रंथों का उपयोग कैसे किया जाए?

हाल ही में हम JQuery के साथ अधिक से अधिक ग्राहक पक्ष तर्क कर रहे हैं।

मैं जावास्क्रिप्ट में उपयोग करने के लिए RESX ग्रंथों को कैसे प्राप्त करूं?

  • उदा। सत्यापन, गतिशील संदेश इत्यादि के लिए उपयोग किए गए ग्रंथ

हमारी सभी जावास्क्रिप्ट .JS फ़ाइलों में हैं, हम एएसपीएक्स पेज और जावास्क्रिप्ट ब्लॉक में HTML को मिश्रित नहीं करना चाहते हैं।

आपकी मदद के लिए धन्यवाद।

+0

माइक्रोसॉफ्ट एएसपी.NET AJAX ढांचे के हिस्से के रूप में एक क्लाइंट-साइड स्थानीयकरण प्रदान करता है। आपको http://msdn.microsoft.com/en-us/magazine/cc135974.aspx और http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp- पर एक नज़र डालना चाहिए नेट-AJAX- स्थानीयकरण –

उत्तर

6

दुर्भाग्यवश, बाहरी जेएस फ़ाइल में सर्वर साइड कोड सर्वर द्वारा संसाधित नहीं किया जा रहा है। इस का उपयोग

<%-- This goes into your page --%> 
<input type="hidden" id="translatedField" name="translatedField" value="<%=Resources.Resources.translatedText %>" /> 

और: - हालांकि मैं एक समाधान है जहां आप पृष्ठ पर छिपे हुए क्षेत्रों में अपने अनूदित मूल्यों को निर्धारित कर सकते हैं देखा है इस तरह से अपने जावास्क्रिप्ट में मूल्यों को पढ़ने के लिए सक्षम हो जाएगा

उदाहरण के लिए। अपने जावास्क्रिप्ट फ़ाइल के अंदर:

// This is the js file 
$(document).ready(function() { 
    alert($("#translatedField").attr("value")); 
}); 

आप मानों को अलग और अभी भी अपने बाहरी जे एस फ़ाइल में यह देखने के लिए सक्षम हो जाएगा।

एक और कामकाज भी है जो एक .aspx फ़ाइल बनाता है जो केवल HTML के बजाय जावास्क्रिप्ट आउटपुट करता है। मानव पठनीय तार से

Using server side method in an external JavaScript file

+0

आपके उत्तर के लिए धन्यवाद! मैं जावास्क्रिप्ट में एक व्यक्तिगत पाठ को न सिर्फ एक और सामान्य तरीके से सोच रहा था। आपके द्वारा डाला गया लिंक दिलचस्प है, मैंने इस विधि को भी आजमाया है, लेकिन मेरे समूह में हम इसे जावास्क्रिप्ट "फ़ाइल" बनाने के लिए एएसपीएक्स पेज का उपयोग करने के लिए "गंदे" मानते हैं। मैं अभी तक एक और विधि की उम्मीद कर रहा हूं ... :-) बहुत धन्यवाद! – PeterFromCologne

+0

यह भयानक है। भयानक से परे की तरह। इनमें से सैकड़ों वाले पेज पर विचार करें। डोम के साथ क्या होगा? निश्चित रूप से हम आधुनिक ब्राउज़र द्वारा खराब हो गए हैं जो बहुत जल्दी प्रस्तुत करते हैं। लेकिन कई उद्देश्यों के लिए, यह बहुत बुरा है। आपके द्वारा पोस्ट किया गया लिंक बेहतर ढेर है। – zaitsman

+0

यदि आपके पास अनुवाद करने के लिए केवल कुछ चीजें हैं, और यह सब कुछ होने वाला है, तो यह बहुत संक्षिप्त और कुशल और साथ ही बनाए रखने में आसान है। यदि चीजें कुछ हद तक अनुवादित वस्तुओं से आगे बढ़ने लगती हैं, तो मैं सहमत हूं, इसे वेब कॉन्फ़िगरेशन विचार की तरह कुछ स्थानांतरित करने की आवश्यकता है। – ouflak

2

हमेशा अलग कार्यक्षमता: नीचे दिए गए लिंक की जाँच करें।

यदि आप jQuery-plugins बना रहे हैं तो आप अपने विभिन्न jQuery फ़ंक्शंस को कॉल करते समय स्थानीयकृत स्ट्रिंग्स को पैरामीटर के रूप में पास करने में सक्षम होना चाहिए। सरणी पेज विभिन्न jQuery प्लगइन या बुला पर जावास्क्रिप्ट सीधे आप प्रारूप /scripts/localization/strings.js?ci=en-US में बाहरी संसाधन से लोड कर सकते हैं और रजिस्टर web.config में एक Generic ASP.Net Handler कि scripts/localization/strings.js

का जवाब होगा DatePicker नियंत्रण है इनलाइन के रूप में परिभाषित किया जा सकता है jQuery डेटपिक नियंत्रण के लिए टेक्स्ट को स्थानीयकृत करने का एक अच्छा उदाहरण - this js file गतिशील रूप से संसाधन फ़ाइलों (resx) से बनाया गया है और जब किसी पृष्ठ पर शामिल किया गया है तो यह सुनिश्चित करेगा कि कैलेंडर नियंत्रण में डेनिश टेक्स्ट होगा।

0

आप ASP.NET उपयोग करने के लिए अपने मुख्य जावास्क्रिप्ट उत्पन्न करने के लिए नहीं करना चाहते हैं, यहाँ दो अन्य विकल्प हैं:

  1. उपयोग ASP.NET कि चर-टू-स्ट्रिंग एक स्क्रिप्ट फ़ाइल उत्पन्न करने के लिए असाइनमेंट, जैसे var mystring = 'my value';। तब आपकी मुख्य स्क्रिप्ट एम्बेडेड मानों के बजाय वैरिएबल नामों के साथ स्थानीयकृत टेक्स्ट को संदर्भित करेगी।यदि यह अभी भी आपके लिए "गंदे" है, तो आप सीधे .aspx की बजाय HttpHandler का उपयोग करके चर के असाइनमेंट के बजाय स्ट्रिंग को JSON के रूप में एन्कोड कर सकते हैं।

  2. क्या आपका जावास्क्रिप्ट कोड सर्वर से स्थानीयकृत स्ट्रिंग्स की सरणी या सूची पुनर्प्राप्त करने के लिए अजाक्स कॉल जारी करता है। कॉल का सर्वर-साइड भाग आपकी resx फ़ाइलों से टेक्स्ट पुनर्प्राप्त करेगा।

2

एक HttpHandler (.ashx फ़ाइल) बनाएं, और अपने टेक्स्ट संसाधन स्ट्रिंग के साथ JSON वापस करें। इस तरह

<script src="Resx.ashx?lang=en-US" /> 

<button class="LogoutButtonResourceId OtherButtonClasses">(generic logout text)</button> 
<a href="#"><span class="SomeLinkTextResourceId OtherClasses"> 
    (generic link text) 
</span></a> 

और लागू ग्रंथों:

तुम भी ग्लोबल नेम स्पेस को "प्रकाशित" हो सकता है यह, यानी

Response.Write("window.Resources="); 
Response.Write((new JavaScriptSerializer()).Serialize(strings)); 

की स्थापना HTML की तरह

$(document).ready(function() { 
    for(var resId in Resources){ 
    $("."+resId).html(Resources[resId]); 
    } 
}); 
0

आप शामिल हैं ASP.NET वेबमाइड्स के साथ संयोजन में $.ajax का उपयोग करने पर विचार किया जाता है? यह समझने के बिना कि आपकी जावास्क्रिप्ट/jQuery संसाधनों का उपभोग/प्रक्रिया कैसे करेगी, इस समस्या के लिए एक और ठोस समाधान का सुझाव देना मुश्किल है। मुझे लगता है कि वे तार्किक समूहों (या हो सकता है) में व्यवस्थित हैं जहां आप एक ही पृष्ठ पर मौजूद कई संसाधन तारों को वापस कर सकते हैं।

मान लीजिए कि आप एक बहुत ही सरल सी # कक्षा लिख ​​सकते हैं - या Dictionary<string, string> का उपयोग करें - अपने एएसपी.नेट वेबमेड से डेटा वापस करने के लिए। परिणाम कुछ ऐसा दिखाई देंगे:

[WebMethod] 
public Dictionary<string, string> GetPageResources(string currentPage) 
{ 
    // ... Organizational stuff goes here. 
} 

मैं हमेशा अपने AJAX कॉल को अलग .js फ़ाइलों/ऑब्जेक्ट्स में अलग करता हूं; कि ऐसा दिखाई देगा:

function GetPageResources (page, callback) 
    $.ajax({ // Setup the AJAX call to your WebMethod 
     data: "{ 'currentPage':'" + page + "' }", 
     url: /Ajax/Resources.asmx/GetPageResources, // Or similar. 
     success: function (result) { // To be replaced with .done in jQuery 1.8 
      callback(result.d); 
     } 
    }); 

फिर, .js पेज पर निष्पादित में, आप का उपभोग करने के लिए कि डेटा की तरह सक्षम होना चाहिए:

// Whatever first executes when you load a page and its JS files 
// -- I assume that you aren't using something like $(document).ready(function() {}); 
GetPageResources(document.location, SetPageResources); 

function SetPageResources(resources) { 
    for (currentResource in resources) { 
     $("#" + currentResource.Key).html(currentResource.Value); 
    } 
} 
0

मैं जानता हूँ कि यह करने के लिए देर हो चुकी है लेकिन मेरे अनुभव साझा करना चाहते हैं इस कार्य में)

मैं अजाक्समिन का उपयोग करता हूं। यह निर्माण घटना पर जेएस फ़ाइल में resx कुंजी मान डाल सकते हैं। यह सामान्य तरीका नहीं है लेकिन यह अनियंत्रित स्क्रिप्ट ब्लॉक के बिना एचटीएमएल रखता है और यदि आपके पास है तो खनन प्रक्रिया के दौरान किया जा सकता है।

यह इस तरह काम करता है:

ajaxmin.exe test.js -RES:Strings resource.resx -o test.min.js 

इसके अलावा, आप आप कई अगर ech स्थान के लिए भी ऐसा ही करने की जरूरत है। सिंटेक्स js में संसाधन कुंजियों (और यह भी सीएसएस) लिखने के लिए यहाँ लिखा है:

Js localization

Css localization

0

कैसे एक जावास्क्रिप्ट नियंत्रण आरंभीकरण के हिस्से के रूप में यह इंजेक्शन लगाने के बारे में? मैं जो करता हूं वह निम्नानुसार है:

मेरे पास एक स्वयं निहित जावास्क्रिप्ट नियंत्रण है - इसे CRMControl कहते हैं, जिसमें setupCRMControl नामक एक init विधि है, जिसके लिए मैं एक सेटिंग ऑब्जेक्ट पास करता हूं।

CRMControl.setupCRMControl({ 
numOfCRMs: 3, 
maxNumOfItems: 10, 

// then i pass a resources object with the strings i need inside 
Resources: { 
    Cancel: '@Resources.Cancel', 
    Done: '@Resources.Done', 
    Title: '@Resources.Title' 
} 
}); 

फिर, इस जावास्क्रिप्ट नियंत्रण के अंदर:: जब मैं इसे प्रारंभ, मैं एक वस्तु सभी संसाधनों मैं जावास्क्रिप्ट के अंदर की जरूरत है इस प्रकार युक्त पारित

var crmSettings = {}; 
this.setupCRMControl(settings) { 
    crmSettings = settings; 
}; 

और जब भी मैं एक संसाधन दिखाना चाहते हैं, मैं कहता हूँ (उदाहरण के लिए, कह रही है 'पूर्ण' एक सूचना दिखाएंगे):

alert(crmSettings.Resources.Done); 

आप इसे "आर" कॉल कर सकते हैं यह कम या कुछ और करने के लिए है, लेकिन यह मेरा तरीका है। हो सकता है कि यह काम न करे यदि आपके पास तारों का पूरा समूह है, लेकिन प्रबंधनीय मामलों के लिए, यह काम कर सकता है।

संबंधित मुद्दे