QBlog

This blog will record the growth associated with the Autumn Garden distance and the history of the development progress and other relevant circumstances
Bulletin
Welcome to Autumn Garden official blog, please: download and use CYQBlog system, and make your comments and Recommendations.
Article Archive
Article
秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)
2011/3/18 0:12:18

文章回顾:

ps:秋色园QBlog下载地址http://www.cyqdata.com/download/article-detail-427

上节回顾:

上一节 秋色园QBlog技术原理解析:独创的多语言翻译机制(九) 中,介绍了秋色园QBlog的多语言翻译机制,严重的解放了coder的劳动力,将翻译的职责分离给美工界。

事隔10来天,本篇接给力,为大伙演示一下完整的内容填充及页面翻译。

开始动手了:

一:整体介绍解决方案:

从上往下看,比上一个示例多了以下内容:

1:数据库一个:myspace.mdb,采用的是秋色园的的数据库,里面还存有不少数据。

2:Language.ashx:多语言处理程序,用来翻译用的。

3:UrlRewriteEntity:增加的静态内容项目,放了一条SQL和表枚举

OK,增加的东西并不多,其它的都是上次示例的内容了,不知道的回头看起吧。

二:多语言翻译

1:正如上节示例中,一次性的批量翻译代码:

        private void Translate(XmlHelper doc)
        {
            System.Xml.XmlNodeList list = doc.GetList("*", "key");//获取所有带key标签的节点
            System.Xml.XmlAttribute attr = null;
            if (list != null && list.Count > 0)
            {
                string key = null;
                for (int i = 0; i < list.Count; i++)
                {
                    attr = list[i].Attributes["key"];
                    key = attr.Value;
                    list[i].InnerXml = _Language.Get(key);//翻译
                    list[i].Attributes.Remove(attr);//移除key属性
                }
            }
            list = doc.GetList("*", "keyvalue");//获取所有带keyvalue标签的节点
            if (list != null && list.Count > 0)
            {
                string key = null;
                for (int i = 0; i < list.Count; i++)
                {
                    attr = list[i].Attributes["keyvalue"];
                    key = attr.Value;
                    list[i].Attributes["value"].InnerXml = _Language.Get(key);//翻译
                    list[i].Attributes.Remove(attr);//移除keyvalue属性
                }
            }
        }

2:HttpCustom业务流程里,需要增加调用翻译这么一行

        private void Page_PreLoad()
        {
            if (_Document.Load(Context.Server.MapPath("Skin/system_health/index.html")))
            {
                CssAndImg(_Document);
                Translate(_Document);
            }
        }

3:URL重写,将语言切换路径重定向到Lanuage.ashx处理程序中

        public void HttpUrlRewrite(HttpContext context)
        {
            string url = context.Request.Url.ToString();
            if (url.Contains(".css") || url.Contains(".jpg") || url.Contains(".png"))//放到css和jpg图片
            {
                return;
            }
            if (url.Contains("lang"))
            {
                context.RewritePath("~/Language.ashx", null, "url=" + url);
            }
            else
            {
                //--这里要做很多Url逻辑处理
                context.RewritePath("~/Default.ashx", null, "url=" + url);
            }
        }

4:Language.ashx处理一下,然后返回原来页面

public class Language : HttpCustom
{
    protected override void Page_Load()
    {
        string url = Request["url"];
        string lanKey = url.Substring(url.LastIndexOf('/')+1);
        Language.SetToCookie(lanKey.Substring(0, 1).ToUpper() + lanKey.Substring(1));
        Context.Response.Redirect(Context.Request.UrlReferrer.ToString());

    }
}

OK,多语言处理就算结束了,预览效果?不急,等把内容填充也一并完成先吧。

三:页面内容填充

1:创造类似CMS般的约定语法

示例:

<ul class="evt_hots_list" name="catelist" id="16" count="8">
      <li><a href="http://www.cyqdata.com">省略内容</a></li>
</ul>

说明:

1:catelist,一个约定的标签,名称分类列表

2:id,就是分类的id了。

3:count,就是循环多少条

4:Li那一行,装饰用的,因为最终它是被替换掉了。

总说明:任意标签只要加上catelist+id,都可以得到一个分类的循环输出,至于count就是可选项了。

2:整理HTML,按约定放好要显示分类的标签

例如:

<ul class="evt_plist" name="catelist" id="12" count="40">
 <!-- 健康·教育 -->
 <li><a target="_blank" title="路过秋天" href="#">教育</a></li>
 </ul>
 <ul class="evt_plist" name="catelist" id="13" count="40">
 <!-- 健康·和谐 -->
  <li><a target="_blank" title="路过秋天" href="#">和谐</a></li>
  </ul>
  <ul class="evt_plist" name="catelist" id="14" count="40">
  <!-- 健康·私语 -->
  <li><a target="_blank" title="路过秋天" href="#">私语</a></li>
   </ul>

这么稳妥的放几行,结果就是自动取分类id为12,13,14的内容填充列表了。

3:后台写一个通用的代码处理

OK,现在类似CMS的自填充功能也写好了,程序员也轻松,美工也轻松。

四:最终F5预览看效果

1:访问,内容列表出现了

2:英文翻译时

翻译只是翻译了界面,内容是没有翻译的,想翻译内容?自己写多一篇英文的文章吧,哈哈!

五:总结

本节做为一基础的总结性文篇,没有太多的细节文字解说,旨在为大伙提供一个整体流程的示例代码,重点在源码。

下节,将继续下一个流程,解析秋色园QBlog的Post提交机制。

六:源码下载

最后,就是大众期待的源码下载了。

下载地址: 秋色园原理解析第十节示例.rar

下一篇:秋色园QBlog技术原理解析:页面Post提交机制(十一) --介绍如果Post提交数据

 

Autumn Garden is QBlog the official site, created by the passing autumn, based on the framework data layers developed cyqdata support multi-user, multi-language, multi-database (access, mssql, oracle), directory level url and other powerful blog system
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"
jeffrey : 2011/3/18 22:11:00
朋友,谢谢你的付出和分享。
reply:) 欢迎有空多来访问下留言下.
blazeangel : 2011/3/18 18:20:34
确实不错。正在研究中。
reply速度很快啊~欢迎有空下写下研究心得文章!
xxwgcg[123.160.243.*] : 2011/3/18 17:55:37
下载不了,注册用户老是说用户名报错
reply说明你注册用户名时太随意了,正规注册用户名:数字或小写字母的组合,长度》5,即可。
:Register
  
Copyright © 2010-2020 power by CYQ.Blog - Autumn v2.0 All Rights Reserved