2009-09-16 63 views
2

我有一個ASP.NET Web應用程序,使用XSLT轉換後端數據(XML格式),生成輸出到頁面的XHTML。ASP.NET中XSLT + RESX的本地化方法

簡化代碼:

XmlDocument xmlDoc = MyRepository.RetrieveXmlData(keyValue); 
XslCompiledTransform xsl = new XslCompiledTransform(); 
xsl.Load(pathToXsl, XsltSettings.TrustedXslt, null); 
StringWriter stringWriter = new StringWriter(); 
xsl.Transform(xmlDoc, null, stringWriter); 
myLiteral.Text = stringWriter.ToString(); 

目前我XSL文件包含XHTML標記元素,以及文字標籤,這是目前在英國。例如:

<p>Title:<br /> 
    <xsl:value-of select="title"/> 
</p> 
<p>Description:<br /> 
    <xsl:value-of select="desc"/> 
</p> 

我希望將文本標籤(標題和說明如上所述)進行本地化。我正在考慮使用.NET資源文件(.resx),但我不知道在轉換髮生時如何將resx字符串資源拉入到XSLT中。

我不希望具有XSLT文件的特定於語言環境的副本,因爲這意味着很多重複的轉換邏輯。

(注:XML數據已經本地化,所以我並不需要改變)

回答

1

有一個佔位符元素替換在XSLT文件中的文本,然後寫另一個本地化改造,是以RESX文件並用它用所需的文本替換佔位符。

<p><localized name="title"/>:<br /> 
    <xsl:value-of select="title"/> 
</p> 
<p><localized name="desc"/>:<br /> 
    <xsl:value-of select="desc"/> 
</p> 
0

由於.resx文件是一個XML文件,你可以使用它作爲其他來源的XSLT,通過使用document function

1

對於每種語言,XML文檔可能包含一種語言和一個XML文檔,或者也可能包含具有所有語言的單個XML文檔。以下示例中的XML格式遵循所有語言的Microsoft .NET資源(.resx)文件(每種語言一個文件)或單個TMX(翻譯存儲器交換)文檔。但是,只要用於讀取文本的XPath是一致的,就可以使用任何格式。

請參閱我的文章「How to localize XSLT」,獲取完整的功能樣本http://www.codeproject.com/Articles/338731/LocalizeXSLT

+0

這不是一個實際的解決方案。如果您這樣做,資源文件必須與解決方案一起分發。 – 2010-05-05 11:26:57

+0

帶有翻譯字符串的XML文件將與XSLT一起分發。 .resx格式是標準格式。我不明白爲什麼這是不實際的。 – 2012-01-29 00:43:44