经典ASP的多语言支持

经典ASP的多语言支持

问题描述:

我有一位客户今天早上打电话给我翻新网站以获得多语言支持。该网站是一个经典的ASP应用程序,客户没有愿意/预算重写是ASP.NET(或其他...)。经典ASP的多语言支持

我们谈到了这方面的困难,但大部分文本恰好是从数据库中读取的短字符串,他会对能够翻译这些文本感到满意。

如果这不是传统的ASP,我会使用基于GNU gettext()的解决方案。但是,我一直无法找到经典ASP的等价物。

我可以在他的数据库中添加一个表来存储字符串翻译,然后查询它,但这也意味着要创建一个管理界面,以便他可以编辑字符串(而不是仅仅编辑纯文本文件)。

我也可以创建我自己的flatfile解决方案,可能基于Scripting.Dictionary,但我真的不想在这里推出自己的。

这里有没有其他解决方案?谢谢。

我们使用基于XML的解决方案,我们有以下结构的XML文件:

<?xml version="1.0" encoding="Windows-1252"?> 
<resource> 
    <language LCID="1043" name="nederlands"> 
     <label id="pageheader"><![CDATA[Over deze applicatie]]></label> 
     <label id="warning"><![CDATA[]]></label> 
    </language> 
    <language LCID="2067" name="vlaams"> 
     <label id="pageheader">Over deze applicatie</label> 
     <label id="warning"><![CDATA[]]></label> 
    </language> 
    <language LCID="2057" name="english (uk)"> 
     <label id="pageheader"><![CDATA[About this software]]></label> 
     <label id="warning"><![CDATA[]]></label> 
     <label id=""><![CDATA[]]></label> 
    </language> 
</resource> 

我们选择让每个目录有它自己的XML文件,但如果网站中没有多少翻译,则可以在根目录中有一个大的XML。这会影响你的表现。 我们写了一个WSC处理翻译这样我们就可以在每个ASP页面的顶部开一个翻译WSC,并使用一种方法来翻译,像这样:

在每个页面的开始:

dim translate 
set translate = GetObject("script:"&Server.MapPath("/~components/DLL/Translation.wsc")) 
call translate.OpenWithLCID(session.LCID) 

在HTML:

<%= translate.label("systemerror") %> 

在页面的结尾:

call translate.close() 
set translate = nothing 

对性能的影响很小;只要确保在您的函数中获取翻译,就可以在找到相应的XML节点时立即退出循环并返回值。我们在开始时犯了这个错误,导致在我们调用Translate.label()时处理完整的XML文件。

我的解决方案很可能意味着你必须要了解使用WSC在ASP,但一旦你开始使用它们,你永远也不想再回去。它完全解决了ASp中的意大利面条代码,并能够分离顾虑和代码重用。

HTH, 埃里克 希望这有助于

+0

谢谢。我认为这种方法很好。 – mpdonadio

+0

此方法的另一优点是客户可以使用任何XML编辑器和FTP访问自行编辑他的翻译。 –

也许类似Babelfish平台

http://babelfish.yahoo.com/free_trans_service

+0

谢谢,但在这种情况下自动翻译是不够准确的。 – mpdonadio