2011-05-15 80 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