我正在爲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