Loachs-代码分析之--多语言方案

本以为多语言很难实现,现在使用了Nvelocity之后,发现其实很容易就解决了。
告诉我一个道理:对于一个你不知道怎么弄的东西,不要仅思考,动手开始操作你知道的东西
不经意之间,你本以为很难的东西,结果就轻而易举的搞定了

我将多语言的变量使用大写来定义,这个参考了 Zencart程序
语言包的格式,参考了另一个程序,采用XML的格式
起初定的语言包的定义是
<item key="" value=""></item>
这样定义有一个缺点 就是不能够引入 html的格式,这样就不能实现图片的多语言
如果非要使用这个,就需要将字符转为Unicode字符,这样的话可观性就降低了
所以后来 看了另一套程序发现
格式不应该这样定义
改为下面的格式
 <item key="">
    <value>html字符​</value>
 <item>
这样的话仅仅 需要多HTML字符做一些转义的工作就可以了
保证了一定的可读性。比较靠谱

问题:页面多语言是怎么实现的?

第一步:当页面第一次加载的时候,页面中会创建一个Cookie,这个cookie会读取默认的语言包
并加载默认的语言,从而生成HTml的代码,响应到客户端,此时服务端的工作就完成了

第二步:当HTML代码到达客户端之后,就是js脚本的天下了,此时页面会加载完毕,将会执行一个函数
从响应的Cookie中获得语言的名字并 赋值 到选择框里面。

第三步:切换语言的过程
切换语言的过程是从客户端发起的发起的,通过select 的change函数,先获得当前的语言cookie选项
然后删除cookie,在创建一个新的cookie,并写入到当前值。此时使用js重写刷新页面。
至此客户端脚本的工作就完成了

第四步:当新的请求到达服务端之后,会检查请求中cookie所带的语言cookie值,此时就又到了第一个过程
如果检查到cookie之是空的 就使用默认的语言值。如果cookie之不为空,就会获得当前的cookie值
重新加载语言包,生成新的HTML,响应到客户端去,接下来的过程就可第二个过程一样了。

表面上看来我们通过js的脚本,来完成了一次 客户端和服务端的 交互,使用cookie,保存了
交互过程中的状态信息,window.location.reload(true) 作为了一次通信的中介
在整个过程当用我们并没有用到ASP.NET页面的视图,也没有用到所谓的控件
就是请求和响应,让ASP.NET回归到了最本质的状态。完全站在请求与响应的角度上
来处理Web的请求
知道了这一次点,那么查询字符串,隐藏字段和表单信息 等等 这些的使用都是一样的
只不过方式不同而已。所以当脱离的ASP.Net所有的页面和控件的使用
请求和响应就变得非常的简单了,而且也非常的灵活。
那么回过头来我们考虑两个问题
问题1.加入我现在要和Web端进行通信交互,我在客户端应该使用什么来完成呢?
用ajax
问题2.如果我们清楚了上面的这个问题,那么请问ASP.NET页面的这种 事件驱动模型
是如何和后端进行通信的呢?简单一点描述
当你在页面上点击一个按钮时,这个按钮时如何调用服务端相关的代码的,这一点击背后
发什么故事呢?大家有没有想过这个问题呢?

发布了102 篇原创文章 · 获赞 3 · 访问量 9205

猜你喜欢

转载自blog.csdn.net/yueyekonglong/article/details/104038448