默认情况下,使用ASPNETCore 1.1.1本地化将当前文化设置为浏览器文化

时间:2017-03-29 10:01:06

标签: localization core globalization culture

我想知道默认情况下如何使用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

这一切都很好,这里的问题是,每次我打电话给网站我想得到默认的文化,在这种情况下&#34; fr&#34;,但我总是最后一个,我选择在关闭网页之前。

如何防止这种情况发生。

最好的问候。

Jolynice

1 个答案:

答案 0 :(得分:1)

当用户离开网站时,Cookie不会消失,因此,由于您将Cookie的过期时间设置为一年,因此用户选择的最后一种语言将生效一年。< / p>

与cookies不同,会话在用户离开网站时死亡,具有相同要求的人已经在github上请求了该功能,并为其创建了一个NuGet包。

https://github.com/aspnet/Localization/issues/344

https://www.nuget.org/packages/My.AspNetCore.Localization.Session

解决问题的其他方法是使用较短的过期日期(如果您不需要非常精确)或在检测到用户创建了新会话时删除cookie。