asp.net mvc - बहुभाषी एएसपी.नेट एमवीसी वेब अनुप्रयोगों के लिए CurrentCulture सेट करने के लिए सबसे अच्छी जगह
asp.net-mvc asp.net-mvc-3 (3)
बहुभाषी एएसपी.नेट एमवीसी 3 वेब अनुप्रयोग के लिए, मैं Thread.CurrentThread.CurrentCulture
। Thread.CurrentThread.CurrentCulture
और Thread.CurrentThread.CurrentUICulture
निर्धारण कर रहा हूं। Thread.CurrentThread.CurrentCulture
। Thread.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);
}