sapphire01 2007-11-14 17:00
ASP.NET 2.0 本地化技术之研究 [转]
众所周知ASP.NET 2.0里对本地化(Localization)做了很多工作,大大简化了开发过程。今天终于能抽出时间研究一下这个技术了,资料很多,但大多带着一股咬文嚼字的翻译味道,So......自己写一篇。
1.使用工具自动生成本地化资源(LocalResources)
2.原来Localizable AttributeProperty是这么回事呀
3.手工添加本地化资源
4.显示使用本地化资源
5.全局资源的使用(GlobalResources)
6.如何在后台编程时使用这两种资源
7.编程切换语言设置
8.使用图片资源
9.代码下载
[b]1.使用工具自动生成本地化资源(LocalResources)
[/b]首先当然是建立一个WEB工程啦,如图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/CreateWeb.jpg[/img]
双击Default.aspx,切换到[设计]视图,从工具箱里拖一个Button进来。点击菜单中的[工具]->[生成本地资源],如图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/CreateLocalResources.jpg[/img]
这时发现在解决方案方案视图里自动增加了一份本地资源,如下图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/FirstSolution.jpg[/img]
切换到属性视图,可以看到Text和ToolTip都被加上了一个红色符号,提示“属性是用表达形式隐式绑定的”,如下图所示:([color=red]注意:只有在视图状态下选中控件才能看到这两个属性哟[/color])
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/RedPropertyView.jpg[/img]
为了增加对多语言的支持,我们现在右键Default.aspx.resx,点击复制,再选中App_LocalResources目录,点击粘贴,将“副本 Default.aspx.resx”重命名为Default.aspx.en-us.resx,如图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/SecondSolution.jpg[/img]
分别编辑Default.aspx.resx和Default.aspx.en-s.resx 的内容,如下图示:
Default.aspx.resx
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/FirstDefaultResx.jpg[/img]
Default.aspx.en-s.resx
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/FirstDefaultEnResx.jpg[/img]
打开Default.aspx,在 Page 标签里添加Culture="auto" UICulture="auto",如下所示:
[size=13px][color=#000000]<%[/color][color=#000000]@ Page Language[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]C#[/color][color=#000000]"[/color][color=#000000] AutoEventWireup[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]true[/color][color=#000000]"[/color][color=#000000] CodeFile[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]Default.aspx.cs[/color][color=#000000]"[/color][color=#000000] Inherits[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]_Default[/color][color=#000000]"[/color][color=#000000] meta:resourcekey[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]PageResource1[/color][color=#000000]"[/color][color=#000000] UICulture[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]auto[/color][color=#000000]"[/color][color=#000000] Culture[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]auto[/color][color=#000000]"[/color]
[color=#000000]%>[/color][/size]
只有这样,后面才能获取浏览器的首选语言设置。如果要加到 Web.config 中,如下所示:
[size=13px]
[color=#0000ff]<[/color][color=#800000]system.web[/color]
[color=#0000ff]>[/color]
[color=#0000ff] <[/color][color=#800000]globalization [/color][color=#ff0000]uiCulture[/color][color=#0000ff]="auto"[/color][color=#ff0000] culture[/color][color=#0000ff]="auto"[/color]
[color=#0000ff]/>[/color]
[color=#0000ff]</[/color][color=#800000]system.web[/color][color=#0000ff]>[/color]
[/size]
运行网站,效果如下图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example01.jpg[/img]
点击IE菜单的[工具]->[Internet 选项],在弹出的对话框中点[常规]选项卡的[语言]按钮,弹出[语言首选项]对话框,如下图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language01.jpg[/img]
点击[添加]按钮,选择英语(美国),并上移到第一位,如下图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language02.jpg[/img]
一路[确定]点下来,刷新页面,可以看到Button的标题变成“Hello World”啦,如下图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example02.jpg[/img]
综上所述,使用工具自动生成本地化资源,并隐式的绑定到控件上,来实现页面的本地化是非常简单的,但存在以下几项问题:
1)必须为每个页生成多份资源文件;
2)只有控件属性中被标识为Localizable(true)才可能被工具扫描到;
3)由于是对页面包含的控件进行扫描,所以最好是在页面布局基本确定后再使用该工具,并且在编辑完 资源文件后不要再使用该工具,如果不幸你这样做了。。。会发现默认的资源文件被清空了
[b]2.原来Localizable AttributeProperty是这么回事呀
[/b]在我前天写的随笔[url=http://www.cnblogs.com/reonlyrun/archive/2007/03/12/672295.html][color=#80b7d5]开发和使用自定义服务器控件[/color][/url]中,一直对属性为什么要使用Localizable(true)不清楚。
[size=13px][color=#000000] [
Bindable([/color][color=#0000ff]true[/color][color=#000000]),
Category([/color][color=#000000]"[/color][color=#000000]Appearance[/color][color=#000000]"[/color][color=#000000]),
DefaultValue([/color][color=#000000]"[/color][color=#000000]Hello[/color][color=#000000]"[/color][color=#000000]),
Description([/color][color=#000000]"[/color][color=#000000]The welcome message text.[/color][color=#000000]"[/color][color=#000000]),
Localizable([/color][color=#0000ff]true[/color][color=#000000])
]
[/color][color=#0000ff]public[/color]
[color=#0000ff]virtual[/color]
[color=#0000ff]string[/color][color=#000000] Text
{
[/color][color=#0000ff]get[/color][color=#000000]
{
[/color][color=#0000ff]string[/color][color=#000000] s [/color][color=#000000]=[/color][color=#000000] ([/color][color=#0000ff]string[/color][color=#000000])ViewState[[/color][color=#000000]"[/color][color=#000000]Text[/color][color=#000000]"[/color][color=#000000]];
[/color][color=#0000ff]return[/color][color=#000000] (s [/color][color=#000000]==[/color]
[color=#0000ff]null[/color][color=#000000]) [/color][color=#000000]?[/color]
[color=#000000]"[/color][color=#000000]Hello[/color][color=#000000]"[/color][color=#000000] : s;
}
[/color][color=#0000ff]set[/color][color=#000000]
{
ViewState[[/color][color=#000000]"[/color][color=#000000]Text[/color][color=#000000]"[/color][color=#000000]] [/color][color=#000000]=[/color][color=#000000] value;
}
}
[/color][/size]
查了许多关于WEB控件开发的资料,其中都对这个AttributeProperty做了忽略,原来只有当控件的属性声明为Localizable(true)时,VS的生成本地资源工具才会扫描到。 [img]http://www.cnblogs.com/CuteSoft_Client/CuteEditor/images/emteeth.gif[/img]
[b]3.手工添加本地化资源
[/b]第一点中提到过生成本地资源工具只能扫描到页面已经包含的控件,那么如果后面由于开发需要又增加了一个新的控件要怎么办呢?虽然大部人都能自己想到,但还是写一下吧。
从工具箱再拖一个Label控件到页面上,切换到源视图,修改代码如下:
[size=13px][color=#0000ff]<[/color][color=#800000]asp:Label [/color][color=#ff0000]ID[/color][color=#0000ff]="Label1"[/color][color=#ff0000] runat[/color][color=#0000ff]="server"[/color][color=#ff0000] meta:resourcekey[/color][color=#0000ff]="Label1Resource1"[/color][color=#ff0000] Text[/color][color=#0000ff]="Label"[/color][color=#0000ff]></[/color][color=#800000]asp:Label[/color][color=#0000ff]>[/color][/size]
再修改两份本地资源文件,为Label1添加Label1Resource1键值的相关资源,如下图所示:
Default.aspx.resx
[img=692,172]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language03.jpg[/img]
Default.aspx.en-s.resx
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language04.jpg[/img]
再运行程序,切换语言设置,可以看到Label1的效果和Button1是一样的,如图所示:
中文(中国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example03.jpg[/img]
英语(美国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example04.jpg[/img]
[b]4.显示使用本地化资源
[/b]OK,前面提到的都是隐式使用本地化资源,那么如何显示的使用本地化资源呢?相对于隐式来讲,显示更加灵活,功能也更强大。
只需要将刚才的Label1的代码,
[size=13px][color=#0000ff]<[/color][color=#800000]asp:Label [/color][color=#ff0000]ID[/color][color=#0000ff]="Label1"[/color][color=#ff0000] runat[/color][color=#0000ff]="server"[/color][color=#ff0000] meta:resourcekey[/color][color=#0000ff]="Label1Resource1"[/color][color=#ff0000] Text[/color][color=#0000ff]="Label"[/color][color=#0000ff]></[/color][color=#800000]asp:Label[/color][color=#0000ff]>[/color][/size]
修改为,即可。
[size=13px][color=#0000ff]<[/color][color=#800000]asp:Label [/color][color=#ff0000]ID[/color][color=#0000ff]="Label1"[/color][color=#ff0000] runat[/color][color=#0000ff]="server"[/color][color=#ff0000]
Text[/color][color=#0000ff]="<%$ Resources:Label1Resource1.Text %>"[/color][color=#ff0000]
ToolTip[/color][color=#0000ff]="<%$ Resources:Label1Resource1.ToolTip %>"[/color]
[color=#0000ff]>[/color]
[color=#0000ff]</[/color][color=#800000]asp:Label[/color][color=#0000ff]>[/color][/size]
这时切换到[设计]视图,选中Label1控件,查看属性视图,会发现Text和ToolTip被加上的是蓝色的符号,提示“属性绑定了表达式”。跟上面提到的红色符号比较,少了“隐式”二字,这也就是所谓的显式和隐定的来源吧,如下图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/BluePropertyView.jpg[/img]
sapphire01 2007-11-14 17:00
[b]5.全局资源的使用(GlobalResources)
[/b]前面提到过,本地资源需要为每个页面分别生成多个资源文件,虽然这样看起来分门别类的挺清楚,但在实际应用过程中,我们有许多资源是可以共享的,总不能不停的重复写来写去吧。其实这种情况我们可以用全局资源(GlobalResources)来解决。
在资源方案视图中选中网站,右键,点击[添加ASP.NET 文件夹]->[App_GlobalResources],如图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/AddGlobalResources.jpg[/img]
再选中App_GlobalResources文件夹,右键,点击[添加新项],在弹出的对话框中选中“资源文件”,命名为“LocalizedText.resx”,点击[添加],如图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/AddResourcesFile.jpg[/img]
双击LocalizedText.resx进行编辑,添加一条新的字符串资源,如图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language05.jpg[/img]
复制LocalizedText.resx,粘贴到App_GlobalResources目录,重命名为LocalizedText.en-us.resx,双击进行编辑,添加一条新的字符串资源,如图所示:
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language06.jpg[/img]
打开Default.aspx,切换到[设计]视图,从工具箱拖一个TextBox控件到页面上。切换到[源]视图,修改代码:
[size=13px][color=#0000ff]<[/color][color=#800000]asp:TextBox [/color][color=#ff0000]ID[/color][color=#0000ff]="TextBox1"[/color][color=#ff0000] runat[/color][color=#0000ff]="server"[/color][color=#ff0000] Text[/color][color=#0000ff]="<%$ Resources:LocalizedText, Msg1 %>"[/color][color=#0000ff]></[/color][color=#800000]asp:TextBox[/color][color=#0000ff]>[/color][/size]
运行程序,切换语言设置,可以看到全局资源的使用效果了,如图所示:
中文(中国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example05.jpg[/img]
英语(美国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example06.jpg[/img]
[color=red]注意:全局资源不能使用隐式声明。[/color]
[b]6.如何在后台编程时使用这两种资源[/b]
前面提到的都是在网页中使用这两种资源,那么如何在后台使用这两种资源呢?
打开Default.aspx,切换到[设计]视图,从工具箱拖一个Localize控件(Literal 控件与 Label 控件类似,但 Literal 控件不允许对所显示的文本应用样式。可以通过设置 Text 属性,以编程方式控制在控件中显示的文本。)到页面上。双击Button1,添加以下实现
[size=13px]
[color=#0000ff]protected[/color]
[color=#0000ff]void[/color][color=#000000] Button1_Click([/color][color=#0000ff]object[/color][color=#000000] sender, EventArgs e)
{
Localize1.Text [/color][color=#000000]=[/color][color=#000000] (String)GetLocalResourceObject([/color][color=#000000]"[/color][color=#000000]Label1Resource1.Text[/color][color=#000000]"[/color][color=#000000]) [/color][color=#000000]+[/color]
[color=#000000]"[/color]
[color=#000000]"[/color]
[color=#000000]+[/color][color=#000000]
(String)GetGlobalResourceObject([/color][color=#000000]"[/color][color=#000000]LocalizedText[/color][color=#000000]"[/color][color=#000000], [/color][color=#000000]"[/color][color=#000000]Msg1[/color][color=#000000]"[/color][color=#000000]);
}[/color][/size]
记得添上这个引用
[size=13px][color=#0000ff]using[/color][color=#000000] System.Globalization;[/color][/size]
运行程序,切换语言设置,可以看到和前面使用表达式调用资源的效果是一样的,如图所示:
中文(中国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example07.jpg[/img]
英语(美国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example08.jpg[/img]
[b]7.动态切换语言设置[/b]
以上的介绍都是通过IE浏览器获取语言设置,其实我们可以自己设置使用哪种语言。
1)通过在每个页面里的Page节指定
[size=13px][color=#000000]<%[/color][color=#000000]@ Page Culture[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]en-us[/color][color=#000000]"[/color][color=#000000] UICulture[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]en-us[/color][color=#000000]"[/color]
[color=#000000]%>[/color][/size]
如上所设,该页将使用en-us的语言设置。
[color=#fe0000]注意:这只是个概要式写法,实际的页面中的Page一般都包含更多的属性。[/color]
2)通过在Web.Config里的globalization节指定
[size=13px][color=#0000ff]<[/color][color=#800000]system[/color][color=#ff0000].web[/color][color=#0000ff]>[/color]
[color=#0000ff]<[/color][color=#800000]globalization [/color][color=#ff0000]Culture[/color][color=#0000ff]="en-us"[/color][color=#ff0000] UICulture[/color][color=#0000ff]="en-us"[/color]
[color=#0000ff]/>[/color]
[color=#0000ff]</[/color][color=#800000]system.web[/color][color=#0000ff]>[/color][/size]
3)当然还有一种就是通过编程动态切换语言设置啦,这也是实际项目中经常用到的方式
打开Default.aspx,切换到[源]视图,添加如下代码
[size=13px]
[color=#0000ff]<[/color][color=#800000]a [/color][color=#ff0000]href[/color][color=#0000ff]="?currentculture=zh-cn"[/color][color=#0000ff]>[/color][color=#000000]中文(中国)[/color][color=#0000ff]</[/color][color=#800000]a[/color][color=#0000ff]>[/color]
[color=#ff0000] [/color]
[color=#0000ff]<[/color][color=#800000]a [/color][color=#ff0000]href[/color][color=#0000ff]="?currentculture=en-us"[/color][color=#0000ff]>[/color][color=#000000]English(USA)[/color][color=#0000ff]</[/color][color=#800000]a[/color][color=#0000ff]>[/color]
[/size]
打开Default.aspx.cs,添加如下代码
[size=13px][color=#000000] String s;
[/color][color=#0000ff]protected[/color]
[color=#0000ff]override[/color]
[color=#0000ff]void[/color][color=#000000] InitializeCulture()
{
s [/color][color=#000000]=[/color][color=#000000] Request.QueryString[[/color][color=#000000]"[/color][color=#000000]currentculture[/color][color=#000000]"[/color][color=#000000]];
[/color][color=#0000ff]if[/color][color=#000000] ([/color][color=#000000]![/color][color=#000000]String.IsNullOrEmpty(s))
{
[/color][color=#008000]//[/color][color=#008000]UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
[/color][color=#008000]//[/color][color=#008000]Culture - 决定各种数据类型是如何组织,如数字与日期[/color]
[color=#000000] Thread.CurrentThread.CurrentUICulture [/color][color=#000000]=[/color]
[color=#0000ff]new[/color][color=#000000] CultureInfo(s);
Thread.CurrentThread.CurrentCulture [/color][color=#000000]=[/color][color=#000000] CultureInfo.CreateSpecificCulture(s);
}
}[/color][/size]
记得添上这个引用
[size=13px][color=#0000ff]using[/color][color=#000000] System.Threading;[/color][/size]
运行程序,分别点击新增加的两个链接,效果如图所示:
中文(中国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example13.jpg[/img]
Enlish(USA)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example14.jpg[/img]
sapphire01 2007-11-14 17:01
[b]8.使用图片资源[/b]
分别编辑LocalizedText.resx和LocalizedText.en-su.resx,添加图片资源,如图所示:
LocalizedText.resx
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language07.jpg[/img]
LocalizedText.en-su.resx
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Language08.jpg[/img]
[color=red]注意:当图形文件添加到图形资源里时,系统会自动去除扩展名并把“-”替换成“_”,如上图,我的文件名为“en-us-flag.png”添加到资源里变成了“en_us_flag”。[/color]
打开Default.aspx,切换到[设计]视图,从工具箱拖一个Image控件到页面上。打开Default.aspx.cs,添加如下代码
[size=13px]
[color=#0000ff]protected[/color]
[color=#0000ff]void[/color][color=#000000] Page_Load([/color][color=#0000ff]object[/color][color=#000000] sender, EventArgs e)
{
Image1.ImageUrl [/color][color=#000000]=[/color]
[color=#000000]"[/color][color=#000000]~/Image.aspx?currentculture=[/color][color=#000000]"[/color]
[color=#000000]+[/color][color=#000000] s;
}
[/color][/size]
选中网站右键,创建一个新的WEB窗体,命名为Image.aspx,编辑该页面,在Page节增加如下代码
[size=13px][color=#000000]<%[/color][color=#000000]@ Page Language[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]C#[/color][color=#000000]"[/color][color=#000000] AutoEventWireup[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]true[/color][color=#000000]"[/color][color=#000000] CodeFile[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]Image.aspx.cs[/color][color=#000000]"[/color][color=#000000] Inherits[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]Image[/color][color=#000000]"[/color][color=#000000] Culture[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]auto[/color][color=#000000]"[/color][color=#000000] UICulture[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]auto[/color][color=#000000]"[/color][color=#000000]%>[/color][/size]
[color=red]注意:默认创建的WEB窗体的Page节,不包括Culture和UICulture这两个属性,一定要手工添上,切记!
[color=#000000]打开Image.aspx.cs,添加如下代码
[size=13px]
[color=#0000ff]protected[/color]
[color=#0000ff]override[/color]
[color=#0000ff]void[/color][color=#000000] InitializeCulture()
{
String s [/color][color=#000000]=[/color][color=#000000] Request.QueryString[[/color][color=#000000]"[/color][color=#000000]currentculture[/color][color=#000000]"[/color][color=#000000]];
[/color][color=#0000ff]if[/color][color=#000000] ([/color][color=#000000]![/color][color=#000000]String.IsNullOrEmpty(s))
{
[/color][color=#008000]//[/color][color=#008000]UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
[/color][color=#008000]//[/color][color=#008000]Culture - 决定各种数据类型是如何组织,如数字与日期[/color]
[color=#000000] Thread.CurrentThread.CurrentUICulture [/color][color=#000000]=[/color]
[color=#0000ff]new[/color][color=#000000] CultureInfo(s);
Thread.CurrentThread.CurrentCulture [/color][color=#000000]=[/color][color=#000000] CultureInfo.CreateSpecificCulture(s);
}
}
[/color][color=#0000ff]protected[/color]
[color=#0000ff]void[/color][color=#000000] Page_Load([/color][color=#0000ff]object[/color][color=#000000] sender, EventArgs e)
{
System.Drawing.Bitmap img [/color][color=#000000]=[/color][color=#000000] (System.Drawing.Bitmap)GetGlobalResourceObject(
[/color][color=#000000]"[/color][color=#000000]LocalizedText[/color][color=#000000]"[/color][color=#000000],
CultureInfo.CurrentCulture.Name.ToLower().Replace([/color][color=#000000]"[/color][color=#000000]-[/color][color=#000000]"[/color][color=#000000], [/color][color=#000000]"[/color][color=#000000]_[/color][color=#000000]"[/color][color=#000000]) [/color][color=#000000]+[/color]
[color=#000000]"[/color][color=#000000]_flag[/color][color=#000000]"[/color][color=#000000]);
System.IO.MemoryStream ms [/color][color=#000000]=[/color]
[color=#0000ff]new[/color][color=#000000] System.IO.MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType [/color][color=#000000]=[/color]
[color=#000000]"[/color][color=#000000]image/jpeg[/color][color=#000000]"[/color][color=#000000];
Response.BinaryWrite(ms.ToArray());
img.Dispose();
ms.Dispose();
ms.Flush();
}[/color][/size]
当然,别忘了添上这两个引用 [size=13px][color=#0000ff]using[/color][color=#000000] System.Threading;
[/color][color=#0000ff]using[/color][color=#000000] System.Globalization;[/color][/size]
[/color][/color][color=#a6a9b9]运行程序,分别点击两个链接,效果如图所示:
中文(中国)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example15.jpg[/img]
English(USA)
[img]http://www.cnblogs.com/images/cnblogs_com/reonlyrun/blog/Example16.jpg[/img]
[/color]
[color=#a6a9b9][color=red][color=#000000][b]9.代码下载
[/b]下载地址:[url=http://www.cnblogs.com/Files/reonlyrun/WebLocalizationTaste.rar][color=#80b7d5]http://www.cnblogs.com/Files/reonlyrun/WebLocalizationTaste.rar[/color][/url][/color][/color]
[/color]
songhailin888 2008-1-28 15:08
偶还没接触过这些工具,今天又学习了,现在的工具确实很强大啊,。NET我的最爱。LZ辛苦了啊,谢谢分享。
earthyoungman 2008-4-3 11:02
学习一下,谢谢
chendong933 2008-4-8 16:05
路过, 浏览. 楼主辛苦~