Asp.Net Core 中基于请求的 Razor 页面本地化
Request-based Localization of Razor pages in Asp.Net Core
我的应用程序由位于美国的服务器托管。我住在英国。
当我在本地打开页面时,我可以根据我居住的地方看到日期 dd/mm/yyyy
的正确格式,但是,当我将应用程序部署到 Azure 美国应用程序服务并在同一个 Web 浏览器中打开它时,我可以查看 DateTime
格式更改为美国文化 mm/dd/yyyy
剃须刀页面.cshtml中的部分代码:
<br>
<h2>Subscription</h2>
<hr />
<dl class="row">
<dt class="col-sm-3">
@Html.DisplayNameFor(model => model.Subscription.StartDate)
</dt>
<dd class="col-sm-9" id="StartDate">
@Html.DisplayFor(model => model.Subscription.StartDate)
</dd>
...
<dt class="col-sm-3">
@Html.DisplayNameFor(model => model.Subscription.EndDate)
</dt>
<dd class="col-sm-9" id="EndDate">
@Html.DisplayFor(model => model.Subscription.EndDate)
</dd>
</dl>
我试着改变我显示日期的方式,我有一个应用 CultureInfo.InvariantCulture
的想法,但我以某事告终。喜欢
@(Model.Subscription.EndDate.ToString(CultureInfo.InvariantCulture))
但这仍然无济于事。我知道该页面是在服务器上生成的,但是,有什么方法可以根据浏览器的设置而不是服务器一次显示 StartDate
/EndDate
吗?
也许我需要使用一些 javascript 扩展来实现我想要的?
是否可以定义一个全局规则来显示整个 RazorPages 应用程序的客户端格式的所有日期?
干杯
您要查找的内容相当于经典 ASP.NET 中的 enableClientBasedCulture
:
<system.web>
<globalization enableClientBasedCulture="true" ... />
</system.web>
对于现代 ASP.Net 应用程序(Owin-based) you need to rely on the Localization middleware 实现(大致)相同的结果。
在你的Startup.cs
中:
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"),
});
虽然有些不同:
经典的enableClientBasedCulture
只使用HTTPAccept
header来确定文化,而新的中间件也会从querystring和cookie中尝试。
经典 enableClientBasedCulture
将映射到 OS 支持的任何请求的文化,而新的中间件要求所有支持的文化都是 pre-defined。
有关更详细的讨论,请参阅 https://github.com/dotnet/aspnetcore/issues/2649
我的应用程序由位于美国的服务器托管。我住在英国。
当我在本地打开页面时,我可以根据我居住的地方看到日期 dd/mm/yyyy
的正确格式,但是,当我将应用程序部署到 Azure 美国应用程序服务并在同一个 Web 浏览器中打开它时,我可以查看 DateTime
格式更改为美国文化 mm/dd/yyyy
剃须刀页面.cshtml中的部分代码:
<br>
<h2>Subscription</h2>
<hr />
<dl class="row">
<dt class="col-sm-3">
@Html.DisplayNameFor(model => model.Subscription.StartDate)
</dt>
<dd class="col-sm-9" id="StartDate">
@Html.DisplayFor(model => model.Subscription.StartDate)
</dd>
...
<dt class="col-sm-3">
@Html.DisplayNameFor(model => model.Subscription.EndDate)
</dt>
<dd class="col-sm-9" id="EndDate">
@Html.DisplayFor(model => model.Subscription.EndDate)
</dd>
</dl>
我试着改变我显示日期的方式,我有一个应用 CultureInfo.InvariantCulture
的想法,但我以某事告终。喜欢
@(Model.Subscription.EndDate.ToString(CultureInfo.InvariantCulture))
但这仍然无济于事。我知道该页面是在服务器上生成的,但是,有什么方法可以根据浏览器的设置而不是服务器一次显示 StartDate
/EndDate
吗?
也许我需要使用一些 javascript 扩展来实现我想要的?
是否可以定义一个全局规则来显示整个 RazorPages 应用程序的客户端格式的所有日期?
干杯
您要查找的内容相当于经典 ASP.NET 中的 enableClientBasedCulture
:
<system.web>
<globalization enableClientBasedCulture="true" ... />
</system.web>
对于现代 ASP.Net 应用程序(Owin-based) you need to rely on the Localization middleware 实现(大致)相同的结果。
在你的Startup.cs
中:
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"),
});
虽然有些不同:
经典的
enableClientBasedCulture
只使用HTTPAccept
header来确定文化,而新的中间件也会从querystring和cookie中尝试。经典
enableClientBasedCulture
将映射到 OS 支持的任何请求的文化,而新的中间件要求所有支持的文化都是 pre-defined。
有关更详细的讨论,请参阅 https://github.com/dotnet/aspnetcore/issues/2649