I am using resource files to switch languages in my web application which is build in mvc5
In index files its reading the culture value which i set.
I am calling the set culture method from layout.cshtml and calling its value with the following code.
@{
Layout = "~/Views/Shared/_Layout.cshtml";
if (!Request["dropdown"].IsEmpty())
{
Culture = UICulture = Request["dropdown"];
}
}
in index page the language is loading correctly but when from there when i go to the next page its loading the default language German but the resources reading from English resource file only.
Please help me on this..anybody
for globally setting I suggest you to add the following lines to the global.asax.cs file: (in this example the culture sets to Israel hebrew )
protected void Application_Start()
{
//The culture value determines the results of culture-dependent functions, such as the date, number, and currency (NIS symbol)
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("he-il");
//System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new System.Globalization.CultureInfo("he-il");
}
In web.config
I commented the following line inside and it worked fine for me.
<configuration>
<system.web>
<globalization culture="en-US" uiCulture="en-US" /> <!-- this only -->
</system.web>
</configuration>
You have to persist the information about current culture somewhere (I recommend cookie) and set thread culture to this cookie value (if present) - preferably in Application_BeginRequest
of your Global.asax
.
public ActionResult ChangeCulture(string value) {
Response.Cookies.Add(new HttpCookie("culture", value));
return View();
}
public class MvcApplication : HttpApplication {
protected void Application_BeginRequest() {
var cookie = Context.Request.Cookies["culture"];
if (cookie != null && !string.IsNullOrEmpty(cookie.Value)) {
var culture = new CultureInfo(cookie.Value);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
}
}