ASP实现多语言支持

原创 2000年12月26日 14:20:00

ASP实现多语言支持

纲要 :
  让我们设想你使用 Active Server Pages 设计了一个成功的站点,而你的客户纷纷要求将此站点国际化以提供多种语言版本。这时候你该怎么办?请看本文。

正文:
  一、介绍

  让我们设想你使用 Active Server Pages 设计了一个成功的站点,而你的客户纷纷要求将此站点国际化以提供多种语言版本。该问题的关键在于,你必须使用某种方法实现快速的页面内容转换。可以将此问题看成是从数据库提取适当数据并用ASP动态显示。在本文中我们将讨论如何使用 Active Server Pages 的字典对象以及一个后台数据库实现国际化支持。

  具体实现过程分以下三个步骤:
  ◇设计数据库并存储文本和文件路径。
  ◇从数据库读取数据到字典对象。
  ◇在ASP页面引用文本和文件路径。

  二、步骤1-设计数据库并存储文本和文件路径

  我们需要在数据库设计上花些时间。使用此数据库,我们希望能够把所有要用到的文本和图片适当编目,并且这些文本和图片不能重复;如果要在应用中把“是”改成“确定”,希望只在一个地方作改动;Web维护者在更改内容时应能够快速找到目标文本。基于以上要求,让我们开始设计数据库。

  首先创建两个表来放置文本。其中一个表为CommonStrings,用于存放在整个站点重复使用的单词和短语。另外一个表为SpecializedStrings,用于存放只在特定页面使用的单词和短语。把公用和限于特定页面使用的文本分别存放有利于简化站点维护。

  两个表都使用StringKey字段来标记纪录,使用StringLanguage来说明所用语言,联合StringKey和StringLanguage创建一个主键。字段StringHolder用来保存单词、短语或语句。这个字段必须创建唯一索引以保证不会输入重复的单词、短语或语句。

  对于SpecializedStrings表,还需要一个额外的字段ASPPage来标记文本所在的ASP页面。

  对于图片文件,我们可以使用相同的步骤创建表来存储指向这些文件的路径。只需要在CommonImage表和SpecializedImage表中用FileName字段替换对应的StringHolder就可以了。

  在新创建的表中装入数据时,StringKey的内容应该给站点维护者尽可能多的提示以表明页面上将显示的文本。例如,对于一个在线销售站点来说有关拒绝承诺的声明语句使用OrderDisclaimer是一个不错的选择,站点维护者由此可以非常清楚地了解使用该记录将在Web页面上显示的内容。

  把那些公用的单词和短语放在CommonStrings表。这样,维护者就知道如果他们修改CommonStrings表中的一个记录,将影响到站点内的许多页面。

  对于大的站点,可以设计一个易于使用的界面来输入和修改数据库中的文本。准备这些资料是一项冗长乏味的任务,越简单就越少出错。

  三、步骤2-从数据库读取数据到字典对象

  字典对象(Dictionary Object)是一个多用途的服务器端对象,它相当于二维数组,保存了键以及与键相关联的数据。提取数据的唯一途径在于取得键值或索引。可以把字典对象的作用范围配置为整个应用范围或对话范围,而不必担心损失性能。赋予应用层作用范围意味着对象只被实例化一次,且所有会话均使用同一个字典对象。以下代码创建两个字典对象实例,分别和两个文本表关联。记住,我们希望对象只被初始化一次,所以把这些代码放在Application_OnStart事件中:

< Script RUNAT=SERVER Language=VBScript >
Sub Application_OnStart()
Dim DictCommonStrings
Dim DictSpecializedStrings

Dim Conn
Dim rsCommonStrings
Dim rsSpecializedStrings

Set DictCommonStrings = Server.CreateObject("Scripting.Dictionary")
Set DictSpecializedStrings = Server.CreateObject("Scripting.Dictionary")

  接下来的任务是把数据装入字典对象。我们将遍历表,连接StringKey和StringLanguage,并把连接后的值作为字典的键值,把StringHolder放在对应的字典数据区。由此我们获得了使用数据库存储数据的弹性,并避免了持久的数据库连接而导致的性能影响。事实上,数据库只在应用启动时被访问一次,其后ASP页面将从速度更快的字典对象读取所需数据。

'建立数据库连接
Set Conn = Server. CreateObject("ADODB.Connection")< BR >
Conn.ConnectionString = "Some Connection String"< BR >
Conn.open

'打开 CommonStrings 表, 遍历所有记录并装入数据
Set rsCommonStrings = Conn.Execute("Select StringKey, StringHolder from CommonStrings")
Do until rsCommonStrings.EOF
DictCommonStrings.Add rsCommonStrings("StringLanguage") & rsCommonStrings("StringKey")  _ 
,rsCommonStrings("StringHolder")
rsCommonStrings.MoveNext
Loop

'打开SpecializedStrings表, 遍历所有记录并装入数据
Set rsSpecializedStrings = Conn.Execute("Select StringKey, StringHolder from SpecializedStrings")
Do until rsSpecializedStrings.EOF
DictSpecializedStrings.Add rsSpecializedStrings ("StringLanguage") &  _
rsSpecializedStrings ("StringKey")  , rsSpecializedStrings ("StringHolder")
rsSpecializedStrings.MoveNext
Loop

rsSpecializedStrings.Close
rsCommonStrings.Close
Conn.Close
Set rsSpecializedStrings = Nothing
Set rsCommonStrings = Nothing
Set Conn = Nothing
End Sub

< /Script >

  四、步骤3-在ASP页面引用文本和文件路径

  接下来的工作是在ASP页面引用已经实例化的字典对象中的文本(以及文件路径)。首先我们需要知道当前用户所使用的语言,其中一个办法是从Request.Server.Variables取得该值。请把下列代码放入Session_Onstart事件处理过程:


< Script Language=VBScript >
Sub Session_OnStart()
Session("Lang") = Request.Server.Variables("HTTP_ACCEPT_LANGUAGE")
End Sub
< /Script >

 通过键值可以从字典对象取得对应的文本(或图片文件路径),键值由语言前缀加名字组成。以下为示例代码:
< HTML >
< P Align=center >
< h1 ><  %= DictSpecializedStrings.Item(Session("Lang")  & "Confirmation")% >< /h1 >
< /P >< BR >
< P Align=center >
< h5 ><  %= DictSpecializedStrings.Item(Session("Lang")  & "OrderDisclaimer")% >< /h5 >
< /P >
< /HTML >

  对于中文浏览器,该页面的提示类如:
  感谢您的购买。请进入下一页付款。
  而对于一个缺省语言为英文的的浏览器,则提示为:

Thank you for your order. Continue to the Next Page to make your payment.

  根据我的经验,从字典对象引用文本(以及图片路径)和直接在ASP代码中输入数据相比,没有性能上的不利影响。这是由于文本(和图片路径)字典被放在内存中,因而可以快速地提取。

  五、讨论

  当然,实现多语言支持还有其它的因素需要考虑。使站点内容的变化和应用开发者隔离是本文试图说明的实质内容。本方案不仅对于实现站点内容国际化非常有用,而且对于站点内容频繁改变而布局基本不变的情形,本方案同样能起作用。后台数据库、集合对象(字典对象)以及ASP技术提供了一个极好的方案来实现站点内容从源语言到其它语言的扩展。

让asp.net网站支持多语言,使用资源文件

asp.net多语言支持例子
  • smartsmile2012
  • smartsmile2012
  • 2014年11月26日 16:50
  • 4980

如果网页内容需要支持多语言,你会怎么做?在设计和开发多语言网站时,有哪些问题你必须要考虑?

采用统一编码UTF-8方式编码 1- 应用字符集的选择;所以对提供了多语言版本的网站来说,Unicode字符集应该是最理想的选择。它是一种双字节编码机制的字符集,不管是东方文字还是西方文字,在Uni...
  • xujie_0311
  • xujie_0311
  • 2014年12月20日 22:00
  • 2765

MFC多语言实现的两种方法

前不久由于工作需要,用新工具Passolo制作软件的英文版,顺便回顾了一下以前一直用的老方法--动态加载英文资源的DLL。今天有空整理了一下,与大家分享两种方法是如何实现软件多语言的。 方法一:动态...
  • u012102000
  • u012102000
  • 2017年02月25日 13:15
  • 1885

Asp.net MVC2实现中英多语言支持网站(转自forgetu)

本文基于ASP.NET MVC2说一下网站如何支持中英多语言技术。   新建一个asp.net mvc 2 项目,先看一下mvc 2项目的初始结构:    ...
  • jerry_cool
  • jerry_cool
  • 2011年10月19日 10:11
  • 1175

在ASP.NET MVC中通过URL路由实现对多语言的支持

对于一个需要支持多语言的Web应用,一个很常见的使用方式就是通过请求地址来控制界面呈现所基于的语言文化,比如我们在表示请求地址的URL中将上语言文化代码(比如en或者en-US)来指导服务器应该采用怎...
  • linybo
  • linybo
  • 2015年07月24日 15:43
  • 620

跟我一起学如何在ASP.net 2.0中实现多语言支持

1. 引言     对于支持多语言的网站,用户可以动态选择网站所显示的语言。本文介绍如何在ASP 2.0(C#)上利用GlobalResource实现多语言支持,习惯用VB的朋友们可以做个参考。 ...
  • donhao
  • donhao
  • 2011年09月23日 10:59
  • 955

ASP.NET支持多语言<转>

ASP.NET 2.0中实现: 1.使用工具自动生成本地化资源(LocalResources) 首先建立一个WEB工程,如图所示: 双击Default.aspx,切换到[设计]视图,从工...
  • qq285679784
  • qq285679784
  • 2015年07月13日 15:02
  • 273

ASP.NET全球化与本地化 c#多语言的支持

ASP.NET 2.0及以上的开发平台,为全球化本地化应用程序提供了工具,而且实现起来非常简单。以下内容是使用c#,按照帮助一步步做的,将为初学者提供详细的实现步骤。 一 几个必要概念  (一) ...
  • lhypang2006
  • lhypang2006
  • 2012年08月15日 11:47
  • 798

ASP.NET网站支持多语言

一、   本地资源文件(App_LocalResources): ①、     本地资源的生成及调用 1、本地资源的VS自动生成方法: 将页面调整到【设计】视图,然后在VS2008菜...
  • jiangfei009003
  • jiangfei009003
  • 2014年12月25日 22:54
  • 705

【.Net码农】ASP.NET支持多语言

http://www.cnblogs.com/sonce/archive/2008/08/14/1094612.html ASP.NET支持多语言 ASP.NET ...
  • CrackLibby
  • CrackLibby
  • 2015年09月10日 17:37
  • 210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP实现多语言支持
举报原因:
原因补充:

(最多只允许输入30个字)