mvc3

2012-03-15 17 views
7

में @ Html.LabelFor() से आने वाली सामग्रियों के लिए स्थानीयकरण कैसे करें, मैं बस अपना this question थोड़ा बढ़ा रहा हूं।mvc3

मेरे पास मेरे एमवीसी वेब एप्लिकेशन में मेरे App_LocalResources है (मेरे पास यह अलग डीएल में नहीं है)।

मेरे पास अलग-अलग असेंबली में मेरा मॉडल है। मॉडल में मैं 2 वर्गों Country और City है:

public class Country: MyContainer 
{ 
    public City city {get;set;} 
} 

public class City 
{ 
    public CityName {get;set;} 
} 

public class MyContainer 
{ 
    public Cid {get;set;} 
} 

तो मेरी कार्रवाई विधि में मैं बना सकते हैं और मेरी viewmodel के रूप में देश की एक वस्तु गुजरती हैं।

और ध्यान में रखते हुए मैं इस का उपयोग करें:

@Html.LabelFor(mdl=>mdl.City.CityName) 
@Html.LabelFor(mdl=>mdl.Cid) 

तो यह अच्छी तरह से काम करता है और पाठ के साथ लेबल अंग्रेजी में गाया जाता है।

लेकिन मैं इसे कैसे संशोधित करूं ताकि यह मेरे वेब अनुप्रयोग में मेरी संसाधन फ़ाइलों से टेक्स्ट पढ़ सके?

उत्तर

12

आप एक कस्टम प्रदर्शन विशेषता लिख ​​सकते हैं:

public class LocalizedDisplayNameAttribute : DisplayNameAttribute 
{ 
    public LocalizedDisplayNameAttribute(string key): base(FormatMessage(key)) 
    { 
    } 

    private static string FormatMessage(string key) 
    { 
     // TODO: fetch the corresponding string from your resource file 
     throw new NotImplementedException(); 
    } 
} 

और उसके बाद:

public class City 
{ 
    [LocalizedDisplayName("cityname")] 
    public string CityName { get; set; } 
} 

तुम भी following localization guide चेकआउट कर सकते हैं। यह नमूना विशेषता का पूर्ण कार्यान्वयन प्रदान करता है।

+1

धन्यवाद आपके उत्तर के लिए डारिन, मुझे कोड का वह टुकड़ा मिला। लेकिन अब मुद्दा यह है कि मेरा देश, शहर और माईकॉन्टेनर वर्ग विभिन्न परियोजनाओं में हैं (इसका नाम स्थान। मॉडल)। और मेरी संसाधन फ़ाइल मेरे एमवीसी 3 वेब एप्लिकेशन प्रोजेक्ट में है। स्थान। मॉडल मुझे लगता है कि कोड स्वत: जेनरेट किया गया कोड है, सीएस फाइलों में coz टिप्पणियां हैं "<ऑटो जनरेटेड> // यह कोड टेम्पलेट से जेनरेट किया गया था।"> और इसमें कुछ .tt फ़ाइल भी है इस में। तो कृपया मुझे यह जानने में सहायता करें कि मैं कहां और कैसे परिवर्तन करता हूं। क्या मुझे अपने संसाधन प्रोजेक्ट को अलग करने की ज़रूरत है ... कृपया मदद करें .. – thinkmmk

+0

@ थिंकमक, आपको अपने विचारों में स्वत: जेनरेटेड मॉडल का उपयोग नहीं करना चाहिए। मुझे लगता है कि कुछ ईएफ स्वत: उत्पन्न डोमेन मॉडल है। आपको हमेशा उन मॉडलों को परिभाषित करना चाहिए जो विशेष रूप से किसी दिए गए दृश्य के लिए डिज़ाइन किए गए वर्ग हैं। –

+0

मुझे आपका अंक मिला, लेकिन यह प्रोजेक्ट काफी जटिल और विशाल प्रतीत होता है। तो मुझे कम से कम परिवर्तन किए जाने के साथ आगे बढ़ने की आवश्यकता कैसे है। क्या मुझे एक नई कक्षा का एक नया ऑब्जेक्ट बनाने और मॉडल के रूप में पास करने की आवश्यकता है? लेकिन बात यह है कि यह एक डुप्लिकेट वर्ग बनाएगा। – thinkmmk

3

आप [Display(ResourceType = typeof(App_LocalResources), Name = "AgreeTandCs")] उपयोग कर सकते हैं जहां App_LocalResources संसाधन क्लास का नाम (अपने .resx) है और नाम स्थिर स्ट्रिंग आप संदर्भ लेना चाहते हैं का नाम है। अपने दृश्य में सामान्य रूप से लेबलफ़ोर का उपयोग करें, और यह आपके संसाधन में स्वचालित रूप से खींच जाएगा।

मेरे उदाहरण में, लेबल वैरिएबल नाम AgreeTandCs के साथ संग्रहीत स्ट्रिंग को प्रदर्शित करता है, और यदि आप इसे अंग्रेजी में देख रहे हैं तो यह पृष्ठ में "मैं इन नियमों और शर्तों से सहमत हूं" के रूप में दिखाया जाएगा।

0

आप अनुवाद स्ट्रिंग के अंदर {0}, {2} पैरामीटर के साथ अनुवाद का भी उपयोग कर सकते हैं। वह मेरा उदाहरण है Localize Compare attribute

+0

क्या आप लिंक की सामग्री को सारांशित कर सकते हैं? धन्यवाद। – rapvelopment