我正在为asp经典网站添加多语言功能。我试图通过使用if else语句来选择要加载的包含。经过一些研究后,我发现包含文件在处理任何代码之前都会加载。如何选择包含文件
我该如何解决此问题并加载正确的包含文件?有没有更好的方法来做到这一点?
谢谢!
我正在为asp经典网站添加多语言功能。我试图通过使用if else语句来选择要加载的包含。经过一些研究后,我发现包含文件在处理任何代码之前都会加载。如何选择包含文件
我该如何解决此问题并加载正确的包含文件?有没有更好的方法来做到这一点?
谢谢!
无数个小时后,我想,我终于想出了一个解决方案。我为每种语言(en.xml,fr.xml)创建了具有超级简单结构的XML文件(只是一个带有ID和值的标签元素)。
通过使用一个与我想替换的标签名称相似的属性,我可以找出所有需要去的地方,并且只需将值拉出。
正如您发现的那样,您不能动态选择包含。在任何脚本执行之前,包含都是静态处理的。
次好的是Server.Execute
。您可以使用逻辑来选择要执行的附加文件,但是否适合您的解决方案是另一回事。您的包含目前包含哪些内容?
另一种方法是将您的“多语言”选择放在一些数据格式中,例如一组CSV文件或XML文件。您的代码会载入相应的“语言文件”。
我试着使用Server.Execute方法与我的语言文件,但没有奏效。我的语言文件只包含带有标签和标签值的常量。我正在寻找一个简单的模板系统,但是我无法克服asp中的所有这些限制。 – chobo 2010-02-05 23:21:50
@chobo:好吧,你有一套常量,你支持哪种语言?他们是否都在西方拉丁字符集内?如果不是,你可能会遇到另一个严重的问题。 – AnthonyWJones 2010-02-06 09:06:46
您可以使用会话对象在调用'server.execute'之间存储数据。.. – 2010-02-06 17:43:25
这是可以做到 - 只要使用包括
虚拟,而不是
文件
编辑
我认错 - 很显然,我试图太难忘记那些黑暗的时代。
几年前,我在一个项目中为每个语言版本创建一个“容器页面”,然后包含常量的各个部分。
A working spinoff is still running如果您检查page source of this site,您可以了解我们如何将页面连接在一起。 由SVN id标记标识的一些包含脚本甚至包含更多脚本,并将其缓慢地变成恶梦。
对不起,我错了关于有条件的include,应该有比上面提到的更好的解决方案。
我不确定这个想法是否有帮助,但是您可以在一个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
4guysfromrolla在这方面有一篇不错的文章。下方链接 ...
http://www.4guysfromrolla.com/ASPScripts/PrintPage.asp?REF=/webtech/022504-1.shtml
+1将一个Xml ResourceManager添加到经典的asp是一个很好的解决方案。 – Filburt 2010-02-10 18:50:05