2011-05-15 17 views
9

estoy teniendo siguiente archivo 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> 

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

me gustaría localizar texto XSLT: Lista de Empleado, Nombre del empleado & detalles de contactoXSLT localización

¿Cómo localizar el texto xslt?

+1

¿Desea procesar archivos html xml para todas las culturas posibles a la vez, o solo necesita uno basado en alguna configuración? –

+0

Tengo muchos archivos xml y xslt ... por lo que no puedo crear múltiples archivos xslt para cada cultura ... así que preferiría una solución alternativa para no tener que crear varios archivos para cada cultura ... –

+0

Buena pregunta, +1. Vea mi respuesta para un enlace a una solución XSLT pura detallada y eficiente. –

Respuesta

6

puedo ver tres maneras de hacer esto, cuál es el mejor (o si alguna de ellas es una alternativa) depende de cuándo y cómo tiene el xml definitiva:

Construir el XSL mediante programación

Cree el xsl utilizando, por ejemplo, XmlDocument - luego puede usar los recursos de cadena regulares para completar las etiquetas, y posiblemente haga uso de la configuración cultural de su aplicación.

embedd la traducción en el XSL

Utilice un <xsl:param> para decirle al transformar lo que el idioma a utilizar, a continuación, poner una <xsl:choose> en cada cadena:

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

Busque las traducciones como parte de la transformación

Coloque las traducciones en un documento xml propio translation.xml:

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

luego cargar su contenido con:

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

... y acceder a ellos con:

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

+1 Esto es algo realmente cercano. –

+3

Iría por algo similar, pero con donde $ translation es el archivo que contiene traducciones para el idioma elegido; entonces no necesita la parte de lenguaje del predicado para seleccionar una cadena. Además, seleccione la cadena que desea del archivo de traducción con las teclas. –

0

Véase mi respuesta a this SO question, que detalla cómo utilizar eficientemente una tabla de búsqueda almacenada como un documento XML externo adicional, a través de <xsl:key> y la función key().

0

El texto en un XSLT se puede localizar leyendo las cadenas traducidas de un documento XML. Los números también pueden estar localizados.

El documento XML puede contener un idioma con un documento XML para cada idioma o, alternativamente, un solo documento XML con todos los idiomas. Los formatos XML en el siguiente ejemplo siguen a los archivos de recursos de Microsoft .NET (.resx) (un archivo por idioma) o a un único documento de TMX (intercambio de memoria de traducción) con todos los idiomas. Sin embargo, se puede usar cualquier formato, siempre que el XPath utilizado para leer el texto sea coherente.

Ambas opciones utilizan la función XPath 'document' para leer el XML con las cadenas traducidas. Defina parámetros para cada cadena utilizada en el XSLT. El uso de parámetros en lugar de variables permite anular los valores cuando se transforma el XSLT. Use xsl:value-of para mostrar el texto traducido.Cuando se procesa la transformación, pase el código de idioma, por ejemplo, 'fr', y la URL al documento XML de recursos para el idioma deseado.

Consulte mi artículo "How to localize XSLT" para obtener una muestra completa y funcional al http://www.codeproject.com/Articles/338731/LocalizeXSLT.