2010-02-05 57 views
2

我正在为asp经典网站添加多语言功能。我试图通过使用if else语句来选择要加载的包含。经过一些研究后,我发现包含文件在处理任何代码之前都会加载。如何选择包含文件

我该如何解决此问题并加载正确的包含文件?有没有更好的方法来做到这一点?

谢谢!

回答

1

无数个小时后,我想,我终于想出了一个解决方案。我为每种语言(en.xml,fr.xml)创建了具有超级简单结构的XML文件(只是一个带有ID和值的标签元素)。

通过使用一个与我想替换的标签名称相似的属性,我可以找出所有需要去的地方,并且只需将值拉出。

+0

+1将一个Xml ResourceManager添加到经典的asp是一个很好的解决方案。 – Filburt 2010-02-10 18:50:05

1

正如您发现的那样,您不能动态选择包含。在任何脚本执行之前,包含都是静态处理的。

次好的是Server.Execute。您可以使用逻辑来选择要执行的附加文件,但是否适合您的解决方案是另一回事。您的包含目前包含哪些内容?

另一种方法是将您的“多语言”选择放在一些数据格式中,例如一组CSV文件或XML文件。您的代码会载入相应的“语言文件”。

+0

我试着使用Server.Execute方法与我的语言文件,但没有奏效。我的语言文件只包含带有标签和标签值的常量。我正在寻找一个简单的模板系统,但是我无法克服asp中的所有这些限制。 – chobo 2010-02-05 23:21:50

+0

@chobo:好吧,你有一套常量,你支持哪种语言?他们是否都在西方拉丁字符集内?如果不是,你可能会遇到另一个严重的问题。 – AnthonyWJones 2010-02-06 09:06:46

+0

您可以使用会话对象在调用'server.execute'之间存储数据。.. – 2010-02-06 17:43:25

0

这是可以做到 - 只要使用包括 虚拟,而不是 文件

编辑

我认错 - 很显然,我试图太难忘记那些黑暗的时代。

几年前,我在一个项目中为每个语言版本创建一个“容器页面”,然后包含常量的各个部分。

A working spinoff is still running如果您检查page source of this site,您可以了解我们如何将页面连接在一起。 由SVN id标记标识的一些包含脚本甚至包含更多脚本,并将其缓慢地变成恶梦。

对不起,我错了关于有条件的include,应该有比上面提到的更好的解决方案。

+0

我想包含实际的包含常量的asp文件。我尝试了你的解决方案和它的错误,并告诉我我需要Redimm的一切,所以它仍然试图加载我所有的包含,而不仅仅是我想要的。 – chobo 2010-02-06 00:41:19

+0

@chobo抱歉让你走错了路 - 安东尼是对的。 – Filburt 2010-02-06 09:01:29

0

我不确定这个想法是否有帮助,但是您可以在一个ASP文件中调暗语言字符串变量,然后在单独的ASP函数中设置变量。然后你的if语句可以调用正确的函数来设置ASP语言字符串变量。您不会将语言字符串分解为单独的文件,但它可能会完成您尝试实现的目标。

例如:

dim str1, str2 

sub SetLangX 
    str1 = "String val 1 for lang X" 
    str2 = "String val 2 for lang X" 
end sub 

sub SetLangY 
    str1 = "String val 1 for lang Y" 
    str2 = "String val 2 for lang Y" 
end sub