﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Baldwin's DNN</title>
    <description>在此研究DNN的所有相关课题，希望给DNN在中国的广为人知贡献一点绵薄之力....</description>
    <link>http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/blogid/1/Default.aspx</link>
    <language>zh-CN</language>
    <managingEditor>dnnsun@gmail.com</managingEditor>
    <webMaster>dnnsun@gmail.com</webMaster>
    <pubDate>Wed, 07 Jan 2009 11:33:29 GMT</pubDate>
    <lastBuildDate>Wed, 07 Jan 2009 11:33:29 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>SunBlog RSS Generator Version 2.1.0.0</generator>
    <item>
      <title>你需要么,dnn多语言解决方案?</title>
      <description>&lt;DIV style="TEXT-INDENT: 1em"&gt;目前dnn多语言解决方案是我这段时间研究的重点, 我接下来也许会写几篇相关文章阐述这些问题.&lt;/DIV&gt;
&lt;DIV style="TEXT-INDENT: 1em"&gt;切入正题, 本地化是ASP.NET的特性, 无疑dnn也会直接支持, 但是事实上并不是很乐观, 因为dnn本身也只是在表面上作些文章吧了, 如果你想利用dnn实现多语言门户(Portals), 那你可能想错了, 除非你重新开发或在模块级别上定制的开发支持多语言. 那dnn究竟支持多语言到何种程度呢? 让我慢慢道来, 其实dnn默认支持的多语言只局限于页面标签(Tags,Token etc), 比如登陆链接, 编辑模块时的字段Label等等, 而这些并非我们通常理解的内容本地化(多语言支持). 当然你可以通过下列两种解决方案来实现:&lt;/DIV&gt;
&lt;DIV&gt;&lt;STRONG&gt;1) 模块级别的多语言开发,但你的内容可能需要存储好几个版本(根据你站点支持的语言总数)&lt;BR&gt;   2) 站点级别的多语言开发,也就是你需要发布好几个站点(根据你需要支持的语言总数)&lt;/STRONG&gt;&lt;BR&gt;目前在DNN模块市场也有一些模块按照第一种思路做到了内容上支持多语言,比如:&lt;BR&gt;&lt;FONT color=#000000&gt;1) MLSkinHelper, PageLocalization Module,Language Selector skin object 等等&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.apollo-software.nl/Home/tabid/36/language/en-US/Default.aspx"&gt;http://www.apollo-software.nl/Home/tabid/36/language/en-US/Default.aspx&lt;/A&gt;&lt;BR&gt;最经典的范例就是&lt;A href="http://declic-video-fx.com/"&gt;http://declic-video-fx.com/&lt;/A&gt;,它利用apollo-software相关模块实现了多语言站点,可以说基本上实现了多语言支持的所有功能.&lt;BR&gt;&lt;FONT color=#000000&gt;2) Localization Extensions: Easily implement multilingual portals &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.adequation-dotnetnuke.com/en/AboutUs.aspx"&gt;http://www.adequation-dotnetnuke.com/en/AboutUs.aspx&lt;/A&gt;&lt;BR&gt;该站点的公司主页就是利用来实现了多语言支持,请访问&lt;A href="http://www.adequation-informatique.com/en/Home.aspx"&gt;http://www.adequation-informatique.com/en/Home.aspx&lt;/A&gt;&lt;BR&gt;&lt;FONT color=#ff6600&gt;&lt;FONT color=#000000&gt;3) 这是一个免费的模块Magic Content,同时也是DNN Forget下的一个新模块,该模块属于proeder.network.consult公司.&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;Magic Content is a multi-lingual content publishing module for the DotNetNuke plattform that can be used as a replacement for the current Text/HTML module. It's very easy to use and extends content publishing by many useful features. * one edit tab for each portal locale * advanced edit tab for role based content management * newsletter tab for sending content out via e-mail * replacement token tab.&lt;BR&gt;&lt;A href="http://www.codeplex.com/MagicContent"&gt;http://www.codeplex.com/MagicContent&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.portalfabrik.net/"&gt;http://www.portalfabrik.net/&lt;/A&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;相关链接:&lt;BR&gt;&lt;/FONT&gt;How to localization with dnnMenu or solpartMenu?&lt;BR&gt;&lt;A href="http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/76/threadid/224072/scope/posts/Default.aspx"&gt;http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/76/threadid/224072/scope/posts/Default.aspx&lt;/A&gt;&lt;BR&gt;how to localization in skin?&lt;BR&gt;&lt;A href="http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/109/threadid/222245/scope/posts/Default.aspx"&gt;http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/109/threadid/222245/scope/posts/Default.aspx&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="TEXT-INDENT: 1em"&gt;在此我不就以上话题详细阐述如何开发多语言模块等等细节问题, 以后也许有机会我会讲解一些模块的开发经验等等, 现在我只是简单说明一个相关的问题, 就是皮肤级别上的多语言支持. 比如说我有一个需求,客户需要在某个皮肤添加说明性文字或提示, 类似于 当前位置:首页/新闻中心/某某新闻, 这"当前位置"需要进行本地化, 例如You Are Here:(English version), 当前位置(Chinese version). 我们该如何解决这一问题, 目前dnn没有在皮肤上支持本地化,但在皮肤控件上是支持的. 我曾在论坛逛了一些时候,发现dnn牛人Sebastian Leupold说:&lt;BR&gt;&lt;EM&gt;&lt;FONT color=#800000&gt;DNN 5 will allow for more flexibility using the [Text] skin object, which supports core token replace, which gives you more flexibility and a bunch of  additional tokens and formatting options.&lt;/FONT&gt;&lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV style="TEXT-INDENT: 1em"&gt;好吧,那我们就先来尝个新鲜,自己定制一个简单的皮肤本地化控件WindyText.首先需要在网站根目录下的admin/Skins文件夹里创建一个UserControl(请注意该文件夹下的代码不需要重新编译,如果你是以站点形式发布的),该控件只有三个属性(DefaultValue,CssClass和LocalizationKey),CssClass自然不需要解释了,就是定义该皮肤对象的样式,而LocalizationKey也表示你需要显示说明性文字或提示对应在资源文件的键值,如果你曾经开发过模块,应该很清楚,最后DefaultValue则是默认显示信息,为了防止资源文件里没有定义键值对.比如你设置LocalizationKey="AA",那么你对应的资源文件(WindyText.ascx.resx或WindyText.ascx.zh-CN.resx)里边就应该有一组键值对AA.Text = "你需要显示的说明性文字或提示".代码实现其实很简单,其实就是定制开发皮肤对象(Skin Object)的过程,比如说你必须继承SkinObjectBase等等:&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;DIV class=dp-highlighter id=vb&gt;
&lt;DIV class=bar&gt; &lt;/DIV&gt;
&lt;OL class=dp-vb&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=preprocessor&gt;#Region "Public Members" &lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt; DefaultValue() &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Get&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;                &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Return&lt;/SPAN&gt;&lt;SPAN&gt; _DefaultValue   &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Get&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Set&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; Value &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;)   &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;                _DefaultValue = Value   &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Set&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt; LocalizationKey() &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Get&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;                &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Return&lt;/SPAN&gt;&lt;SPAN&gt; _LocalizationKey   &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Get&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Set&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; Value &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;)   &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;                _LocalizationKey = Value   &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Set&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Property&lt;/SPAN&gt;&lt;SPAN&gt; CssClass() &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Get&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;                &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Return&lt;/SPAN&gt;&lt;SPAN&gt; _cssClass   &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Get&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Set&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; Value &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;)   &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;                _cssClass = Value   &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Set&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Property&lt;/SPAN&gt;  
&lt;LI class=""&gt;&lt;SPAN&gt;&lt;SPAN class=preprocessor&gt;#End Region &lt;/SPAN&gt; &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt; &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;&lt;SPAN class=preprocessor&gt;#Region " Event Handlers " &lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Private&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Sub&lt;/SPAN&gt;&lt;SPAN&gt; Page_Load(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; sender &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Object&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; e &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.EventArgs) &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Handles&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;MyBase&lt;/SPAN&gt;&lt;SPAN&gt;.Load   &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;If&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Not&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;.IsNullOrEmpty(LocalizationKey) &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Then&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;                &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; localizationString &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt; = Localization.GetString(LocalizationKey, Localization.GetResourceFile(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Me&lt;/SPAN&gt;&lt;SPAN&gt;, MyFileName))   &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;                lblLocalization.Text = IIF(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;String&lt;/SPAN&gt;&lt;SPAN&gt;.IsNullOrEmpty(localizationString),DefaultValue,localizationString)   &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;If&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;If&lt;/SPAN&gt;&lt;SPAN&gt; CssClass &lt;&gt; &lt;/SPAN&gt;&lt;SPAN class=string&gt;""&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Then&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;                lblLocalization.CssClass = CssClass   &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Else&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;                lblLocalization.CssClass = &lt;/SPAN&gt;&lt;SPAN class=string&gt;"Normal"&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN&gt;            &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;If&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;        &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;Sub&lt;/SPAN&gt;  
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=preprocessor&gt;#End Region&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;LINK href="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" type=text/css rel=stylesheet&gt;&lt;/DIV&gt;      我已把WindyText皮肤对象打包一下,你可以&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;&lt;A href="http://www.dnnsun.com/Portals/0/Download/WindyText.zip" target=_blank&gt;从此下载&lt;/A&gt;&lt;/FONT&gt;&lt;/STRONG&gt;.安装步骤如下:&lt;BR&gt;     1) 解压缩zip文件,拷贝WindyText.ascx,WindyText.ascx.vb,WindyText.xml到站点根目录下的admin/Skins&lt;BR&gt;     2) 拷贝WindyText.ascx.resx,WindyText.ascx.zh-CN.resx到站点根目录下的admin/Skins/App_LocalResources&lt;BR&gt;那我们该如何使用WindyText呢,首先你需要在页面注册一下,操作类似其他皮肤控件那样:&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;DIV class=dp-highlighter id=xml&gt;
&lt;DIV class=bar&gt; &lt;/DIV&gt;
&lt;OL class=dp-xml&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=tag&gt;&lt;&lt;/SPAN&gt;&lt;SPAN&gt;%@ Register &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;TagPrefix&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"dnn"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;TagName&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"WINDYTEXT"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;Src&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"~/Admin/Skins/WindyText.ascx"&lt;/SPAN&gt;&lt;SPAN&gt; %&lt;/SPAN&gt;&lt;SPAN class=tag&gt;&gt;&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;然后你就可以直接使用WindyText了,例如:&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;DIV class=dp-highlighter id=xml&gt;
&lt;DIV class=bar&gt; &lt;/DIV&gt;
&lt;OL class=dp-xml&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=tag&gt;&lt;&lt;/SPAN&gt;&lt;SPAN class=tag-name&gt;div&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;class&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"siteBreadCrumb"&lt;/SPAN&gt;&lt;SPAN class=tag&gt;&gt;&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN&gt;    &lt;/SPAN&gt;&lt;SPAN class=tag&gt;&lt;&lt;/SPAN&gt;&lt;SPAN class=tag-name&gt;dnn:WINDYTEXT&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"lblbreadcrumbTip"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;LocalizationKey&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"breadcrumbTip"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;runat&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"server"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=tag&gt;/&gt;&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt; 
&lt;LI class=""&gt;&lt;SPAN class=tag&gt;    &lt;&lt;/SPAN&gt;&lt;SPAN class=tag-name&gt;dnn:BREADCRUMB&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;runat&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"server"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;ID&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"dnnBreadCrumb"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;Separator&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;" / "&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=attribute&gt;RootLevel&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN class=attribute-value&gt;"0"&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=tag&gt;/&gt;&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt; 
&lt;LI class=alt&gt;&lt;SPAN class=tag&gt;&lt;SPAN class=tag-name&gt;div&lt;/SPAN&gt;&lt;SPAN class=tag&gt;&gt;&lt;/SPAN&gt;&lt;SPAN&gt;  &lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;请注意你需要在资源文件里定义对应键值,比如现在我设置的是breadcrumbTip.Text = "You Are Here:"(WindyText.ascx.resx版本)和breadcrumbTip.Text = "当前位置:"(WindyText.ascx.zh-CN.resx版本).到此你就大功告成了.目前&lt;A href="http://www.dnnsun.com"&gt;http://www.dnnsun.com&lt;/A&gt;就是利用WindyText这一皮肤控件实现的,这一控件还要其他很有用的功能,以后有机会将继续扩展一些更强大的功能. ^_^&lt;/DIV&gt;</description>
      <link>http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/entryid/36/Default.aspx</link>
      <author>dnnsun@gmail.com</author>
      <comments>http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/entryid/36/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dnnsun.com/Community/BaldwinsBlog/tabid/67/entryid/36/Default.aspx</guid>
      <pubDate>Tue, 13 May 2008 06:19:57 GMT</pubDate>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.dnnsun.com/DesktopModules/SunBlog/Trackback.aspx?id=36</trackback:ping>
    </item>
  </channel>
</rss>