Announcement

Collapse
No announcement yet.

Sprache in XML auswählen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sprache in XML auswählen

    Hallo Zusammen
    Ich möchte eine Arbeitsanweisung in verschiedenen Sprachen erstellen. Dazu habe ich eine XML- (test.xml) und eine XSL-Datei (XSLFormate11.xsl) erstellt. Wenn ich auf die XML-datei klicke, wird sie mir im InternetExplorer angezeigt. Je nach dem ob in der XSL-Datei steht:
    <xsl:value-of select="English"/>
    oder
    <xsl:value-of select="Gearman"/>
    ..wird der Text in einer anderen Sprache ausgegeben.
    Zum Problem:
    Wie kann ich es anstellen, dass mit dem öffnen der XML-Datei eine Combobox oder ein Link angezeigt wird, damit der User per click die Sprache ändern kann?
    Das zweite Problem wäre noch einen Zeilenumbruch im Text einzufügen, aber das ist momentan noch nicht so wichtig.

    Mir ist bekannt, dass dies in einem Programm kein grosser Aufwand bedeutet, aber ich strebe eine "one-file" (in diesem Fall sind es zwar zwei ) Lösung an.

    XML-Datei:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet href="XSLFormate11.xsl" type="text/xsl"?>
    <AssemblyInstruction>
    <Operation>
    <Number>40</Number>
    <Title>Mount radiator with PCB</Title>
    <Group>Assembling</Group>
    <Picture>smiley1.jpg</Picture>
    <German>
    <Z xml:lang="de">1. Zuerst lesen, erst dann zusammen bauen.</Z>
    <Z xml:lang="de">2. Die Englische Beschreibung gilt als Mastersprache.</Z>
    <Z xml:lang="de">3. Bei Änderungen bitte immer auch die Englische Beschreibung anpassen.</Z>
    </German>
    <English>
    <Z xml:lang="en">1. Please read first the text, before you start with assembling.</Z>
    <Z xml:lang="en">2. The english description is the master description.</Z>
    <Z xml:lang="en">3. Make sure to adapt allways the english description too, if you make changes on descriptions in other languages.</Z>
    </English>
    </Operation>
    <Operation>
    <Number>41</Number>
    <Title>Electrical test</Title>
    <Group>Testing</Group>
    <Picture>smiley1.jpg</Picture>
    <German>
    <Z xml:lang="de">1. Zuerst lesen, erst dann zusammen bauen.</Z><umbruch></umbruch>
    <Z xml:lang="de">2. Die Englische Beschreibung gilt als Mastersprache.</Z>
    <Z xml:lang="de">3. Bei Änderungen bitte immer auch die Englische Beschreibung anpassen.</Z>
    </German>
    <English>
    <Z xml:lang="en">1. Please read first the text, before you start with assembling.</Z>
    <Z xml:lang="en">2. The english description is the master description.</Z>
    <Z xml:lang="en">3. Make sure to adapt allways the english description too, if you make changes on descriptions in other languages.</Z>
    </English>
    </Operation>
    <Operation>
    <Number>42</Number>
    <Title>Check order fulfillment</Title>
    <Group>Testing</Group>
    <Picture>smiley1.jpg</Picture>
    <German>
    <Z xml:lang="de">1. Zuerst lesen, erst dann zusammen bauen.</Z>
    <Z xml:lang="de">2. Die Englische Beschreibung gilt als Mastersprache.</Z>
    <Z xml:lang="de">3. Bei Änderungen bitte immer auch die Englische Beschreibung anpassen.</Z>
    </German>
    <English>
    <Z xml:lang="en">1. Please read first the text, before you start with assembling.</Z>
    <Z xml:lang="en">2. The english description is the master description.</Z>
    <Z xml:lang="en">3. Make sure to adapt allways the english description too, if you make changes on descriptions in other languages.</Z>
    </English>
    </Operation>
    </AssemblyInstruction>


    XSL-Datei:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template>
    <xsl:for-each select="AssemblyInstruction/Operation">
    <H1>
    <xsl:value-of select="Number"/>
    </H1>
    <IMG BORDER="0">
    <xsl:attribute name="src"><xsl:value-of select="Picture"/>
    </xsl:attribute>
    </IMG>
    <p>
    <xsl:value-of select="Title"/>
    <br/>
    <xsl:value-of select="Group"/>
    <br/>
    <xsl:value-of select="English"/>
    </p>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>

    Für einen Imput wäre ich sehr dankbar. Vielen Dank.

  • #2
    Hallo Zusammen
    Das Auswahlfeld habe ich hingekriegt, indem ich die XSL-Datei mit HTML-Code erweitert habe.
    Wie ändere ich aber nun die Sprache?

    So sieht die XSL-Datei aus:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template>
    <html><head></head>
    <body>
    <select name="sprachen">
    <option value="basic">English</option>
    <option value="fortran">German</option>
    <option value="cobol">Polnish</option>
    <option value="c">French</option>
    <option value="php">Mandarin</option>
    <option value="javascript">Spanish</option>
    </select>
    </body>
    </html>

    <xsl:for-each select="AssemblyInstruction/Operation">
    <H1>
    <xsl:value-of select="Number"/>
    </H1>
    <IMG BORDER="0">
    <xsl:attribute name="src"><xsl:value-of select="Picture"/>
    </xsl:attribute>
    </IMG>
    <p>
    <xsl:value-of select="Title"/>
    </p>
    <p>
    <xsl:value-of select="Group"/>
    </p>
    <p>
    <xsl:value-of select="English"/>
    </p>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>

    Comment


    • #3
      Wenn du ein XML-Dokument direkt laden willst, kannst du keine Interaktion mit dem Benutzer haben, da muss man schon ein HTML-Dokument mit Script laden.
      Beachte auch, dass XSLT 1.0 seit 1999 standardisiert ist und den Namensraum http://www.w3.org/1999/XSL/Transform hat.
      Was du da benutzt (http://www.w3.org/TR/WD-xsl), wird nur von IE unterstützt, von anderen Browsern gar nicht, und meines Wissens von IE 9 auch nicht.

      Comment


      • #4
        hallo,

        zufällig hab ich gerade sowas ähnliches gemacht. Wie Martin schon sagt (er musste es mir auch erst erklären ) musst du die Transformation durch ein Skript auslösen, welches sich z.B. in einer html-Datei befindet, welches die Auswahlbox enthält.

        Bei mir sieht das auf dein Problem angepasst so aus:

        HTML Code:
        <html>
          <head>
            <script type="text/javascript">
            var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0");
            var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
            var xslproc;
            var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
            var outputDiv;
            var language = "fortran";
                
            function init()
            {
              xsldoc.async = false;
              xsldoc.load("tbxxsltest_neu.xsl");
        
              xslt.stylesheet = xsldoc;
              xmldoc.async = false;
              xmldoc.load("tbxbasictest2.xml");
        
              xslproc = xslt.createProcessor();
              xslproc.input = xmldoc;
              outputDiv = document.getElementById("Output");
              xslproc.addParameter("language", language);
        
              
              transform();
            }
            
            function transform()
            {
              xslproc.transform();
              outputDiv.innerHTML = xslproc.output;
            }
            
            function change_lang()
            {
              language = document.getElementsByName("language_select")[0].value;
              
              // Parameter ändern
              xslproc.addParameter("language", language);
              
              // Neu transformieren
              transform();
            }
            
            </script>
            <title>
              XSLT with Javascript
            </title>
          </head>
          <body onload="init();">
            <select name="language_select" onchange="change_lang()">
              <option value="basic">English</option>
        <option value="fortran">German</option>
        <option value="cobol">Polnish</option>
        <option value="c">French</option>
        <option value="php">Mandarin</option>
        <option value="javascript">Spanish</option>
        
            </select
            <br />
            <div id="Output">
            </div>
            
            <noscript>Bitte javascript aktivieren!</noscript>
          </body>
        </html>
        Das funktioniert so allerdings nur im IE!

        In der xsl-Datei brauchst du dann nen Parameter:
        HTML Code:
        <xsl:param name="language />
        Den kannst du dann mit $language in der xsl-Datei ansprechen.
        Sind dann halt insgesamt 3 Dateien, die xml, die xsl und die html-Datei...


        p.s.: Keine Gewähr auf Richtig- bzw. Vollständigkeit

        Comment

        Working...
        X