Я работаю над сайтом, который должен быть на английском и испанском языках. Я использовал файлы resx и адаптирую настройку культуры на основе языковых настроек браузера, как показано в коде ниже (это на global.asax.cs):
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
string culture = "en-US";
if (Request.UserLanguages != null)
{
culture = Request.UserLanguages[0];
}
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
}
Это работает! Тем не менее, пользователь также должен иметь возможность изменить язык. Для этого я создал CultureController, как показано в приведенном ниже коде, который используется сайтом по ссылке:
public class CultureController : Controller
{
public ActionResult SetLanguage(string name)
{
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
System.Web.HttpContext.Current.Session["culture"] = name;
return RedirectToAction("Index", "Home");
}
}
И у меня есть следующие ссылки на моем сайте:
<li><a href="@Url.Action("SetLanguage", "Culture", new { @name = "es-ES" })">Español</a></li>
<li><a href="@Url.Action("SetLanguage", "Culture", new { @name = "en-US" })">English</a></li>
Это не работает. Это странно, потому что, когда я отлаживаю его, метод фактически используется, и поток данных кажется правильным, он получает параметр имени и устанавливает его, но после перенаправления язык не меняется, и запросы отображаются как сбойные. У вас есть предложения, что я делаю не так?