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

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

时间:2022-09-29 23:04:51浏览次数:78  
标签:翻译 示例 url list 秋色 QBlog --

文章回顾:

1: ​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​ --介绍整体文件夹和文件的作用

2: ​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​ --介绍秋色园业务处理流程

3: ​​秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三)​​ --介绍如何实现无后缀URL

4: ​​秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四)​​ --介绍URL如何定位到处理程序

5: ​​秋色园QBlog技术原理解析:Module之页面基类设计(五)​​ --介绍创建基类和自定义生命周期

6: ​​秋色园QBlog技术原理解析:Module之页面基类-生命周期流程(六)​​ --介绍基类生命周期内部业务

7: ​​秋色园QBlog技术原理解析:Module之基类生命周期-页面加载(七)​​ --介绍界面html加载原理

8: ​​秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)​​ --介绍html的内容是如何填充

9: ​​秋色园QBlog技术原理解析:独创的多语言翻译机制(九)​​ --介绍html多语言翻译原理

 

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

 

上节回顾:

上一节 ​​秋色园QBlog技术原理解析:独创的多语言翻译机制(九)​​​ 中,介绍了​​秋色园QBlog​​的多语言翻译机制,

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

 

开始动手了:

 

一:整体介绍解决方案:

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

 

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

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:后台写一个通用的代码处理

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

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

 

四:最终F5预览看效果

 

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

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

 

2:英文翻译时

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

 

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

 

五:总结

本节做为一基础的总结性文篇,没有太多的细节文字解说,旨在为大伙提供一个整体流程的示例代码,重点在源码。下节,将继续下一个流程,解析秋色园QBlog的Post提交机制。

 

六:源码下载

 

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

下载地址:​

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

秋色园原理解析第十节示例.rar​

 

标签:翻译,示例,url,list,秋色,QBlog,--
From: https://blog.51cto.com/cyq1162/5724364

相关文章

  • 秋色园QBlog V2.5 后台管理系统源码发布下载
    题外话:上周时本来是计划本周一要发布,不过计划不如变化快。 由于周六下午发布了​​​​​​ 的相关文章,瞬时有大量爱好​​.NET​​开源激情者加入,光聊天,就折腾了我不少时......
  • 秋色园QBlog技术原理解析:页面Post提交机制(十一)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • 随说秋色园从Access升迁到MSSQL过程
    ​ ​​秋色园​​的运行环境概况:目前运行在国外godaddy的虚拟主机的一个子目录中,数据库为Access。 随说Access分页:​ 1:topmax(id)在​​CYQ.Data​​数据框架支持上Ac......
  • 秋色园QBlog技术原理解析:独创的多语言翻译机制(九)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • 秋色园QBlog技术原理解析:Module之页面基类-生命周期流程(六)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • 秋色园QBlog技术原理解析:Module之基类生命周期-页面加载(七)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • MarkDown 使用说明示例
    一、标题一级标题二级标题三级标题四级标题五级标题六级标题一级标题这是H2这是H3一级和二级标题还有一种写法就是下面加横杆,同时超过2个的=和-都可以有效果。This......
  • less写法示例
    less写法示例<divclass="parentDiv"><divclass="childDiv">childDiv1</div><divclass="childDiv">childDiv2</div><divclass="childDiv">childDiv3</div>......
  • Java Files.walk示例
    转自:https://blog.csdn.net/cyan20115/article/details/106548324Java8中提供了Files.walk API1.列出所有文件。try(Stream<Path>walk=Files.walk(Paths.get("C:......