2009-09-16 64 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