【发布时间】:2017-09-02 00:33:34
【问题描述】:
我遵循了有关 Asp.Net Core 本地化的 Microsoft 教程,但我遇到了一个问题,除非我更改 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 时,页面重新加载但本地化文本保持不变。当我在 Startup.cs 文件中更改 DefaultRequestCulture 时,文化看起来很好(这意味着我的 Resx 文件被正确命名等)
那么我怎样才能根据被点击的链接来改变语言呢?
编辑 如果有人可以提供帮助,我仍在寻找解决方案
编辑 2 我做了一个新的解决方案,但问题仍然出现在 VS 2017 中,如果有人可以更好地查看并解释我做错了什么,我将我的 VS 项目上传到 Github 上https://github.com/adonis07/Localization
编辑 3
我能够通过在我的解决方案 Microsoft.AspNetCore.Authentication.Cookies 中添加该 nuget 包来解决问题。现在文化运作正常。
【问题讨论】:
标签: asp.net-core asp.net-core-1.1