2010-02-05 35 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