<marquee width=358>欢迎来到月影社区,希望这里可以成为您美丽的梦幻花园,如果你觉得这里好请分享给您的朋友!- wf66.com</marquee> 将月影社区设置为您的首页将月影社区地址加入到您的收藏栏
月影社区时尚音乐音乐查询IP手机许愿之瓶最新更新文件加密访客留言爱音乐
欢迎您,首页 >> 信息中心 >> ASP实现多语言支持

请输入您关键字:


ASP实现多语言支持

推荐查看本文HTML版本


纲要:
让我们设想你使用ActiveServerPages设计了一个成功的站点,而你的客户纷纷要求将此站点国际化以提供多种语言版本。这时候你该怎么办?请看本文。
正文:
一、介绍
让我们设想你使用ActiveServerPages设计了一个成功的站点,而你的客户纷纷要求将此站点国际化以提供多种语言版本。该问题的关键在于,你必须使用某种方法实现快速的页面内容转换。可以将此问题看成是从数据库提取适当数据并用ASP动态显示。在本文中我们将讨论如何使用ActiveServerPages的字典对象以及一个后台数据库实现国际化支持。
具体实现过程分以下三个步骤:
◇设计数据库并存储文本和文件路径。
◇从数据库读取数据到字典对象。
◇在ASP页面引用文本和文件路径。
二、步骤1-设计数据库并存储文本和文件路径
我们需要在数据库设计上花些时间。使用此数据库,我们希望能够把所有要用到的文本和图片适当编目,并且这些文本和图片不能重复;如果要在应用中把“是”改成“确定”,希望只在一个地方作改动;Web维护者在更改内容时应能够快速找到目标文本。基于以上要求,让我们开始设计数据库。
首先创建两个表来放置文本。其中一个表为CommonStrings,用于存放在整个站点重复使用的单词和短语。另外一个表为SpecializedStrings,用于存放只在特定页面使用的单词和短语。把公用和限于特定页面使用的文本分别存放有利于简化站点维护。
两个表都使用StringKey字段来标记纪录,使用StringLanguage来说明所用语言,联合StringKey和StringLanguage创建一个主键。字段StringHolder用来保存单词、短语或语句。这个字段必须创建唯一索引以保证不会输入重复的单词、短语或语句。
对于SpecializedStrings表,还需要一个额外的字段ASPPage来标记文本所在的ASP页面。
对于图片文件,我们可以使用相同的步骤创建表来存储指向这些文件的路径。只需要在CommonImage表和SpecializedImage表中用FileName字段替换对应的StringHolder就可以了。
在新创建的表中装入数据时,StringKey的内容应该给站点维护者尽可能多的提示以表明页面上将显示的文本。例如,对于一个在线销售站点来说有关拒绝承诺的声明语句使用OrderDisclaimer是一个不错的选择,站点维护者由此可以非常清楚地了解使用该记录将在Web页面上显示的内容。
把那些公用的单词和短语放在CommonStrings表。这样,维护者就知道如果他们修改CommonStrings表中的一个记录,将影响到站点内的许多页面。
对于大的站点,可以设计一个易于使用的界面来输入和修改数据库中的文本。准备这些资料是一项冗长乏味的任务,越简单就越少出错。
三、步骤2-从数据库读取数据到字典对象
字典对象(DictionaryObject)是一个多用途的服务器端对象,它相当于二维数组,保存了键以及与键相关联的数据。提取数据的唯一途径在于取得键值或索引。可以把字典对象的作用范围配置为整个应用范围或对话范围,而不必担心损失性能。赋予应用层作用范围意味着对象只被实例化一次,且所有会话均使用同一个字典对象。以下代码创建两个字典对象实例,分别和两个文本表关联。记住,我们希望对象只被初始化一次,所以把这些代码放在Application_OnStart事件中:
<ScriptRUNAT=SERVERLanguage=VBScript>
SubApplication_OnStart()
DimDictCommonStrings
DimDictSpecializedStrings
DimConn
DimrsCommonStrings
DimrsSpecializedStrings
SetDictCommonStrings=Server.CreateObject("Scripting.Dictionary")
SetDictSpecializedStrings=Server.CreateObject("Scripting.Dictionary")
接下来的任务是把数据装入字典对象。我们将遍历表,连接StringKey和StringLanguage,并把连接后的值作为字典的键值,把StringHolder放在对应的字典数据区。由此我们获得了使用数据库存储数据的弹性,并避免了持久的数据库连接而导致的性能影响。事实上,数据库只在应用启动时被访问一次,其后ASP页面将从速度更快的字典对象读取所需数据。
'建立数据库连接
SetConn=Server.CreateObject("ADODB.Connection")<BR>
Conn.ConnectionString="SomeConnectionString"<BR>
Conn.open
'打开CommonStrings表,遍历所有记录并装入数据
SetrsCommonStrings=Conn.Execute("SelectStringKey,StringHolderfromCommonStrings")
DountilrsCommonStrings.EOF
DictCommonStrings.AddrsCommonStrings("StringLanguage")&rsCommonStrings("StringKey")_
,rsCommonStrings("StringHolder")
rsCommonStrings.MoveNext
Loop
'打开SpecializedStrings表,遍历所有记录并装入数据
SetrsSpecializedStrings=Conn.Execute("SelectStringKey,StringHolderfromSpecializedStrings")
DountilrsSpecializedStrings.EOF
DictSpecializedStrings.AddrsSpecializedStrings("StringLanguage")&_
rsSpecializedStrings("StringKey"),rsSpecializedStrings("StringHolder")
rsSpecializedStrings.MoveNext
Loop
rsSpecializedStrings.Close
rsCommonStrings.Close
Conn.Close
SetrsSpecializedStrings=Nothing
SetrsCommonStrings=Nothing
SetConn=Nothing
EndSub
</Script>
四、步骤3-在ASP页面引用文本和文件路径
接下来的工作是在ASP页面引用已经实例化的字典对象中的文本(以及文件路径)。首先我们需要知道当前用户所使用的语言,其中一个办法是从Request.Server.Variables取得该值。请把下列代码放入Session_Onstart事件处理过程:

<ScriptLanguage=VBScript>
SubSession_OnStart()
Session("Lang")=Request.Server.Variables("HTTP_ACCEPT_LANGUAGE")
EndSub
</Script>
 通过键值可以从字典对象取得对应的文本(或图片文件路径),键值由语言前缀加名字组成。以下为示例代码:
<HTML>
<PAlign=center>
<h1><%=DictSpecializedStrings.Item(Session("Lang")&"Confirmation")%></h1>
</P><BR>
<PAlign=center>
<h5><%=DictSpecializedStrings.Item(Session("Lang")&"OrderDisclaimer")%></h5>
</P>
</HTML>
对于中文浏览器,该页面的提示类如:
感谢您的购买。请进入下一页付款。
而对于一个缺省语言为英文的的浏览器,则提示为:
Thankyouforyourorder.ContinuetotheNextPagetomakeyourpayment.
根据我的经验,从字典对象引用文本(以及图片路径)和直接在ASP代码中输入数据相比,没有性能上的不利影响。这是由于文本(和图片路径)字典被放在内存中,因而可以快速地提取。
五、讨论[月影社区 http://wf66.com/]
当然,实现多语言支持还有其它的因素需要考虑。使站点内容的变化和应用开发者隔离是本文试图说明的实质内容。本方案不仅对于实现站点内容国际化非常有用,而且对于站点内容频繁改变而布局基本不变的情形,本方案同样能起作用。后台数据库、集合对象(字典对象)以及ASP技术提供了一个极好的方案来实现站点内容从源语言到其它语言的扩展。

ASP实现多语言支持 2006-8-28
转到本主题第:[ 1 ]
相关评论

暂无评论

总计0页 [ ]上一页 下一页
发表评论(揪错)
呢称: * 您尚未登陆,请登录
来自: *
内容:
 

(为防止非法信息,您的言论提交后需要审核才能正常显示)

文学
精品文萃 情感天地 言情小说
网络小说 玄幻小说 悬疑恐怖
武侠小说 古典品谈 外国名著
儿童文学 会员原创 学习园地
杂谈其它
娱乐
爆笑网文 星座占卜 影音动漫
娱乐新闻 影视剧情
诗词
青竹诗歌 个人诗集 宋词雅赏
全唐诗录
新闻
国际新闻 国内新闻 科技新闻
体育新闻
图片
图文专区 艺术长廊 桌面壁纸
精品素材 像素图片
漫画
单幅漫画 爆笑四格 连环漫画
电脑
电脑入门 图形图像 编程开发
游戏
我爱Q宠 最新攻略 最新秘籍
游戏新闻 技巧心得
经济
帕格节电 财经资讯 股市证券
生活
百科知识 外语学院 潮流时尚
健康医疗 宠物花卉 汽车地带
行走天下
美食
面食甜点 家常菜品 药膳食疗
美食天下 烹饪技巧 松辽风味
燕京风味 巴蜀风味 滇黔风味
赣江风味 徽皖风味 闽台风味
齐鲁风味 中州风味 岭南风味
荆楚风味 三晋风味 淞沪风味
苏扬风味 潇湘风味 钱塘风味
民族风味 素斋仿荤
营销
管理杂谈 谈经论道 培训激励
经营战略 职场生涯 公关交际
关于我们版权声明本站导航友情连结作品演示 TOP↑
本论坛言论纯属发表者个人意见,与£月影社区£立场无关。 皖ICP备16024038号-1
禁止发布任何色情/政治/反动相关信息让我们共同来营造一个属于我们的梦幻家园
Copyright ©2001-2006 MoonShadow. All rights reserved.  Version 4.0  Licence 2006.4.2
建站天数:7252天 本站基于ASP+JS构建,完全自主开发,版权归属月影社区 管理员QQ:23165062 Time:1750ms