2012-08-23 16 views
6

Estoy intentando hacer una página en diferentes idiomas con xml/xsl. Quiero tener solo un xml y un xsl. En mi página Url tengo un parámetro pLanguage que creo que puedo usar para ver si he seleccionado inglés u holandés.Cómo hacer I18N con xsl y xml

he intentado con este código, pero no sé cómo lo pongo juntos:

Primero hago variables de todas las palabras que tiene a sido traducido así:

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

Para llegar la pageTitle en la plantilla ahora puedo usar

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

pensé para reemplazar a la primera línea de código anterior utilizando una instrucción if-else para comprobar si mi idioma elegido es la norma eN NL o como 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> 

Pero me sale el error: java.lang.IllegalArgumentException: No se puede analizar el argumento número lang.opdracht $

Respuesta

2

Aquí está un ejemplo completo de cómo se puede hacer esto en un genérico manera:

<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> 

Cuando se aplica esta transformación en cualquier documento XML (no se utiliza), el resultado deseado, correcta (el título se genera de acuerdo con lo global/externa l parámetro $pLang) se produce:

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

hacer la nota:

Se recomienda que todas las cadenas se mantienen en un documento XML que es independiente del archivo (s) hoja de estilo XSLT. Esto permite que las cadenas sean modificadas/agregadas/eliminadas sin cambiar el código XSLT.

Para acceder a las cadenas de otro documento XML, el código permanece casi igual, la única diferencia es que el argumento para la función document() ahora es el URI para el documento de cadenas XML.

+0

¿Por qué no utilizar el atributo 'xml: lang' y la función' lang ($ pLang) '? – DanMan

+0

@DanMan, sí, esto es perfectamente posible. No estoy seguro de si este enfoque todavía se puede usar si tenemos diferentes cadenas en el mismo idioma pero con diferente enfoque, por ejemplo, texto para el usuario final y para el usuario intermedio. Si esto no puede hacerse usando '' xml: lang' y la función 'lang()', entonces la técnica en esta respuesta todavía sería aplicable. –