Формат времени на основе локали в ядре asp.net - PullRequest
0 голосов
/ 10 сентября 2018

Можно ли изменить формат времени в зависимости от локали?

Давайте рассмотрим следующие сценарии

  • Норвегия - широко используется 24-часовой формат времени
  • Швеция - широко используется 24-часовой формат времени
  • Швейцария Немецкий регион - широко используется 12-часовой формат
  • Германия - широко используется круглосуточный формат

Итак, моя главная проблема в том, как установить время на основе локали в asp.net core c #?

Я сделал локализацию с датой, но я должен сделать это и для времени.

enter image description here

выше изображение показывает с AM / PM. Кроме того, мне нужно показать временные интервалы в 24-часовом формате, который определяется на основе локали.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

если вы хорошо выполнили локализацию, вам не нужно делать дополнительные шаги для отображения времени в локальном формате,

но на всякий случай; Вы можете определить формат времени для конкретной культуры при настройке локализации, указав свой собственный формат, как показано ниже (код, измененный из ответа @ Marco):

public void ConfigureServices(IServiceCollection services)
{
/*boilerplate code omitted*/

// Configure supported cultures and localization options
services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[]
    {
        new CultureInfo("en-US"),
        new CultureInfo("de-DE"),
        new CultureInfo("fr"),
        new CultureInfo("ar-YE") {                    
                DateTimeFormat = {
                    // change long time pattern to 24 hours 
                    // e.g. 13:50:21
                    LongTimePattern = "HH:mm:ss",

                    // short time pattern as 12 hours
                    // e.g. 01:50:21 PM
                    ShortTimePattern = "hh:mm tt"
                },
            }
    };

    // State what the default culture for your application is. This will be used if no specific culture
    // can be determined for a given request.
    options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");

    // You must explicitly state which cultures your application supports.
    // These are the cultures the app supports for formatting numbers, dates, etc.
    options.SupportedCultures = supportedCultures;

    // These are the cultures the app supports for UI strings, i.e. we have localized resources for.
    options.SupportedUICultures = supportedCultures;
});
}

по вашему мнению, вы должны вызвать соответствующий шаблон:

DateTime.Now.ToLongTimeString()

или

DateTime.Now.ToShortTimeString()
0 голосов
/ 10 сентября 2018

Хорошо, я надеюсь, что это то, что вы хотите.

Прежде всего, вам нужно поддерживать фактические культуры и настраивать их при запуске приложения.

public void ConfigureServices(IServiceCollection services)
{
    /*boilerplate code omitted*/

    // Configure supported cultures and localization options
    services.Configure<RequestLocalizationOptions>(options =>
    {
        var supportedCultures = new[]
        {
            new CultureInfo("en-US"),
            new CultureInfo("de-DE"),
            new CultureInfo("fr"),
            new CultureInfo("ar-YE")
        };

        // State what the default culture for your application is. This will be used if no specific culture
        // can be determined for a given request.
        options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");

        // You must explicitly state which cultures your application supports.
        // These are the cultures the app supports for formatting numbers, dates, etc.
        options.SupportedCultures = supportedCultures;

        // These are the cultures the app supports for UI strings, i.e. we have localized resources for.
        options.SupportedUICultures = supportedCultures;
    });
}

Тогда вам нужночтобы фактически использовать локализацию запроса

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
    app.UseRequestLocalization(locOptions.Value);
    app.UseStaticFiles();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

Теперь, когда вы отправляете объект Date из вашего приложения клиенту, он будет анализировать его в текущей локали клиента.

Если выиспользуя Google Chrome и , чтобы проверить это , вы можете просто перейти на chrome://settings/languages, чтобы изменить локаль вашего браузера и изменить настройки.Перезапустите Chrome, и вы должны увидеть изменения немедленно.

Ссылка: https://github.com/aspnet/Entropy/blob/2fcbabef58c2c21845848c35e9d5e5f89b19adc5/samples/Localization.StarterWeb/Startup.cs

...