2011-05-15 79 views
9

我有下面的XML文件: -

<?xml version="1.0" encoding="UTF-8"?> 
<directory> 
    <employee> 
     <name>Joe Smith</name> 
     <phone>4-0192</phone> 
    </employee> 
    <employee> 
     <name>Sally Jones</name> 
     <phone>4-2831</phone> 
    </employee> 
</directory> 

而下面的XSLT: -

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="directory"> 
     <div>List of Employee<xsl:value-of select="@directory"/> 
     </div> 
     <br/> 
     <table> 
     <tr> 
      <td>Employee Name</td> 
      <td>Contact Details</td> 
     </tr> 
     <xsl:apply-templates select="employee"></xsl:apply-templates> 
     </table> 

    </xsl:template> 

    <xsl:template match="employee"> 
     <tr> 
     <td> 
      <xsl:value-of select="@name"/> 
     </td> 
     <td> 
      <xsl:value-of select="@phone"/> 
     </td> 
     </tr> 
    </xsl:template> 

</xsl:stylesheet> 

我想本地化XSLT文本:员工名单,员工姓名&联系方式XSLT本地化

如何本地化xslt文本?

+1

您是否想要一次呈现所有可能文化的xml html文件,或者您是否只需要基于某种配置的其中一个? – 2011-05-15 07:39:25

+0

我有许多xml和xslt文件....所以不能为每种文化创建多个xslt文件....所以我宁愿去替代解决方案,以便我不需要为每种文化创建多个文件.... – 2011-05-15 08:04:33

+0

好问题,+1。查看我的答案,获取详细且高效的纯XSLT解决方案的链接。 – 2011-05-15 14:11:49

回答

6

我可以看到三种方式来做到这一点,哪一个是最好的(或者,如果任何这些是一种替代)取决于何时以及如何需要最终的XML上:

构建XSL编程

构建例如使用XmlDocument的XSL - 那么你可以使用普通字符串资源,填补了标签,并可能利用您的应用程序的区域性设置。

使嵌入翻译在xsl

使用<xsl:param>告诉变换使用何种语言,然后把<xsl:choose>每串:

<xsl:choose> 
    <xsl:when test="$language='en'">Contact Details</xsl:when> 
    <xsl:when test="$language='sv'">Kontaktuppgifter</xsl:when> 
    <xsl:otherwise>Unknown language <xsl:value-of select="$language"/></xsl:otherwise> 
</xsl:choose> 

查找翻译的部分的变换

把翻译在自己的XML文档:

<strings> 
    <string language="en" key="ContactDetails">Contact Details</string> 
    <string language="sv" key="ContactDetails">Kontaktuppgifter</string> 
    [...] 
</strings> 

然后加载它的内容有:

<xsl:variable name="strings" select="document('translation.xml')/strings"/> 

...并与访问它们:

<xsl:value-of select="$strings/string[@key='ContactDetails' and @language=$language]"/> 
+1

+1这真的很接近。 – 2011-05-15 08:18:36

+3

我会去寻找类似的东西,但是使用其中$ translation是所选语言翻译的文件;那么你不需要谓词的语言部分来选择一个字符串。另外,使用键从翻译文件中选择所需的字符串。 – 2011-05-15 09:55:20

0

见我的回答对this SO question,详细介绍了如何有效地使用查找表存储为单独的,exteranal XML文档,经由<xsl:key>key()功能。在XSLT

0

文本可以通过从XML文档阅读翻译后的字符串进行本地化。数字也可能是本地化的。

XML文档可包含任一种语言,对每种语言一个XML文档,或可选地,与所有语言的单个XML文档。以下示例中的XML格式遵循所有语言的Microsoft .NET资源(.resx)文件(每种语言一个文件)或单个TMX(翻译存储器交换)文档。但是,只要用于读取文本的XPath是一致的,就可以使用任何格式。

两个选项都使用XPath“document”功能与翻译的字符串来读取XML。为XSLT中使用的每个字符串定义参数。使用参数而不是变量允许在XSLT转换时重写值。使用xsl:value-of来显示翻译文本。处理转换时,将语言代码(例如“fr”)和URL传递给所需语言的资源XML文档。

请参阅我的文章“How to localize XSLT”,获取完整的功能样本http://www.codeproject.com/Articles/338731/LocalizeXSLT