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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

文章回顾:

 

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

 

上节回顾:

上节 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八) 中,解析了页面html的内容是如何被填充的,及Set、SetFor、SetForeach小三俩如何简化开发的。

大伙看的看地很心动,本人写的写地很心痛

 

本节介绍:

由于第七节Module层还有未完之事,本节将补充第七节后续的多语言翻译内容。
关于第八节的示例演示代码,将留到下节解说。

 

少说闲话,且看下文:

 

一:多语言翻译原理解析

 

先回顾第七节:Page_PreLoad部分流程代码:

 

在第七节时,为大伙解析了如何正常加载html及CSS/图片路径的处理,本节,将补充多语言翻译的原理解析。

 

1:传统的多语言翻译

我曾经写过一篇文章:实战篇-简单多语言的实现,介绍了CYQ.Data.Xml下的MutilLanguage,在传统的aspx页面中,可实现如下方式的多语言翻译:

<p>html:<%=lang.Get("autumn"%></p>

只要把需要翻译文字,替换成相同的语法标签,即可获得相应的多语言效果,这在很多人看起来已经很方便,而且也被广泛的使用着。

 

但是,还是得保守的说两句:

 

1.1:破坏了原有界面的浏览效果,修改过的界面,无法二次使用:

复制代码

传统webform开发,不断用服务端控件、服务端语法、CMS中自创的标签语法入侵本属于html及传奇美工界的地盘,被入侵后的界面,不再属于美工所认知的html了。

后出来了MVC,没有ViewState被人们津津乐道着,不过还是没有改变服务端语法入侵html的习惯。

存在即合理,它带来的快速开发效果,为asp.net带来迅速的扩张....相当的迅速。

对于这点,我说的是比较保守,我并没有认为入侵不好,因为实际上,有很多项目快速开发来的要猛烈些。

除非,你能带来一种比入侵html更快速的开发方式,否则,就无法否定并改变它的存在。

复制代码

 

1.2:一个页面充满了大量的这些标签,除了原开发人员,接手维护的人,也得犯傻,特别是E文不好之人,比如本人的说:

曾经接手过一个社区型项目:几十个没源码的dll、大量的<%多语言%>标签混杂在html中、各模式混杂多种代码风格语法[linq、lamb语法等],折磨了我一个月后,老板说我开发速度太慢,拿了个新手当示例说新手的开发进度都比我快,于是,我走了。

 

忽悠完大伙上面两点后,接下说点秋色园QBlog是怎么处理的:

 

2:秋色园QBlog的多语言翻译机制

 

秋色园QBlog是基于将html当成xml加载的方式来处理界面,操作html如xml般方便。

XmlHelper的帮助下,需要获取某个节点或某批量节点时,那是相当的简单。

于是乎,有了如下的想法方法与做法:

看示例html标签:

<h2 key="healthcare">健康·保健</h2>
<li><a href="/" key="index">首页</a></li>
<input keyvalue="submit" type="submit" name="btnPost" value="提交" class="Button Button_Style" />

说明:

从上面的三个标签中,一看就知道非常明确的知道标签是显示什么内容,

没有影响原始html标签的预览效果,只是像xml般增加了两个自定义属性:key、keyvalue。

小小两个标签,却能完成秋色园整站多语言的翻译需求,如何做到?且看以下介绍:

 

1:翻译关键字的约定

key:key="id",从同目录的language.html中寻找id节点的文字,翻译key节点内部的文本内容

keyvalue:key="id",从同目录的language.html中寻找id节点的文字,翻译keyvalue节点的value属性的文本内容

 

掌握了上面两个翻译key,即可以在任意界面html中放置标签,如上面示例html一样

顺便唠叨几句:

这界面翻译的活,应归属美工界的管理处理范围。
什么界面多语言翻译,开发人员就不要抢着瞎折腾了。折腾一堆的<%多语言%>,大伙看着都难受。
没办法就忍着,现在有办法了,能省心就多省点。

 

不过,开发人员要想省力又省心,还得在基类里,写下这么一小段代码的:

 

2:翻译的实现代码

复制代码
        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属性
                }
            }
        }
复制代码

 

这么简单的代码相信各看客都看的懂的,就不多唠叨了,大伙看着给力就行了。

 

再上两张秋色园QBlog的Logo图充给点看头:

中文时:

E文时:

 

总结:

本节,解析了秋色园QBlog的多语言翻译机制:采用通过获取所有约定标签的节点,进行循环替换,从而一次解决了整站翻译问题。

同时,开创了一种新方法,把安插在开发人员身上多年的机械型翻译工作,一次性解放还给了美工界人员,并实现了相对进步一些的职责分离。

 

下节,将为大伙演示第八节的完整的示例,同时加入包括本节多语言的翻译内容,敬请关注。

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

http://www.cnblogs.com/cyq1162/archive/2011/03/04/1970852.html

相关文章
|
6天前
|
机器学习/深度学习 人工智能 算法
模型无关的局部解释(LIME)技术原理解析及多领域应用实践
在当前数据驱动的商业环境中,人工智能(AI)和机器学习(ML)已成为各行业决策的关键工具,但随之而来的是“黑盒”问题:模型内部机制难以理解,引发信任缺失、监管合规难题及伦理考量。LIME(局部可解释模型无关解释)应运而生,通过解析复杂模型的个别预测,提供清晰、可解释的结果。LIME由华盛顿大学的研究者于2016年提出,旨在解决AI模型的透明度问题。它具有模型无关性、直观解释和局部保真度等优点,在金融、医疗等领域广泛应用。LIME不仅帮助企业提升决策透明度,还促进了模型优化和监管合规,是实现可解释AI的重要工具。
41 9
|
21天前
|
传感器 C# Android开发
深度解析Uno Platform中的事件处理机制与交互设计艺术:从理论到实践的全方位指南,助您构建响应迅速、交互流畅的跨平台应用
Uno Platform 是一款开源框架,支持使用 C# 和 XAML 开发跨平台原生 UI 应用,兼容 Windows、iOS、Android 及 WebAssembly。本文将介绍 Uno Platform 中高效的事件处理方法,并通过示例代码展示交互设计的核心原则与实践技巧,帮助提升应用的用户体验。事件处理让应用能响应用户输入,如点击、触摸及传感器数据变化。通过 XAML 或 C# 添加事件处理器,可确保及时反馈用户操作。示例代码展示了一个按钮点击事件处理过程。此外,还可运用动画和过渡效果进一步增强应用交互性。
128 57
|
12天前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
12天前
|
存储 关系型数据库 MySQL
深入解析MySQL数据存储机制:从表结构到物理存储
深入解析MySQL数据存储机制:从表结构到物理存储
25 1
|
16天前
|
Java 开发者
Java中的异常处理机制深度解析
在Java编程中,异常处理是保证程序稳定性和健壮性的重要手段。本文将深入探讨Java的异常处理机制,包括异常的分类、捕获与处理、自定义异常以及一些最佳实践。通过详细讲解和代码示例,帮助读者更好地理解和应用这一机制,提升代码质量。
16 1
|
22天前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
42 8
|
25天前
|
Java 程序员 开发者
Java中的异常处理机制深度解析
本文旨在深入探讨Java中异常处理的核心概念与实际应用,通过剖析异常的本质、分类、捕获及处理方法,揭示其在程序设计中的关键作用。不同于常规摘要,本文将直接切入主题,以简明扼要的方式概述异常处理的重要性及其在Java编程中的应用策略,引导读者快速把握异常处理的精髓。
|
1天前
|
JSON 应用服务中间件 API
使用 Gin 框架实现文件上传:机制与深入解析
使用 Gin 框架实现文件上传:机制与深入解析
|
24天前
|
安全 Java 开发者
Java并发编程中的锁机制解析
本文深入探讨了Java中用于管理多线程同步的关键工具——锁机制。通过分析synchronized关键字和ReentrantLock类等核心概念,揭示了它们在构建线程安全应用中的重要性。同时,文章还讨论了锁机制的高级特性,如公平性、类锁和对象锁的区别,以及锁的优化技术如锁粗化和锁消除。此外,指出了在高并发环境下锁竞争可能导致的问题,并提出了减少锁持有时间和使用无锁编程等策略来优化性能的建议。最后,强调了理解和正确使用Java锁机制对于开发高效、可靠并发应用程序的重要性。
20 3

热门文章

最新文章

推荐镜像

更多