使用 ASPNETCore 1.1.1 本地化将当前文化默认设置为浏览器文化
set current culture to browser culture by default with ASPNETCore 1.1.1 localisation
我想知道如何使用 ASPNETCore 1.1.1 将当前文化默认设置为浏览器文化
我按照这个例子
https://andrewlock.net/adding-localisation-to-an-asp-net-core-application/
在我的 startup.cs 我有这个
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IStringLocalizerFactory, SingleFileResourceManagerStringLocalizerFactory>();
services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
// Add framework services.
services.AddMvc()
.AddViewLocalization(
LanguageViewLocationExpanderFormat.Suffix,
opts => { opts.ResourcesPath = "Resources"; })
.AddDataAnnotationsLocalization();
services.Configure<RequestLocalizationOptions>(
opts =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("es"),
new CultureInfo("fr"),
};
opts.DefaultRequestCulture = new RequestCulture("fr");
// Formatting numbers, dates, etc.
opts.SupportedCultures = supportedCultures;
// UI strings that we have localized.
opts.SupportedUICultures = supportedCultures;
});
}
我有一个语言选择器,我在缓存中添加 CookieRequestCultureProvider.DefaultCookieName。
[HttpPost]
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);
}
和这个资源文件
Resources.resx
Resources.en.resx
Resources.es.resx
Resources.fr.resx
这一切都很好,这里的问题是,每次我调用网站时我都想获得默认的文化,在这种情况下 "fr",但我总是得到最后一个,我之前选择我关闭网页。
我怎样才能防止这种情况发生。
此致。
乔丽妮丝
Cookie 不会在用户离开网站时消失,因此由于您将 Cookie 的有效期设置为一年,因此用户最后选择的语言将在一年内有效。
与 cookie 不同,会话会在用户离开网站时终止,并且有相同需求的人已经在 github 上请求了该功能并为其创建了一个 NuGet 包。
https://github.com/aspnet/Localization/issues/344
https://www.nuget.org/packages/My.AspNetCore.Localization.Session
解决此问题的其他方法是使用较短的到期日期(如果您不需要非常精确)或在检测到用户创建了新会话时删除 cookie。
我想知道如何使用 ASPNETCore 1.1.1 将当前文化默认设置为浏览器文化
我按照这个例子 https://andrewlock.net/adding-localisation-to-an-asp-net-core-application/
在我的 startup.cs 我有这个
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IStringLocalizerFactory, SingleFileResourceManagerStringLocalizerFactory>();
services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
// Add framework services.
services.AddMvc()
.AddViewLocalization(
LanguageViewLocationExpanderFormat.Suffix,
opts => { opts.ResourcesPath = "Resources"; })
.AddDataAnnotationsLocalization();
services.Configure<RequestLocalizationOptions>(
opts =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("es"),
new CultureInfo("fr"),
};
opts.DefaultRequestCulture = new RequestCulture("fr");
// Formatting numbers, dates, etc.
opts.SupportedCultures = supportedCultures;
// UI strings that we have localized.
opts.SupportedUICultures = supportedCultures;
});
}
我有一个语言选择器,我在缓存中添加 CookieRequestCultureProvider.DefaultCookieName。
[HttpPost]
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);
}
和这个资源文件
Resources.resx
Resources.en.resx
Resources.es.resx
Resources.fr.resx
这一切都很好,这里的问题是,每次我调用网站时我都想获得默认的文化,在这种情况下 "fr",但我总是得到最后一个,我之前选择我关闭网页。
我怎样才能防止这种情况发生。
此致。
乔丽妮丝
Cookie 不会在用户离开网站时消失,因此由于您将 Cookie 的有效期设置为一年,因此用户最后选择的语言将在一年内有效。
与 cookie 不同,会话会在用户离开网站时终止,并且有相同需求的人已经在 github 上请求了该功能并为其创建了一个 NuGet 包。
https://github.com/aspnet/Localization/issues/344
https://www.nuget.org/packages/My.AspNetCore.Localization.Session
解决此问题的其他方法是使用较短的到期日期(如果您不需要非常精确)或在检测到用户创建了新会话时删除 cookie。