ASP.NET Core如何按访问者本地化设置日期格式?

时间:2019-06-20 16:24:04

标签: asp.net-core

正如标题所示,我希望在ASP.NET Core应用中设置日期格式,以便为访问者所在地区设置日期格式。

例如,在我的视图模型中,当前定义我的日期;

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]
public DateTime OpenDate { get; set; }

如何配置我的应用程序以使用访问者本地首选项?

我试图通过在useMvc()之前放置以下内容来在启动文件中启用本地化:

app.UseRequestLocalization();

然后在我的控制器中尝试了以下操作,但是除非我编辑启动文件并配置默认区域性,否则browserCulture的值始终为EMPTY。

var locale = Request.HttpContext.Features.Get<IRequestCultureFeature>();
var browserCulture = locale.RequestCulture.UICulture.ToString();

我正在定义默认的区域性;

services.Configure<RequestLocalizationOptions>(options =>
            {
                options.DefaultRequestCulture = new RequestCulture("en-GB");
            });

我已经使用Chrome浏览器检查我的浏览器是否通过了Accept-Language标头,并且可以确认。使用Chrome插件,我还更改了Accept-Language属性,使其与应用程序(即en-US)中的默认区域性设置不同,但这也没有实现。

我想念什么?

-----解决方案-----

根据建议,我需要配置应用程序要支持的区域性。我将启动文件中的ConfigureServices中的本地化配置更改为以下内容;

// Setup supported cultures
            var supportedCultures = new[]
            {
                new CultureInfo("en-US"),
                new CultureInfo("fr"),
                new CultureInfo("en-GB"),
                new CultureInfo("zh-TW")
            };
            services.Configure<RequestLocalizationOptions>(options =>
            {
                options.DefaultRequestCulture = new RequestCulture("en-GB");
                options.SupportedCultures = supportedCultures;
                options.SupportedUICultures = supportedCultures;
            });

1 个答案:

答案 0 :(得分:1)

您似乎没有为RequestLocalizationOptions添加支持文化:

var supportedCultures = new[]
{
    new CultureInfo("en-US"),
    new CultureInfo("fr"),
    new CultureInfo("en-GB"),
    new CultureInfo("zh-TW"),
    // ...
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-GB"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});