我們使用基於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文件。
我的解決方案很可能意味着你必須要了解使用WSC在ASP,但一旦你開始使用它們,你永遠也不想再回去。它完全解決了ASp中的意大利麪條代碼,並能夠分離顧慮和代碼重用。
HTH, 埃裏克 希望這有助於
謝謝。我認爲這種方法很好。 – mpdonadio
此方法的另一優點是客戶可以使用任何XML編輯器和FTP訪問自行編輯他的翻譯。 –