天天看点

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

文章回顾:

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)
秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

上节回顾:

严重的解放了coder的劳动力,将翻译的职责分离给美工界。

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

开始动手了:

一:整体介绍解决方案:

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

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

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

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

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

二:多语言翻译

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

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

        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标签的节点

                    attr = list[i].attributes["keyvalue"];

                    list[i].attributes["value"].innerxml = _language.get(key);//翻译

                    list[i].attributes.remove(attr);//移除keyvalue属性

        }

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

        private void page_preload()

            if (_document.load(context.server.mappath("skin/system_health/index.html")))

                cssandimg(_document);

                translate(_document);

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

        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);

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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());

    }

}

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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

三:页面内容填充

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

示例:

<ul class="evt_hots_list" name="catelist" id="16" count="8">

</ul>

说明:

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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

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

3:count,就是循环多少条

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

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

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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

例如:

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

<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>

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

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

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

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

四:最终f5预览看效果

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

2:英文翻译时

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

五:总结

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

六:源码下载

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

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2011/03/18/1988482.html

继续阅读