【问题标题】:ASP.NET Core MVC, set thread culture does not have effectASP.NET Core MVC,设置线程文化没有效果
【发布时间】: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


【解决方案1】:

ASP.Net Core,它更关注异步编码,这意味着任务是按部分运行的。所以控制器动作是 1 个任务。 RedirectToPage 是另一个任务(或多个任务)。

任务使用池在不同的线程中运行(由 TaskSchedular)(任务完成时重新使用线程)。因此没有保证它在同一个线程中运行。

您可以在您的 SetLanguage 方法中尝试CultureInfo.DefaultThreadCurrentCulture Property,如下所示:

CultureInfo newCulture = new CultureInfo(culture);

CultureInfo.DefaultThreadCurrentCulture = newCulture;
CultureInfo.DefaultThreadCurrentUICulture = newCulture;

然后在索引中获取CurrentThread.CurrentCulture

var currentCulture = Thread.CurrentThread.CurrentCulture;

【讨论】:

  • 谢谢,它适用于 DefaultThreadCurrentCulture 和 DefaultThreadCurrentUICulture。
猜你喜欢
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多