文化是否自动应用于 ASP.Net 网络表单? (不是 UICulture)
Is Culture automatically applied in ASP.Net Webforms? ( not UICulture)
我有一个 Webforms ASP.Net 4.5 应用程序,它没有在 web.config 或其他代码中指定的文化或 uiculture 设置。我关心日期是否为来自不同国家/地区的用户正确格式化,即文化设置而不是 UICulture 设置。
问题:如果这个ASP.Net应用程序被来自英国、德国和美国的用户使用,那么日期值在[=中显示时会自动格式化吗? 36=] 控件,或者开发人员需要明确地执行此格式设置?
Label 控件使用 ASP.Net Web 表单的数据绑定语法进行数据绑定,如下面的代码片段所示。例如,如果美国用户的订单日期为 10/4/2014,那么对于英国或德国的用户,它应显示为 4/10/2014。
Html
<asp:Label id="lblOrderDate" runat="server" Text="<%# this.OrderDate %>"></asp:Label>
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
string orderId = this.txtOrderId.Text;
Order order = DAL.GetOrder( orderId );
this.OrderDate = order.OrderDate;
this.Page.DataBind();
}
public DateTime OrderDate { get;set; }
更新 1
我不确定是否需要在页面代码隐藏中包含以下代码来设置文化,或者它会由 ASP.Net 自动完成?我的猜测是 ASP.Net 会自动执行此操作,但不确定。
protected override void InitializeCulture()
{
string language = "en-us";
//Detect User's Language.
if (Request.UserLanguages != null)
{
//Set the Language.
language = Request.UserLanguages[0];
}
//Set the Culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo(language);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
}
Asp.net 可以根据浏览器的内容自动设置文化。 (这是我们在 Request.UserLanguages 中得到的)。如果您这样做,"<%# this.OrderDate %>"
将基于此自动格式化。
To have ASP.NET set the UI culture and culture to the first language
that is specified in the current browser settings, set UICulture and
Culture to auto. Alternatively, you can set this value to
auto:culture_info_name, where culture_info_name is a culture name. For
a list of culture names, see CultureInfo. You can make this setting
either in the @ Page directive or Web.config file.
<%@ Page Culture="auto" %>
或全局适用于所有页面。
<configuration>
<system.web>
<globalization culture="auto"/>
</system.web>
</configuration>
但你不能相信 Request.UserLanguages。这只是浏览器的偏好。最好允许用户通过列表框进行选择。
您可以通过覆盖页面的 initializeculture 调用,以编程方式为每个请求显式设置它。
protected override void InitializeCulture()
{
if (Request.Form["ListBox1"] != null)
{
String selectedLanguage = Request.Form["ListBox1"];
Culture = selectedLanguage ;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
}
base.InitializeCulture();
}
主页没有 InitializeCulture() 调用。所以如果你想对所有页面都这样做,那么创建一个继承 Page 的 BasePage。然后允许您的所有页面继承自该页面。参见 this answer
我有一个 Webforms ASP.Net 4.5 应用程序,它没有在 web.config 或其他代码中指定的文化或 uiculture 设置。我关心日期是否为来自不同国家/地区的用户正确格式化,即文化设置而不是 UICulture 设置。
问题:如果这个ASP.Net应用程序被来自英国、德国和美国的用户使用,那么日期值在[=中显示时会自动格式化吗? 36=] 控件,或者开发人员需要明确地执行此格式设置?
Label 控件使用 ASP.Net Web 表单的数据绑定语法进行数据绑定,如下面的代码片段所示。例如,如果美国用户的订单日期为 10/4/2014,那么对于英国或德国的用户,它应显示为 4/10/2014。
Html
<asp:Label id="lblOrderDate" runat="server" Text="<%# this.OrderDate %>"></asp:Label>
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
string orderId = this.txtOrderId.Text;
Order order = DAL.GetOrder( orderId );
this.OrderDate = order.OrderDate;
this.Page.DataBind();
}
public DateTime OrderDate { get;set; }
更新 1
我不确定是否需要在页面代码隐藏中包含以下代码来设置文化,或者它会由 ASP.Net 自动完成?我的猜测是 ASP.Net 会自动执行此操作,但不确定。
protected override void InitializeCulture()
{
string language = "en-us";
//Detect User's Language.
if (Request.UserLanguages != null)
{
//Set the Language.
language = Request.UserLanguages[0];
}
//Set the Culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo(language);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
}
Asp.net 可以根据浏览器的内容自动设置文化。 (这是我们在 Request.UserLanguages 中得到的)。如果您这样做,"<%# this.OrderDate %>"
将基于此自动格式化。
To have ASP.NET set the UI culture and culture to the first language that is specified in the current browser settings, set UICulture and Culture to auto. Alternatively, you can set this value to auto:culture_info_name, where culture_info_name is a culture name. For a list of culture names, see CultureInfo. You can make this setting either in the @ Page directive or Web.config file.
<%@ Page Culture="auto" %>
或全局适用于所有页面。
<configuration>
<system.web>
<globalization culture="auto"/>
</system.web>
</configuration>
但你不能相信 Request.UserLanguages。这只是浏览器的偏好。最好允许用户通过列表框进行选择。
您可以通过覆盖页面的 initializeculture 调用,以编程方式为每个请求显式设置它。
protected override void InitializeCulture()
{
if (Request.Form["ListBox1"] != null)
{
String selectedLanguage = Request.Form["ListBox1"];
Culture = selectedLanguage ;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
}
base.InitializeCulture();
}
主页没有 InitializeCulture() 调用。所以如果你想对所有页面都这样做,那么创建一个继承 Page 的 BasePage。然后允许您的所有页面继承自该页面。参见 this answer