我遵循了关于Asp.Net Core本地化的Microsoft教程,我有一个问题,除非我更改Startup.cs文件中的默认文化,否则Culture不会更改。
// 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);
}
我想用Anchor Link改变语言,如:
<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中,我在Github上传我的VS项目,如果有人可以更好看,并解释我做错了什么https://github.com/adonis07/Localization
编辑3
我能够通过在我的解决方案 Microsoft.AspNetCore.Authentication.Cookies 中添加nuget包来解决问题。现在文化运作正常。
答案 0 :(得分:-1)
您是否正在将线程配置为在代码中的某个位置更改为特定区域性?无论你在哪里阅读语言cookie,都会有这样的事情:
CultureInfo ci = new CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);