Asp.net 核心 1.1 本地化,不会改变文化



我按照Microsoft关于 Core 中本地化的教程 Asp.Net 我有一个问题,文化不会改变,除非我更改 Startup.cs 文件中的默认文化。

// Startup.cs - ConfigureServices Method
services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();

// Startup.cs - Configure Method
var supportedCultures = new List<CultureInfo>
{            
new CultureInfo("en-GB"),
new CultureInfo("fr-FR"),
...
};
app.UseRequestLocalization(new RequestLocalizationOptions()
{
DefaultRequestCulture = new RequestCulture("en-GB"),            
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures,
RequestCultureProviders = new List<IRequestCultureProvider>()
});

// HomeController
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl);
}

我想用锚链接更改语言,例如:

<a asp-area="" asp-controller="Home" asp-action="SetLanguage" asp-route-culture="fr-FR" asp-route-returnUrl="@Context.Request.Path">FR</a>

当我单击链接时,成功设置cookie,页面重新加载,但本地化文本保持不变。当我在启动.cs文件中更改默认请求文化时,区域性看起来很好(这意味着我的 Resx 文件已正确命名等)

那么如何根据点击的链接更改语言呢?

编辑我仍在寻找解决方案,如果有人可以提供帮助

编辑 2我提出了一个新的解决方案,但问题仍然发生在 VS 2017 中,如果有人可以更好地查看并解释我做错了什么,我会在 Github 上上传我的 VS 项目 https://github.com/adonis07/Localization

编辑 3
我能够通过在我的解决方案中添加该nuget包来解决问题Microsoft.AspNetCore.Authentication.Cookies。现在文化运作正常。

您是否正在配置线程以更改为代码中某处的特定区域性?像这样的东西,无论你在哪里阅读语言cookie:

CultureInfo ci = new CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);

最新更新