2012-08-23 40 views
6

我正在嘗試使用xml/xsl在不同的語言中執行一個頁面。我想只有一個xml和一個xsl。在我的頁面Url我有一個參數pLanguage,我想我可以用來看看我是否選擇了英語或荷蘭語。如何使用xsl和xml執行I18N

我想這個代碼,但我不知道我是怎麼把它一起:

首先,我做的一切誰的話變量被翻譯如下:

<xsl:variable name="lang.pageTitle" select="'This is the title in English'"/> 

要獲得在模板中PAGETITLE我現在可以使用

<xsl:value-of select="$lang.pageTitle"/> 

我想,以取代第一行代碼上面用if-else語句來測試我的choosen語言是EN或NL像THI S:

<xsl:choose> 
     <xsl:when test="$choosenLanguage &#61; ‘NL’"> 
     <xsl:variable name="lang.pageTitle" select="Titel in het nederlands'"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:variable name="lang.pageTitle" select="'This is the title in English'"/> 
     </xsl:otherwise> 
    </xsl:choose> 

但我得到的錯誤: java.lang.IllegalArgumentException異常:無法解析參數號$ lang.opdracht

回答

2

下面是一個完整的例子如何能夠在一個通用的做方式

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:my="my:my" exclude-result-prefixes="my"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pLang" select="'nl'"/> 

<my:texts> 
    <pageTitle lang="en">This is the title in English</pageTitle> 
    <pageTitle lang="nl">Titel in het nederlands</pageTitle> 
</my:texts> 

<xsl:variable name="vTexts" select="document('')/*/my:texts"/> 

<xsl:template match="/"> 
    <html> 
     <title> 
     <xsl:value-of select="$vTexts/pageTitle[@lang = $pLang]"/> 
     </title> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉變是在任何XML文檔(未使用),想要的,正確的結果應用(本題是根據全球/外耳炎產生-l參數$pLang)產生:

<html> 
    <title>Titel in het nederlands</title> 
</html> 

請注意

建議所有字符串是從XSLT樣式表文件(或多個)單獨的XML文檔中進行維護。這允許在不更改XSLT代碼的情況下修改/添加/刪除字符串。

要從另一個XML文檔訪問字符串,代碼保持幾乎相同,唯一的區別是現在document()函數的參數是字符串XML文檔的URI。

+0

爲什麼不使用'xml:lang'屬性和'lang($ pLang)'函數? – DanMan

+0

@丹曼,是的,這完全有可能。我不確定這種方法是否仍然可以使用,如果我們有不同的字符串在相同的語言,但具有不同的焦點 - 例如,最終用戶和中間用戶的文本。如果不能用'xml:lang'和'lang()'函數完成,那麼這個答案中的技術仍然適用。 –