asp.net mvc - बहुभाषी एएसपी.नेट एमवीसी वेब अनुप्रयोगों के लिए CurrentCulture सेट करने के लिए सबसे अच्छी जगह




asp.net-mvc asp.net-mvc-3 (3)

बहुभाषी एएसपी.नेट एमवीसी 3 वेब अनुप्रयोग के लिए, मैं Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentCulture और Thread.CurrentThread.CurrentUICulture निर्धारण कर रहा हूं। Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentCulture Thread.CurrentThread.CurrentUICulture कंट्रोलर फैक्ट्री पर निम्नानुसार है:

public class MyControllerFactory : DefaultControllerFactory {

    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) {

        //Get the {language} parameter in the RouteData
        string UILanguage;
        if (requestContext.RouteData.Values["language"] == null)
            UILanguage = "tr";
        else
            UILanguage = requestContext.RouteData.Values["language"].ToString();

        //Get the culture info of the language code
        CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;

        return base.GetControllerInstance(requestContext, controllerType);
    }

}

उपर्युक्त कोड अब लगभग एक वर्ष पुराना है! तो, मैं सुझावों के लिए खोलता हूं।

और मैं इसे ग्लोबल.एक्सएक्स फ़ाइल पर पंजीकृत करता हूं जैसे:

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

यह अच्छा काम कर रहा है लेकिन मुझे यकीन नहीं है कि यह इस तरह की कार्रवाई करने के लिए सबसे अच्छा अभ्यास और सर्वोत्तम जगह है या नहीं।

मैंने ControllerFactory ActionFilterAttribute की मुख्य भूमिका में खोला नहीं है और मैं इसे ActionFilterAttribute विरुद्ध तुलना करने में असमर्थ हूं।

इस प्रकार की कार्रवाई करने के लिए सबसे अच्छी जगह के बारे में आप क्या सोचते हैं?


इसे रखने के लिए एक वैकल्पिक स्थान उस कोड को कस्टम एक्शनफिल्टर की ऑनएक्शन एक्सेलिंग विधि में रखना होगा, जिसे ग्लोबल फ़िल्टर संग्रह में पंजीकृत किया जा सकता है:

http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx


मुझे पता है कि एक anser पहले से ही चुना गया है। हमारे द्वारा उपयोग किए जाने वाले विकल्प को एप्लिकेशन के लिए OnBeginRequest ईवेंट में थ्रेड वर्तमान संस्कृति को प्रारंभ करना था। यह सुनिश्चित करता है कि प्रत्येक अनुरोध के साथ संस्कृति की खोज की जाए

public void OnBeginRequest(object sender, EventArgs e)
{
   var culture = YourMethodForDiscoveringCulutreUsingCookie();
   System.Threading.Thread.CurrentThread.CurrentCulture = culture;
   System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
}

OnActionExecuting को ओवरराइड करने के बजाय आप ओवरराइड कर सकते हैं इस तरह Initialize करें

protected override void Initialize(RequestContext requestContext)
{
        string culture = null;
        var request = requestContext.HttpContext.Request;
        string cultureName = null;

        // Attempt to read the culture cookie from Request
        HttpCookie cultureCookie = request.Cookies["_culture"];
        if (cultureCookie != null)
            cultureName = cultureCookie.Value;
        else
            cultureName = request.UserLanguages[0]; // obtain it from HTTP header AcceptLanguages

        // Validate culture name
        cultureName = CultureHelper.GetValidCulture(cultureName); // This is safe

        if (request.QueryString.AllKeys.Contains("culture"))
        {
            culture = request.QueryString["culture"];
        }
        else
        {
            culture = cultureName;
        }

        Uitlity.CurrentUICulture = culture;

        base.Initialize(requestContext);
    }






controller-factory