asp.net - एएसपी.नेट एमवीसी 4 में ऐप्शन- ग्लोबल रिसोसेस का प्रयोग करके स्थानीयकरण




asp.net-mvc-4 localization (2)

मैं दो चीजों को पूरा करने की कोशिश कर रहा हूं:

  1. "FieldMustBeDate" और "FieldMustBeNumeric" के लिए "अंतर्निहित" त्रुटि संदेशों को स्थानीयकरण करें
  2. उदाहरण के लिए, "प्रॉपर्टी वैल्यू रेडेरियर्ड" में आपको जो अन्य त्रुटि संदेश मिलेंगे, उनका स्थानीयकरण करें

समस्या 1 और MVC 4 के लिए http://forums.asp.net/t/1862672.aspx/1 का उपयोग करके समस्या के लिए DefaultModelBinder.ResourceClassKey को अनदेखा करता है I ने स्थानीय रूप से दोनों काम करने में कामयाब रहा है

हालांकि जैसे ही मैं किसी वेबसाइट पर प्रकाशित करता हूं, "अंतर्निहित" त्रुटि संदेश डिफ़ॉल्ट रूप से वापस अंग्रेज़ी होते हैं जबकि अन्य त्रुटि संदेश स्थानीयकृत रहते हैं

मैंने कई स्थानों को पढ़ा है जो App_GlobalResources का उपयोग कर से बचा जाना चाहिए, हालांकि मैं इस का उपयोग किए बिना 1 समस्या को पूरा करने में असमर्थ हूं।

मैंने "। WebResources.resx" नाम के साथ एक .resx फाइल बनाई है, "एंबेडेड" के लिए बिल्ड एक्शन सेट करें, आउटपुट डायरेक्टरी को "नो कॉपी करें" पर कॉपी करें, "PublicResXFileCodeGenerator" पर कस्टम टूल सेट करें और कस्टम सेट करें टूल नेमस्पेस टू "संसाधन" प्रोजेक्ट ही केवल उन फ़ाइलों को प्रकाशित करना है जो आवश्यक हैं

मेरा Global.asax.cs में निम्न (प्रासंगिक) कोड है:

  ClientDataTypeModelValidatorProvider.ResourceClassKey = "WebResources";  
  DataAnnotationsModelValidatorProvider.RegisterAdapter(
  typeof(RequiredAttribute),
  typeof(MyRequiredAttributeAdapter));

और वर्ग MyRequiredAttributeAdapter में निम्न कोड होता है:

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    )
        : base(metadata, context, attribute)
    {
        if (attribute.ErrorMessageResourceType == null)
        {
            attribute.ErrorMessageResourceType = typeof(Resources.WebResources);
        }
        if (attribute.ErrorMessageResourceName == null)
        {
            attribute.ErrorMessageResourceName = "PropertyValueRequired";
        }
    }
}

यह स्थानीय रूप से काम कर रहा है लेकिन किसी को भी इस बारे में कोई भी विचार है कि यह प्रकाशित होने के बाद काम करने के लिए "निर्मित" संदेशों को कैसे प्राप्त किया जाए?

आपके सहयोग के लिए धन्यवाद!

सबसे अच्छा संबंध है, एंड्रियास


मुझे ये पता चल गया कि यह एक बाहर है I यदि आप उपर्युक्त करने का प्रयास कर रहे हैं, तो आपको स्थानीय त्रुटि संदेशों को अलग करना होगा।

अन्य त्रुटि संदेश Fx "PropertyValueRequired" के लिए एक * .resx फ़ाइल बनाएँ और "एंबेडेड" करने के लिए बिल्ड एक्शन सेट करें, "कोई कॉपी नहीं करें" के लिए आउटपुट निर्देशिका में कॉपी करें, "PublicResXFileCodeGenerator" पर कस्टम उपकरण सेट करें और कस्टम सेट करें टूल नेमस्पेस टू "संसाधन"

मेरे मामले में मैंने LocalDanish.resx (अभी भी App_GlobalResources फ़ोल्डर में) फ़ाइल में "PropertyValueRequired" स्थानांतरित कर दिया है और मेरे "MyRequiredAttributeAdapter" में लाइन को बदल दिया है

attribute.ErrorMessageResourceType = typeof(Resources.WebResources);

सेवा मेरे

attribute.ErrorMessageResourceType = typeof(Resources.LocalDanish);

काम करने के लिए "निर्मित" त्रुटि संदेश प्राप्त करने के लिए, आपको दो * .resx फाइलें बनाना चाहिए। मैंने WebResources.resx और WebResources.da.resx बनाया है। कुछ भी न बदलें, डिफ़ॉल्ट रूप से उन पर सेटिंग्स को छोड़ दें ("सामग्री" को क्रिया बनाएं, आदि)। मुझे लगता है कि वेबसाइट स्वत: * .da.resx फ़ाइलों के लिए मेरे मामले में दिखती है क्योंकि मैंने अपने वेबकॉन्फ़िग में वैश्वीकरण सेट किया है:

<globalization uiCulture="da-DK" culture="da-DK"/>

उम्मीद है कि यह किसी को मदद करता है।

सबसे अच्छा संबंध है, एंड्रियास


मैंने मूल पोस्ट में कुछ मामूली बदलाव किए हैं, जो मेरे मामले में सभी संदेशों का अनुवाद नहीं किया। (स्ट्रिंग लंबाई और अमान्य संपत्ति मूल्य)

उपरोक्त कदमों का पालन करें, * .resx फ़ाइलों को बनाने के लिए, उनके गुण सेट करें, और फिर लोकेल को web.config में सेट करें, जैसा कि एंड्रियास द्वारा वर्णित है।

फिर कुछ एडेप्टर बनाएं:

// As described in original post:
public class LocalizedRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public LocalizedRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    )
        : base(metadata, context, attribute)
    {
        if (attribute.ErrorMessageResourceType == null)
            attribute.ErrorMessageResourceType = typeof(Resources.Resources);
        if (attribute.ErrorMessageResourceName == null)
            attribute.ErrorMessageResourceName = "PropertyValueRequired";
    }
}

// Addition to original post:
public class LocalizedStringLengthAttributeAdapter : StringLengthAttributeAdapter
{
    public LocalizedStringLengthAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        StringLengthAttribute attribute
    )
        : base(metadata, context, attribute)
    {
        if (attribute.ErrorMessageResourceType == null)
            attribute.ErrorMessageResourceType = typeof(Resources.Resources);
        if (attribute.ErrorMessageResourceName == null)
            attribute.ErrorMessageResourceName = "StringLengthAttribute_ValidationError";
    }
}

और ग्लोबल में.एक्सैक्स। Cx:

// Addition to original post: (Used for "PropertyValueInvalid")
DefaultModelBinder.ResourceClassKey = "Resources";

// As described in original post:
ClientDataTypeModelValidatorProvider.ResourceClassKey = "Resources";
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredAttribute), typeof(LocalizedRequiredAttributeAdapter));
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(StringLengthAttribute), typeof(LocalizedStringLengthAttributeAdapter));




app-globalresources