ASP. NET Базовая локализация даты / времени - PullRequest
0 голосов
/ 05 апреля 2020

Я реализую локализацию в своем приложении ASP. NET Core 3.1 MVC для поддержки нескольких языков в пользовательском интерфейсе, но у меня возникают проблемы из-за различных календарей, используемых каждой культурой. Как установить григорианский тип календаря для всех культур?

Вот мой ConfigureServices метод в startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    var cultures = new[]
    {
        new CultureInfo("ar"),
        new CultureInfo("en")
    };

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")
        )
    );
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages()
        .AddExpressLocalization<ExpressLocalizationResource, ViewLocalizationResource>(
            ops =>
            {
                ops.ResourcesPath = "LocalizationResources";
                ops.RequestLocalizationOptions = o =>
                {
                    o.SupportedCultures = cultures;
                    o.SupportedUICultures = cultures;
                    o.DefaultRequestCulture = new RequestCulture("en");
                };
            }
        );
}

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Вы можете изменить календарь для культуры.

Так что для вашего примера следующий код изменит культуру "ar" на использование григорианского календаря.

CultureInfo ar = CultureInfo.CreateSpecificCulture("ar");
ar.DateTimeFormat.Calendar = new GregorianCalendar();

var cultures = new[]
{
    ar,
    new CultureInfo("en")
};

Документация для календарей и cultureinfo

https://docs.microsoft.com/en-us/dotnet/standard/datetime/working-with-calendars

0 голосов
/ 05 апреля 2020

Оказывается, вы можете изменить календарь CultureInfo через его свойство DateTimeForm. Как то так:

var supportedCultures = new List<CultureInfo> { };
var ar = new CultureInfo("ar");
ar.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
ar.DateTimeFormat.DateSeparator = "/";
ar.DateTimeFormat.Calendar = new GregorianCalendar();
supportedCultures.Add(ar);
...