Pregunta

Estoy usando la transformación XSL en XML. Alguna parte de transformación depende de localidad actual. ¿Hay alguna forma de encontrar el local de la actualidad desde XSL?

Por ejemplo, la serialización visible para el usuario de un número de punto flotante puede variar entre las locales ("1.0" en inglés es "1,0" en alemán), y mi transformación debe tener en cuenta las diferencias como estas.

¿Fue útil?

Solución

Los locales no son compatibles de forma nativa en XSLT 1.0, pero hay formas de trabajar con ellos, pero debe pasarlo como parámetro a su procesador XSLT o confiar en extensiones. Alguno Los procesadores le otorgarán acceso a la información local, pero no hay una forma estándar de hacerlo, y debemos conocer su entorno para ver si es posible. Sin embargo, en XSLT 2.0, algunas de las funciones de formato de fecha, hora y número tendrán un soporte (a veces limitado) para los locales, y serán manejados por el procesador, no por usted (por lo que existen estas funciones :)

En cuanto al uso de alguna forma de localidad en un entorno XSLT 1.0 y parcialmente como algo bueno (TM), independientemente de la versión XSLT, configuré algunas plantillas básicas para el tipo de datos con los que está trabajando y pasé el local Parámetro en (como se explicó anteriormente). Para los números, busque el XSL: Número de formato, por ejemplo.

En cuanto a otras cosas locales, crearía otro archivo XML y dejaría que el parámetro funcione como seleccionador para la información que busca. El XML podría parecer;

<locals>
   <config id="de">
     <currency notation="&#8352;" format-number="###.###,##" />
     <text id="welcome">Wilcommen!</text>
   </config>
   <config id="en">
     <currency notation="&#163;" format-number="### ###.##" />
     <text id="welcome">Welcome!</text>
   </config>
   <config id="no">
     <currency notation="NOK" format-number="###.###,##" />
     <text id="welcome">Velkommen!</text>
   </config>
</locals>

De esto, ábralo como;

<xsl:variable name="locale" select="document('locale.xml')/locals/config[@id=$parameter.for.locale]" />

Y puede usarlo como tal para el texto de bienvenida;

<xsl:value-of select="$locale/text[@id='welcome']" />

Para el formato numérico y tal que es un poco más complejo, pero verifique que esta sea la ruta correcta primero y me expandiré, pero básicamente debe hacer algunas claves sobre el archivo XML local y usar una búsqueda clave para los valores. Para los números y tal (necesito contarme más sobre lo que quiere apoyar) escribiría un par de plantillas que traten con eso y lo usaría;

<xsl:call-template name="my-template">
   <xsl:with-param name="this" select="'some_number'" />
</xsl:call-template>

Otros consejos

Pasarlo como parámetro.

<xsl:param name="CultureInfo" select="'default'" />

Coloque un parámetro XSL en el nivel superior de su hoja de estilo y configúrelo desde "afuera" antes de invocar la hoja de estilo.

La otra forma (propietaria) sería registrar funciones de extensión y preguntar desde la hoja de estilo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top