Формат времени на основе локали в ядре asp.net
Можно ли изменить формат времени в зависимости от локали?
Давайте рассмотрим сценарии ниже
- Норвегия - широко используется 24 часовой формат времени
- Швеция - широко используется 24 часовой формат времени
- Швейцария Немецкий регион - широко используется 12-часовой формат
- Германия - широко используется круглосуточный формат
Так что моя конечная проблема заключается в том, как установить время на основе локали в ядре asp.net C#?
Я сделал локализацию с датой, но я должен сделать это и на время.
выше изображение показывает с AM/PM. Кроме того, мне нужно показать временные интервалы в 24-часовом формате, который определяется на основе локали.
2 ответа
Хорошо, я надеюсь, что это то, что вы хотите.
Прежде всего, вам необходимо поддерживать реальные культуры и настраивать их при запуске приложения.
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, и вы должны увидеть изменения немедленно.
Если вы хорошо сделали локализацию, вам не нужно делать дополнительные шаги, чтобы показать время в локальном формате,
но на всякий случай; Вы можете определить формат времени для конкретной культуры при настройке локализации, указав свой собственный формат, как показано ниже (код, измененный из ответа @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()