ASP.NET2.0_多语言本地化应用程序

1.设置当前文化

     页面类有两个影响本地化的重要属性均在< % Page % >指令设置:

1).UICulture

     此属性用于指定载入到页面的资源文件,资源文件可以包含页面文本内容的特定语言的翻译版本.其属性值可为中立文化也可为特定文化(下面有介绍)

2).Culture

     此属性决定了诸如日期、数值、货币单位等的格式与排序。此属性值只能为特定文化.
     以上UICulture和Culture属性都接受标准的文化名称作为它们的值。(可在http://www.IETF.org查看标准文化名称)
注:UICulture属性决定了为页面载入哪个资源文件,而Culture是决定了日期,数字,货币数量如何格式化
常用的文化名称如下:
zh-CN=Chinese(China)
en-US=English(United States)
en-GB=English(United Kingdom)

注:每个文化名称有两个部分组成。第一部分代表语言代码,第二部分代表国家/区域代码
即文化名称=语言代码-代表国家/区域代码
若只有语言代码,而无国家/区域代码的文化名称则为中立文化(neutral culture)
若即有语言代码,又有国家/区域代码的文化名称则为特定文化(specific culture)

1.1手动设置文化

实例手动在Page指令中设置:

ContractedBlock.gifExpandedBlockStart.gifCode
<%@ Page Language="C#" UICulture="id-ID" Culture="id-ID" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
void Page_Load()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
this.lblToday.Text = DateTime.Now.ToString("D");
        
this.lblPrice.Text = (512.3m).ToString("c"); 
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>印度尼西亚文化</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        今天的日期是:
        
<asp:Label ID="lblToday" runat="server" />
        
<hr />
        商品的价格是:
        
<asp:Label ID="lblPrice" runat="server" />
    
</div>
    
</form>
</body>
</html>

 

实例以编程方式设置这些属性:

ContractedBlock.gifExpandedBlockStart.gifSelectCulture.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
void Page_Load()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
    }


    
void Page_PreRender()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
this.lblToday.Text = DateTime.Now.ToString("D");
        
        
this.lblPrice.Text = (512.3m).ToString("c"); 
    }


    
protected void btnSelect_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
{
        Page.Culture 
= ddlCulture.SelectedValue;
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>手动设置文化</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Label ID="lblCulture" Text="文化" AssociatedControlID="ddlCulture" runat="server" />
        
<asp:DropDownList ID="ddlCulture" runat="server"
         DataTextField
="DisplayName" DataValueField="Name" DataSourceID="srcCulture" />
        
<asp:Button ID="btnSelect" Text="选择" runat="server" OnClick="btnSelect_Click" />
        
<hr />
        今天的日期是:
        
<asp:Label ID="lblToday" runat="server" />
        
<hr />
        商品的价格是:
        
<asp:Label ID="lblPrice" runat="server" />
        
        
<asp:ObjectDataSource ID="srcCulture" runat="server"
         TypeName
="System.Globalization.CultureInfo" SelectMethod="GetCultures">
            
<SelectParameters>
                
<asp:Parameter Name="types" DefaultValue="SpecificCultures" />
            
</SelectParameters>
         
</asp:ObjectDataSource>
        
    
</div>
    
</form>
</body>
</html>


实例用Profile记录用户的文化以便用户以后访问网站时自动进入记录的文化不必再设置(注意:有重写了InitializeCulture()此方法是为页的当前线程设置 Culture 和 UICulture):

ContractedBlock.gifExpandedBlockStart.gifSelectCultureProfile.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
//为页的当前线程设置 Culture 和 UICulture。 
    protected override void InitializeCulture()
ExpandedBlockStart.gifContractedBlock.gif    
{
        Page.Culture 
= Profile.UserCulture;
        Page.UICulture 
= Profile.UserUICulture;
    }

    
    
void Page_Load()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
//Page.Culture = Profile.UserCulture;
        
//Page.UICulture = Profile.UserUICulture;
    }


    
void Page_PreRender()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
this.lblToday.Text = DateTime.Now.ToString("D");
        
this.lblPrice.Text = (512.3m).ToString("c"); 
    }


    
protected void btnSelect_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
{
        Profile.UserCulture 
= ddlCulture.SelectedValue;
        Profile.UserUICulture 
= ddlCulture.SelectedValue;
        Page.Culture 
= ddlCulture.SelectedValue;
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>手动设置文化</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Label ID="lblCulture" Text="文化" AssociatedControlID="ddlCulture" runat="server" />
        
<asp:DropDownList ID="ddlCulture" runat="server"
         DataTextField
="DisplayName" DataValueField="Name" DataSourceID="srcCulture" />
        
<asp:Button ID="btnSelect" Text="选择" runat="server" OnClick="btnSelect_Click" />
        
<hr />
        今天的日期是:
        
<asp:Label ID="lblToday" runat="server" />
        
<hr />
        商品的价格是:
        
<asp:Label ID="lblPrice" runat="server" />
        
        
<asp:ObjectDataSource ID="srcCulture" runat="server"
         TypeName
="System.Globalization.CultureInfo" SelectMethod="GetCultures">
            
<SelectParameters>
                
<asp:Parameter Name="types" DefaultValue="SpecificCultures" />
            
</SelectParameters>
         
</asp:ObjectDataSource>
        
    
</div>
    
</form>
</body>
</html>

 

1.2自动检测文化

即利用浏览器请求一个页面时,它会发送一个Accept-Language首部,其包含了用户习惯的语言列表. 可用Request.UserLanguages属性返回Accept-Language首部的值.

实例显示Accept-Language:

ContractedBlock.gifExpandedBlockStart.gifShowAcceptLanguage.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
void Page_Load()
ExpandedBlockStart.gifContractedBlock.gif    
{
        bltAcceptLanguage.DataSource 
= Request.UserLanguages;
        bltAcceptLanguage.DataBind(); 
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>显示Accept-Language</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:BulletedList ID="bltAcceptLanguage" runat="server" />
    
</div>
    
</form>
</body>
</html>

 

1.3在Web配置文件中设置文化

< system.web > < globalization culture="en-US" uiCulture="en-US" / > < / system.web >

1.4文化和ASP.NET控件

Culture属性的值会自动地影响诸如Calendar这样的ASP.NET控件的呈现行为。

实例:

ContractedBlock.gifExpandedBlockStart.gifShowCalendar.aspx
<%@ Page Language="C#" Culture="zh-CN" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>文化和ASP.NET控件</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
    
</div>
    
</form>
</body>
</html>

 

2.使用CultureInfo类

     CultureInfo类包含了大约超过150个不同的文化的信息。可以在我们的代码中使用该类的方法返回特定的 区域。使用这些信息来格式化诸如日期、数字和货币数量的值。

2.1使用CultureInfo类格式化字符串值

即在ToString()方法中使用第二个参数。
实例:

3.创建本地资源

     使用资源文件可根据用户的语言修改页面的文本或其他内容。每一个资源文件可以包含页面文本的特定语言的翻译版本.
ASP.NET Framework支持两种类型的资源文件:本地资源和全局资源.
ASP.NET Framewormk自动把本地资源编译成程序集,而全局资源就编译成一个类,这样全局资源就可以用强类型表达式在代码中处理全局资源!
当创建一个资源时,一个新类会自动添加到Resource命名空间.该类以属性的形式暴露了所有资源文件中的项目.

在开始本地化一个页面之前,一定要创建一个默认本地化文件.即如test.aspx.resx

3.1显式本地化表达式(即用显式的< %$ Resources:[**ResourceFileName,] **ResourceKeyName % >为控件属性设置一个特定的资源项目的值)

  1. 先在要本地化页面的文件路径同一级别上建立特殊文件夹App_LocalResources.
  2. 再在App_LocalResources文件夹内添加资源文件其命名如下:
    pageName.[cultureName].resx
    即例如:为页面test.aspx页面关联资源文件那么资源文件的命名将如下:
    test.aspx.resx(默认,若没有其他资源文件符合用户的语言设置,则用此资源文件来应用)
    test.aspx.zh.resx(中立文化,若没有符合用户特定文化语言设置,而有中立文化符合,则用此资源文件)
    test.aspx.zh-CN.resx(特定文化,若符合用户特定文化语言设置,就应用此资源文件)
  3. 然后再完成页面部分.
    1. 在页面的< % Page % >指令中添加UICulture属性并设其值为auto.即< %@ Page Language="C#" UICulture="auto" % >
    2. 接着在相应的控件的属性上用上资源表达式< %$ Resources:[**ResourceFileName,] **ResourceKeyName % > (注:此资源表达式是一个显式的资源表达式,因属性被显式地设置为一个特定的资源项目的值)

      MSDN版资源表达式说明:

      该资源表达式采用以下形式,其中 Class 是可选的(除非资源是全局资源),而 ResourceID 是必需的:
      < %$ Resources: Class , ResourceID % >
      Class 值标识要在使用全局资源时使用的资源文件。在编译 .resx 文件时,将不带扩展名的基文件名显式用作所得程序集的类名。若要使用本地资源文件(与当前页名匹配的文件)中的资源,则不必提供类名,因为 ASP.NET 将该页类与资源类相匹配。
      ResourceID 值是要读取的资源的标识符。在前面的示例中,从全局资源文件 WebResources.resx(或相应的本地化版本)读取按钮的 Text 属性。在该文件中,ASP.NET 将该值用于带有标识符 Button1Caption 的资源及页本身。若要设置页属性,可以在 @ Page 指令中使用资源表达式。

实例之正常无本地资源版(即页面内容不会随着用户的语言文化而改变):

ContractedBlock.gifExpandedBlockStart.gifSimplePage.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    
protected void btnSubmit_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
{
        
this.lblMsg.Visible = true;
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>简单页面</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Click Here!" /><br />
        
<br />
        
<asp:Label ID="lblMsg" runat="server" Text="Thank you!" Visible="False"></asp:Label>
    
</div>
    
</form>
</body>
</html>

 

实例之显式本地资源版(即页面内容会随着用户的语言文化而改变)

(相应的资源文件在此略了,也就先建立App_LocalResources文件夹,再在其中添加相应的资源文件及资源键/值等):

ContractedBlock.gifExpandedBlockStart.gifLocalizablePage.aspx
<%@ Page Language="C#" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
protected void btnSubmit_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
{
        
this.lblMsg.Visible = true;
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>本地化页面</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="<%$ Resources:ClickHere %>" /><br />
        
<br />
        
<asp:Label ID="lblMsg" runat="server" Text="<%$ Resources:ThankYou %>" Visible="False"/>
    
</div>
    
</form>
</body>
</html>

 

3.2隐式本地化表达式

(即用一个资源键meta:resourceKey="ControlID"本地化控件的多个属性(这些属性在相应的资源文件中以Key(ControlID) . Property格式定义好了))
注:被隐式本地化的控件属性其被定义在资源文件中,则此控件属性在页面中可声明也可不用声明或只给出默认值

使用本地资源的隐式本地化
如果您已为特定页创建了本地资源文件,则可以使用隐式本地化从该资源文件中为控件填充属性值。使用隐式本地化时,ASP.NET 读取资源文件并将资源与属性值相匹配。
若要使用隐式本地化,必须对本地资源文件中的资源使用命名约定,命名约定采用以下模式:

Key . Property

例如,若要为名为 Button1 的 Button 控件创建资源,可以在本地资源文件中创建以下键/值对:
Button1.Text
Button1.BackColor
Label1.Text
可以对 Key 使用任意名称,但 Property 必须与要本地化的控件的属性相匹配。
在页上,对该控件的标记使用特殊的 meta 属性可指定隐式本地化。不必显式指定要本地化的属性。配置为使用隐式本地化的 Button 控件看起来可能类似于下面的形式:
resourcekey 值与相应资源文件中的键相匹配。在运行时,ASP.NET 通过将控件标签用作 resourcekey 将资源与控件属性相匹配。如果在资源文件中定义了某个属性值,则 ASP.NET 会用资源值替换该属性。

实例:

ContractedBlock.gifExpandedBlockStart.gifLocalizablePageImplicit.aspx
<%@ Page Language="C#" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
protected void btnSubmit_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
{
        
this.lblMsg.Visible = true;
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>本地化页面</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" meta:resourceKey="btnSubmit" ToolTip="default value" /><br />
        
<br />
        
<asp:Label ID="lblMsg" runat="server" meta:resourceKey="lblMsg" Text="default value" Visible="False"/>
    
</div>
    
</form>
</body>
</html>

 

使用隐式的本地化表达式比显式资源表达式有两个好处.

  1. 隐式资源表达式可以使用一个资源键值重写控件的多个属性.即一个meta:resourceKey="Key"搞定,其他(键.属性)就交给相应的资源文件管理.
  2. 利用隐式本地化表达式,可以更简单地本地化一个已存在的网站,只需简单地添加一个meta:resourceKey属性到任意需要本地化的控件中.

3.3对页面属性使用本地化资源

可以使用资源表达设置诸如页面标题这样的的页面属性。
实例(显式本地化页面方式):

 

ContractedBlock.gifExpandedBlockStart.gifPageExplicit.aspx
<%@ Page Language="C#" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title><asp:Literal ID="ltlTitle" Text="<%$ Resources:TitleText %>" runat="server" /></title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<h1>显式本地化页面</h1>
    
</div>
    
</form>
</body>
</html>

实例(隐式本地化页面方式):

ContractedBlock.gifExpandedBlockStart.gifPageImplicit.aspx
<%@ Page Language="C#" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title><asp:Literal ID="ltlTitle" Text="SB SB SB" meta:resourceKey="ltlTitle" runat="server" /></title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<h1>隐式本地化页面</h1>
    
</div>
    
</form>
</body>
</html>

 

3.3以编程方式获取本地化资源

在代码中访问本地资源,可以使用GetLocalResourceObject()由方法得到其值.
实例:
ContractedBlock.gifExpandedBlockStart.gifProgramLocalResource.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
void Page_Load()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
string welcomeMsg = (string)GetLocalResourceObject("welcomeMsg");
        lblMsg.Text 
= string.Format(welcomeMsg, "ithqm"); 
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>以编程方式获取本地资源</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Label ID="lblMsg" runat="server" />
    
</div>
    
</form>
</body>
</html>

4.创建全局资源

     本地资源用于特定的页面.而全局资源就用于应用程序的任意页面.任意需要被多个页面共享的本地化内容应该被放在一个全局资源文件中

     可通过在根目录下添加特殊文件夹App_GlobalResources来实现全局资源文件夹,再创建相应的全局资源文件.

实例:

ContractedBlock.gifExpandedBlockStart.gifShowGlobalPage.aspx
<%@ Page Language="C#" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title><asp:Literal ID="ltlTitle" Text="<%$ Resources:Site,Title %>" runat="server" /></title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<br />页面内容
        
<br />页面内容
        
<br />页面内容
        
<br />页面内容<hr />
        
<asp:Literal ID="ltlCopyright" Text="<%$ Resources:Site,Copyright %>" runat="server" />
    
</div>
    
</form>
</body>
</html>
4.1以编程方式获取全局资源
利用GetGlobalResourceObject()

实例:

ContractedBlock.gifExpandedBlockStart.gifProgramGlobalResource.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
void Page_Load()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
string welcomeMsg = (string)GetGlobalResourceObject("Site","Title");
        lblMsg.Text 
= welcomeMsg;
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>以编程方式获取全局资源</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Label ID="lblMsg" runat="server" />
    
</div>
    
</form>
</body>
</html>

 

4.2使用强类型本地化表达式

     ASP.NET Framewormk自动把本地资源编译成程序集,而全局资源就编译成一个类,这样全局资源就可以用强类型表达式在代码中处理全局资源! 
     当创建一个资源时,一个新类会自动添加到Resources命名空间.该类以属性的形式暴露了所有资源文件中的项目.

实例:

ContractedBlock.gifExpandedBlockStart.gifProgramGlobalTyped.aspx
<%@ Page Language="C#" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
void Page_Load()
ExpandedBlockStart.gifContractedBlock.gif    
{
        
//读取全局资源文件的属性.
        lblMsg.Text = Resources.Site.Title; 
    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>强类型访问全局资源</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Label ID="lblMsg" runat="server" />
    
</div>
    
</form>
</body>
</html>
5使用Localize控件
Localize控件与控件Literal控件非常相似(它继承自Literal控件),也就Localize控件可直接在源码视图状态下直接编写

实例:

ContractedBlock.gifExpandedBlockStart.gifShowLocalizeControl.aspx
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>显示 Localize 控件</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Localize ID="locBodyText" meta:resourceKey="locBodyText" runat="server">
            这里是些页面内容.
        
</asp:Localize>
        
<br /><br />
        
<asp:Literal ID="ltlBodyText" runat="server">这里是些literal文本!</asp:Literal>
    
</div>
    
</form>
</body>
</html>

转载于:https://www.cnblogs.com/ArisHuang/archive/2008/10/05/1304374.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不用“背”单词,一个方法从普通二本到哥伦比亚大学:我是如何做到的?

全世界只有3.14 % 的人关注了青少年数学之旅“学英语太难、太费劲了。”我听过无数人这么说。然而&#xff0c;我的学员们&#xff0c;却都只用了短短3—6个月时间&#xff0c;就以惊人速度提高了英语&#xff1a;小磊&#xff1a;勉强踩着2本线上了大学&#xff0c;四级考了3次…

“熊猫烧香”源码启示录

一、 引言 去年秋天回趟老家&#xff0c;适逢家中秋收后“祭宅神”。期间&#xff0c;听亲家二大娘在香毕吟颂的《十柱香》的佛歌&#xff0c;深有感触&#xff1a;百姓烧香祝的是神仙幸福&#xff0c;盼的是亲人平安—这 是作为衣食百姓发自内心的心愿&#xff01;但如今&…

ios之UISplitViewController

iPad的屏幕比iPhone大&#xff0c;所以在界面上&#xff0c;iPad比iPhone多一个UISplitViewController&#xff0c;用来实现iPad在横屏时&#xff0c;分两栏显示所需要的界面&#xff0c;可以一边是目录一边是具体的内容。下面我将详细的阐述UISplitViewController在ipad中的使…

为什么日本的科学那么牛?

▲ 点击查看日本化学家吉野彰&#xff0c;因发明了现代锂离子电池&#xff08;LIB&#xff09;&#xff0c;成为了今年的诺贝尔化学奖得主&#xff0c;一起获得这个奖项的&#xff0c;还有斯坦利惠廷汉姆、古迪纳夫。吉野彰事实上&#xff0c;当我们往回看这些年诺贝尔奖获得…

技术分享|单元测试推广与实战-在全新的DDD架构上进行单元测试

源宝导读&#xff1a;单元测试是伴随软件工程出现和发展的&#xff0c;怎么做大家可能各有见解。本文介绍了单元测试中的反模式&#xff0c;强调了可测试性的重要性&#xff0c;并以 DDD 架构项目的迭代进程作为示例&#xff0c;演示了单元测试的组织过程&#xff0c;展示了单元…

Object-C中的字符串对象1-不可变字符串

2019独角兽企业重金招聘Python工程师标准>>> #import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {autoreleasepool {NSString *str1"this is string A";NSString *str2"this is string B";NSString *temp;NSCom…

硬盘分区与故障排解速查手册(1)

在所有计算机配件中&#xff0c;硬盘是一个比较特殊的角色&#xff0c;它不仅关系到系统的整体性能&#xff0c;而且用户的所有资料都保存在它的身上。 那么&#xff0c;硬盘该如何初始化呢&#xff1f;遇到硬盘故障该如何解决呢&#xff1f;一、大硬盘分区与格式化 硬盘分区是…

Ant Design Blazor 发布 0.9.0,共100+人贡献!

???? 截至这个版本&#xff0c;本项目一共迎来 101 位贡献者&#xff0c;是他们成就了这个项目&#xff01;在此感谢他们慷慨的贡献&#xff01;变更记录Tabs???? 增加路由服用多标签页组件 ReuseTabs。(demo) #1704 ElderJames???? 增加 OnClose 事件与 TabTempla…

人类究竟有多喜欢看热闹?! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;

Python通过amqp消息队列协议中的Qpid实现数据通信

简介&#xff1a;这两天看了消息队列通信&#xff0c;打算在配置平台上应用起来。以前用过zeromq但是这东西太快了&#xff0c;还有就是rabbitmq有点大&#xff0c;新浪的朋友推荐了qpid&#xff0c;简单轻便。自己总结了下文档&#xff0c;大家可以瞅瞅。AMQP&#xff08;消息…

基于 Blazor 打造一款实时字幕

早先在录制视频的时候一直使用的是 obs-auto-subtitle 作为实时字幕展示功能。不过这个是以 OBS 插件的形式存在&#xff0c;不管是语言和功能上都有一定的限制。故而使用 Blazor server 实现一个。总体思路 实时字幕自然需要语音转文字的功能。考察了一些服务之后&#xff0c;…

一个数学系毕业的物理学家,是怎么拿到诺贝尔化学奖的?

全世界只有3.14 % 的人关注了青少年数学之旅2019年10月9日&#xff0c;这个“特别好”教授&#xff0c;1940年&#xff0c;“特别好”考上了耶鲁&#xff0c;1943年&#xff0c;“特别好”终于拿到数学学士学位。“特别好”特别沮丧&#xff0c;▲ “特别好”在牛津大学&#x…

杀鸡焉用牛刀!放下Windbg,让dotnet-stack来快速定位死锁原因

我们用来分析CPU过高、死锁问题的常见方案是使用Windbg分析dump文件。但是这种方式存在一些缺点&#xff0c;比如dump文件过大难以下载&#xff0c;windbg使用过于复杂难以掌握等。这里介绍一个小工具dotnet-stack&#xff0c;帮助我们检查托管代码调用堆栈&#xff0c;快速定位…

数学中那些非常奇葩的证明

全世界只有3.14 % 的人关注了青少年数学之旅一、费马大定理证明证&#xff1a;是无理数假设是有理数&#xff0c;p和q是互素正整数那么移项得又由费马大定理可知&#xff1a;与费马大定理(Fermats last therorem)矛盾, Q.E.D. &#xff08;也可易证2的n分之一次方且n属于大于2的…

使用 Minimal API 改造动态文件提供者

使用 Minimal API 改造动态文件提供者Intro之前介绍过一个基于动态文件提供者来实现静态网站的动态更新&#xff0c;可以参考 ASP.NET Core 实现一个简单的静态网站滚动更新&#xff0c;在 Minimal API 出现之后想改造成 Minimal API 的写法&#xff0c;但是由于之前版本的 Min…

[导入]体验Asp.Net Mvc Preview5(3)-探索ModelBinder的工作原理

摘要: 在前面的两篇文章中,我们研究了Asp.Net Mvc Preview5的ViewEingine的改进,从本篇开始,我们开始研究Preview5中的新特性:ModelBinder,首先我们来了解下什么是ModelBinder特性,这有什么用处,在以前的版本中,如果我们要在Action中获取数据,一般有三种方式,一是通过Action的参…

复盘:我的三个月远程办公实践,有自由,也有代价

这是头哥侃码的第244篇原创有人说&#xff0c;人生就是一个不断尝试的过程。我觉得&#xff0c;有时候这个词其实不准确&#xff0c;因为每个人的性格不同&#xff0c;成长经历及运势不同&#xff0c;所以对 “尝试” 俩字的理解也就不同。在我还是孩子的时候&#xff0c;几乎所…

Silverlight专题(10)- WatermarkedTextBox使用

问题&#xff1a; 之前的Silverlight版本都有一个WatermarkedTextBox控件 但是到了Silverlight 2 Beta2版本&#xff0c;由于和WPF兼容的考虑 WatermarkedTextBox被移除了 虽然之前我有看到消息说Silverlight 2正式Release的时候会给TextBox一个Watermark属性 但是Silverlight …

90后一代人还能通过攒钱改变现状吗?

全世界只有3.14 % 的人关注了青少年数学之旅每次打开公号&#xff0c;扑面而来一阵阵焦虑&#xff1a;95后毕业3个月就买房&#xff0c;你的同龄人正在抛弃你毕业3年&#xff0c;年薪超100万&#xff1a;赚钱&#xff0c;是一种修行一线城市财务自由门槛2.9亿&#xff0c;看看你…

从高德侯军到《李嘉诚:商者无域》

从高德侯军到《李嘉诚&#xff1a;商者无域》 【编者按】转载这篇文章是因为看到了业内著名企业高德董事长侯军跻身2008胡润排行榜&#xff0c;让人不禁联想起高德在业内一贯的潜行风格&#xff0c;而侯军先生也颇有点“忍者神龟”的隐喻&#xff0c;在业内企业家当中属闷声发大…