使用ASP.Net2.0国际化你的网站祥解

 这个功能其实大家早就知道了,现在由于有一个项目要用到这个技术,所以又去全面一些的查找了一下。自己纪录一下,方便于以后查找使用吧。
        创建可有多种语言版本的 Web 应用程序在 ASP.NET 2.0 版以前是一项复杂的任务。如果您使用资源文件 (RESX) 及 ResourceManager,则需要手动分离出可本地化的元素,并执行自己的资源加载过程,这需要花费您很多的精力并需要编写大量的代码。ASP.NET 2.0 版大大简化了此过程,并且增加了很多功能,如:
  • 对客户端浏览器发送的接受语言 (Accept-Language) HTTP 请求标头字段进行自动检测
  • 使用声明性资源表达式将控件或其属性连接到资源
  • 通过程序访问资源及强类型资源
  • 自动编译 RESX 或 RESOURCE 文件并将其链接到运行库附属程序集
  • 对资源的创建提供进一步的设计时支持
  • 提供具有完全的扩展性的模型,以使 RESX 模型能够交换出来

        首先要在页面级别(<%@ Page UICulture="auto" Culture="auto" %>)或整个Portal级别(在Web.config中<globalization uiCulture="auto" culture="auto"/>)定义特定 UICultureCulture 属性。这两个属性的值均为 auto。这将指示 ASP.NET 基于客户端浏览器的首选区域性为页的执行检测并设置当前线程区域性和 UI 区域性。如果不为auto则可以为其指定具体的语言。

        如果需要从数据库中读取的信息作为选择语言的标准,需要对Thread.CurrentThread.CurrentCulture 和 Thread.CurrentThread.CurrentUICulture 进行更改,并且需要在 InitializeCulture() 方法中进行,因为对首选浏览器语言的自动检测是在页生存期的早期发生的。 
        可以通过后台代码或直接在页面上调用资源文件中的内容。
        有两种形式的资源表达式:显式和隐式。

资源表达式形式 说明
显式 <%$ Resources:[filename prefix,]resource-key %>

显式表达式用于以声明性语法定义控件属性的值,resource-key(必需)用于映射到资源中的值。filename prefix 参数是可选的,filename 指定全局资源文件夹中的资源文件的名称。
隐式 <asp:Label ID="Label1" runat="server" meta:resourcekey="resource-key-prefix" />

隐式表达式以声明性语法用作控件或对象的属性,并且定义 resource-key-prefix,用于为控件执行许多属性分配。资源文件包含许多具有常规形式 resource-key-prefix.Property 的潜在资源键,例如 Label1KeyPrefix.Text 和 Label1KeyPrefix.Font-name。所有资源都只能从本地资源获取。可以将表达式看作一个短格式表示法,用于在未显式在页中定义属性的情况下映射一个到多个控件属性。


        以编程的方法检索资源值:

        可以使用声明性语法将 ASP.NET 服务器控件属性值设置为资源值,也可以以编程方式检索资源值。如果在设计时资源值未知或者需要根据运行时条件设置资源值,可能会这样做。

        可以从本地资源文件和全局资源文件中获取资源值,这些文件使用的方法返回一个可强制转换为适当类型的对象。由于 ASP.NET 使用强类型编译全局资源,因此也可以使用强类型成员获取全局资源。

        调用 GetLocalResourceObjectGetGlobalResourceObject 方法以分别从全局资源文件或本地资源文件中读取特定的资源。在 HttpContext 和 TemplateControl 类中提供了这些重载方法。

        GetGlobalResourceObject 方法采用资源类名和资源 ID。该类名基于的是 .resx 文件名。例如,文件 WebResources.resx 和所有相关联的本地化文件都由类名 WebResources 引用。

        GetLocalResourceObject 方法采用表示 ResourceKey 属性的资源名。

        下面的代码示例演示如何从本地资源文件和全局资源文件获取资源值。这些方法返回一个对象;因此,必须将该资源强制转换为适当的类型。

        存储在 App_LocalResources 特殊文件夹中的默认本地资源文件根据 ASP.NET 页命名。例如,如果在 Default.aspx 页中使用了下面的代码,则必须将该资源文件命名为 Default.aspx.resx。在此示例中,向此文件添加了一个名为 Button1.Text 的字符串资源,并且该资源带有 "Found Resources" 值。

        此外,在此示例中,存储在 App_GlobalResources 特殊文件夹中的默认全局资源文件命名为 WebResourcesGlobal.resx。向此文件添加了一个名为 LogoUrl 的字符串资源,而且该资源带有http://go.microsoft.com/fwlink/?LinkId=49295 值或其他图像的 URL

<% @ Page Language = " C# "   %>

< script runat = " server " >
    
protected   void  Button1_Click( object  sender, EventArgs e)
    
{
        Button1.Text 
= 
            GetLocalResourceObject(
"Button1.Text").ToString();
        Image1.ImageUrl 
= 
            (String)GetGlobalResourceObject(
            
"WebResourcesGlobal""LogoUrl");
        Image1.Visible 
= true;
    }

</ script >

< html   >
< head id = " Head1 "  runat = " server " >
    
< title > Untitled Page </ title >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< div >
        
< asp:Button ID = " Button1 "  runat = " server "  
            OnClick
= " Button1_Click "  
            Text
= " Get Resources "   />
        
< asp:Image ID = " Image1 "  runat = " server "  
            Visible
= " false "   />
    
</ div >
    
</ form >
</ body >
</ html >
使用强类型检索全局资源
  • 按照下面的语法获取资源:

    Resources.Class.Resource

    资源将编译到命名空间 Resources 中,并且每个默认资源都将成为 Resources 类的成员。例如,如果创建了默认资源文件 WebResources.resx,并且该文件包含一个名为 WelcomeText 的资源,则可以在代码中引用该资源,如下面的代码示例所示:

    String welcome;
    welcome 
    =  Resources.WebResources.WelcomeText;

你可能感兴趣的:(asp.net)