【发布时间】:2019-05-12 16:19:09
【问题描述】:
我处理多语言网站。
我有一个部分观点,我的方法是为我的网站设置特定语言。
<form asp-controller="Language" asp-action="SetLanguage" method="post" class="form-horizontal">
<label>Language:</label>
<select name="culture">
<option value="hu">Magyar</option>
<option value="eng">English</option>
</select>
<button type="submit" class="btn btn-link navbar-btn navbar-link">Change</button>
</form>
当我调试时,我可以检查文化是否设置正确,但是当我的RedirectToPage(...) 调用时,我再次调试并且我的CurrentThread.CurrentCulture 恢复到原来的状态。
public IActionResult SetLanguage(string culture)
{
string cookieCultureValue = culture;
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cookieCultureValue)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
return RedirectToPage("/Index");
}
我该如何解决这个问题? 我做这种多语言的事情对吗?
【问题讨论】:
-
您将 Culture 设置为
Current线程,但在重定向您的Current线程更改之后(不必这样做,但您无法控制它)。您需要做的是为每个请求设置文化(编写自定义中间件,它读取 cookie 或任何其他关于文化的信息源并为每个请求设置它)。最好参考 ASP.NET 指南:docs.microsoft.com/en-us/aspnet/core/fundamentals/…
标签: c# asp.net-core-mvc currentculture