您的位置:首页 > 编程语言 > ASP

实践:设置 ASP.NET Web 页面的全局文化和 UI 文化

2007-03-03 21:47 337 查看
在 ASP.NET Web 页面中,你可以设置两种文化的值:Culture 和 UICulture 属性。Culture 的值会检测依赖于文化功能的结果(比如日期、数字、货币格式,等等)。而 UICulture 的值则会检测页面已经载入了哪种资源。

提示:Culture 和 UICulture 属性被设置成能够识别语言(比如,en 代表英语、es 代表西班牙语,而 de 代表德语)和文化(例如,US 代表美国、GB 代表英格兰、MX 代表墨西哥,而 DE 代表德国)的互联网标准字符串。比如 en-US 代表英语/美国,而 es-MX 则代表西班牙语/墨西哥。关于更多信息,请参考[CultureInfo]。

这两种文化设定不能够拥有相同的值。因此依赖于你的应用程序,分别对它们进行设置将会是重要的。比如一个 Web 拍卖网站。UICulture 属性可能会针对不同的 Web 浏览器而发生变化,反之 Culture 则保持不变。因此,价格始终都会显示成相同的货币和格式。

Culture 值只能够被设置成特定的文化,比如 en-US 或者 en-GB。这样做防止了识别用于 en 的正确货币符号的需求,因此 en-US 和 en-GB 就会拥有不同的货币符号。

用户能够在他们的浏览器中设置 UI 文化和文化。例如,在 Microsoft Internet Explorer 中的 Tools 菜单中,用户能够点击 Internet Options,在 General 制表页中点击 Language,然后设置他们所喜好的语言。如果 Web.config 文件中 globalization 元素的 enableClientBasedCultrue 特性被设置成 true,那么 ASP.NET 就能够基于通过浏览器而被发送的值来自动设置 Web 页面的 UI 文化和文化。

依赖于专用的浏览器设置来检测页面的 UI 文化并不是一个最佳的途径。因为用户经常会使用没有进行喜好设置的浏览器(例如,网吧用户)。你应该为用户提供一种方式来明确地选择页面的语言或者语言和文化(CultureInfo 名称)。

为 ASP.NET Web 页面声明而设置文化和 UI 文化

如果要设置所有页面的 UI 文化和文化,那么就需要在 Web.config 文件中添加一个 globalization 配置段,然后设置 uiculture 和 culture 特性,如下范例所示:
<globalization uiculture="es" culture="es-MX" />

如果要设置单独页面的 UI 文化和文化,那么可以设置 @ Page 指令的 Culture 和 UICulture 特性,如下范例所示:
<%@ Page UICulture="es" Culture="es-MX" %>

如果要让 ASP.NET 把 UI 文化和文化设置成当前浏览器设定中所指定的第一种语言,那么可以把 UICulture 和 Culture 设置成 auto。作为选择,你也可以把这些值设置成 auto:culture_info_name,culture_info_name 表示的是一种文化的名称。关于文化名称的列表,请参考[CultureInfo]。你既可以在 @ Page 指令中进行设置又可以在 Web.config 文件中进行设置。

通过编程来设置 ASP.NET Web 页面的文化和 UI 文化

重载页面的 InitializeCulture 方法。
在重载的方法中,检测为页面设置了哪种语言和文化。提示:InitializeCulture 方法在页面生命周期中非常早的时候就被调用,通常是在控件被创建或者设置页面的属性之前。因此,如果要读取被传递到页面窗体控件中的值,那么你就必须使用 Form 集合直接从请求中获取它们。

通过下列任何一种方法来设置 UI 文化和文化:把页面的 Culture 和 UICulture 属性设置成语言字符串和文化字符串(例如,en-US)。这些属性是页面的私有成员,并且只能够在一个页面中被使用。
分别把当前线程的 CurrentUICulture 和 CurrentCulture 属性设置成 UI 文化和文化。CurrentUICulture 属性会获取一种语言和文化信息字符串。如果要设置 CurrentCulture 属性,那么你就可以创建 CultureInfo 类的一个实例并且调用它的 CreateSpecificCulture 方法。
下列代码范例说明了能够允许用户从一个下拉列表框中选择他们所偏爱的语言的 ASP.NET Web 页面。另外,页面还导入了两个命名空间以获取更多的便利来操作线程和全局类。

<%@ Page Language="C#" uiculture="auto" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>
<script runat="server">
protected override void InitializeCulture()
{
if (Request.Form["ListBox1"] != null)
{
String selectedLanguage = Request.Form["ListBox1"];
UICulture = selectedLanguage ;
Culture = selectedLanguage ;

Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
}
base.InitializeCulture();
}
</script>
<html>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="ListBox1" runat="server">
<asp:ListItem Value="en-US"
Selected="True">English</asp:ListItem>
<asp:ListItem Value="es-MX">Español</asp:ListItem>
<asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
</asp:ListBox><br />
<asp:Button ID="Button1" runat="server"
Text="Set Language"
meta:resourcekey="Button1" />
<br />
<asp:Label ID="Label1" runat="server"
Text=""
meta:resourcekey="Label1" />
</div>
</form>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐