ASP.NET网站制作之Asp.net中完成多言语
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?它是ASP.NET2.0新增了一种声明性表达式语法,可在剖析页之前将值交换到页中.ASP.NET表达式是基于运转时盘算的信息设置控件属性的一种声明性体例.ASP.NET表达式次要使用在:毗连字符串,使用程序设置,资本文件等中央.1.起首得先懂得上面的常识:
懂得一个名词:表达式语法
表达式语法格局:<%$...%>
它是ASP.NET2.0新增了一种声明性表达式语法,可在剖析页之前将值交换到页中.
ASP.NET表达式是基于运转时盘算的信息设置控件属性的一种声明性体例.
ASP.NET表达式次要使用在:毗连字符串,使用程序设置,资本文件等中央.
ASP.NET表达式的基础语法以下:
<%$expressionPrefix:expressionValue%>
上面演示表达式语法在毗连字符串和使用程序设置的使用:
a.表达式语法在毗连字符串的使用
将存储在Web.config文件中的毗连字符串的值设置为控件的毗连字符串属性
<ASP:SqlDataSourceID="SqlDataSource1"Runat="server"
SelectCommand="SELECT*FROMEmployees"
ConnectionString="<%$ConnectionStrings:NorthwindCon%>">
</asp:SqlDataSource>
<configuration>
<connectionStrings>
<addname="NorthwindCon"
connectionString="DataSource=yanfa0;IntegratedSecurity=SSPI;InitialCtalog=Northwind;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
b.表达式语法在使用程序设置的使用
利用表达式来援用在Web.config设置文件中界说的使用程序设置
<asp:LabelID="Label1"runat="server"Text="<%$AppSettings:Txt%>"></asp:Label>
<appSettings>
<addkey="Txt"value="Abc"/>
</appSettings>
实在表达式语法另有一个主要的使用,就是在资本文件中的利用,而资本文件恰是我完成当地化的基本.
地区性的格局设置
地区性称号和标识符称号遵守RFC1766尺度,详细请检察msdn
请看下图,抓取的部分地区性图片:
地区性一般分为三个范例:流动地区性、非特定地区性和特定地区性。
a.流动地区性不辨别地区性。可使用空字符串("")大概按地区性标识符0x007F来指定流动地区性,它与英语言语联系关系,但不与任何国度/区域联系关系。
b.非特定地区性是与某种言语联系关系但不与国度/区域联系关系的地区性。
c.特定地区性是与某种言语和某个国度/区域联系关系的地区性。
比方:"fr"(法语)长短特定地区性,而"fr-FR"(法语(法国))是特定地区性
出格提醒:"zh-CHS"(简体中文)和"zh-CHT"(繁体中文)长短特定地区性。
地区性是有条理布局的,即特定地区性的父级长短特定地区性,而非特定地区性的父级是InvariantCulture
使用ASP.NET2.0可轻松地逐页变动地区性设置
只需将UICulture和Culture(地区性)属性增加到.ASPx等相似页面内的Page指令便可
<%@PageCulture="Auto"UICulture="Auto"%>
要想对站点中的一切页面都设置不异的地区性设置,只需将以下元素增加到位于站点的根处的web.config文件中便可,如许就不用分离为每一个页面举行分派了
<globalizationuiCulture="auto"culture="auto"/>
还能够为ASP.NET指定一个默许地区性
以下指定页面的用户界面地区性是主动,默许地区性是英语,页的地区性是主动,默许地区性是英语(美国)
<globalizationuiCulture="auto:en"culture="auto:en-US"/>
Culture:唆使页的地区性设置
UICulture:指定用于页的用户界面(UI)地区性设置
B.设置言语首选项
主动检测功效所选择的默许Culture和UICulture偶然大概不是用户所必要的
比方:一个美国籍营业员离开中国出差,在中国总部上彀下营业单.这类情形下,Web使用程序应当为用户供应显式变动言语的功效,给他供应英文版的营业下单页
usingSystem.Threading;
usingSystem.Globalization;
protectedoverridevoidInitializeCulture()
{
//显式的指定地区为en,为美国籍营业员显现英文页
//实践使用中能够依据用户选择来静态设置言语
//还能够使用Profile来记着用户选择的言语,以便用户今后会见网站时主动进进响应言语页
Thread.CurrentThread.CurrentUICulture=newCultureInfo("en");
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture("en-US");
}
注重:对Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture所做的变动必要在InitializeCulture()办法中举行,由于对首选扫瞄器言语的主动检测是在页保存期的初期产生的
出格提醒:
CultureInfo类的实例化一样平常有两个路子,以下所示:
CultureInfoculture=CultureInfo.CreateSpecificCulture(name);
CultureInfoculture=newCultureInfo(name);
两者的辨别:
利用第一种办法,只能创立流动地区性或特定地区性的CultureInfo实例。
利用第二种办法,则是创建一个name所指定的地区性的CultureInfo实例,它能够是流动的,非特定的或特定地区性的
Thread类的CurrentCulture属性用来猎取或设置以后线程的地区性,它必需被设置为特定地区性。
假设Thread.CurrentThread.CurrentCulture=newCultureInfo("en");就会报错!
2.多言语的完成
实在完成是对照复杂的,只必要上面几个步骤
1.创立全局资本表
2.在session中寄存暗示以后的culture的变量,如“en-us”,"zh-cn"
3.创立一切页面的基类PageBase,掩盖InitializeCulture函数
4.页面上的文本值,表达式语法赋值
增加两个全局资本表
Strings.resx和Strings.en-us.resx(注重-前面的字符要切合RFC1766尺度,没带后缀的话就是默许值)
以下图:
PageBase
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Linq;
4usingSystem.Web;
5usingSystem.Globalization;
6///<summary>
7///SummarydescriptionforPageBase
8///</summary>
9publicclassPageBase:System.Web.UI.Page
10{
11publicPageBase()
12{
13//
14//TODO:Addconstructorlogichere
15//
16}
17protectedoverridevoidInitializeCulture()
18{
19stringcurrentCulture=(string)Session["Culture"];
20if(string.IsNullOrEmpty(currentCulture))
21{
22currentCulture="zh-cn";
23Session["Culture"]="zh-cn";
24}
25
26System.Threading.Thread.CurrentThread.CurrentUICulture=newSystem.Globalization.CultureInfo(currentCulture);
27System.Threading.Thread.CurrentThread.CurrentCulture=System.Globalization.CultureInfo.CreateSpecificCulture(currentCulture);
28
29}
30}
31
基础页面:
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Linq;
4usingSystem.Web;
5usingSystem.Web.UI;
6usingSystem.Web.UI.WebControls;
7usingSystem.Globalization;
8publicpartialclass_Default:PageBase
9{
10protectedvoidPage_Load(objectsender,EventArgse)
11{
12
13}
14protectedvoidbtnChinese_Click(objectsender,EventArgse)
15{
16Session["Culture"]="zh-cn";
17/////能够实验正文上面这句呈现的效果
18this.RegisterClientScriptBlock("reload","<script>window.location=window.self.location;</script>");
19}
20protectedvoidbtnEnglish_Click(objectsender,EventArgse)
21{
22Session["Culture"]="en-us";
23/////能够实验正文上面这句呈现的效果
24this.RegisterClientScriptBlock("reload","<script>window.location=window.self.location;</script>");
25}
26}
27
复杂的一个多言语的例子
弱点:切换言语时必要load两次
倡议:能够使用ajax哀求修正完session值后在实行window.location=window.self.location;
如:
1functionPageRefresh(language)
2{
3//利用JQUERY做ajax的哀求
4try
5{
6
7varvirthPath="http://localhost/MulitLanguage“;
8
9
10$.ajax({
11type:"POST",
12url:virthPath+"/AjaxHandler.ashx",///AjaxHandler.ashx中改动session值
13success:function(msg){
14ChangeLanguage_Rslt(msg);
15}
16});
17
18
19}
20catch(e)
21{
22alert(Error);
23}
24
25
26}
27
28functionChangeLanguage_Rslt(data)
29{
30if(data=="OK")
31window.location=window.self.location;
32
33}
34else
35{
36alert(data);
37}
38}
你所列的那些其实差不多都可以称为应用服务器(servlet应该说是一种语言更合适)java是开放的,相同的工具就会有很多公司在做,加上java已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。 asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦! 当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。 是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
页:
[1]