gpt4 book ai didi

asp-classic - 经典 ASP 的多语言支持

转载 作者:行者123 更新时间:2023-12-01 10:09:06 26 4
gpt4 key购买 nike

我有一个客户今天早上调用我,要求我改造一个站点以提供多语言支持。该网站是一个经典的 ASP 应用程序,客户没有重写 ASP.NET(或其他任何...)的愿望/预算。

我们讨论了这方面的困难,但大部分文本恰好是从数据库中读取的短字符串,他会很高兴能够翻译这些文本。

如果这不是经典 ASP,我会使用基于 GNU gettext() 的解决方案。但是,我还没有找到经典 ASP 的等效项。

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

我也可以创建自己的平面文件解决方案,可能基于 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 文件。

我的解决方案可能意味着您必须了解如何在 ASP 中使用 WSC,但是一旦您开始使用它们,您就再也不想回头了。它彻底解决了 ASp 中的意大利面条式代码,实现了关注点分离和代码重用。

喂,埃里克希望这有帮助

关于asp-classic - 经典 ASP 的多语言支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com