Hi Andre, *,

2009/9/12 André Schnabel <andre.schna...@gmx.net>:
> Thomas Hackert schrieb:
>
>> Also es geht um Folgendes:
>> In der Datei xliff_help-de/shared/00.xlf befinden sich etliche
>> Segmente, wo im Original
>> <quote>
>> (ENTER ALTERNATE DESCRIPTION HERE)
>> </quote>

Zitate einer xml-Datei mit xml-tags zu kennzeichnen finde ich etwas
verwirrend :-)

>> steht, die einfach nur mit "Symbol" im tag (wo ich auch sowas
>> irgendwie in Erinnerung hatte, dass wir den Text nicht übersetzen
>> sollten. Oder lieg' ich da falsch?). Nur: Im Original hat sich dann
>> noch die Größenangabe minimal geändert wie z.B. im Segment 1249, wo
> [...]
> Diese Fehlerart lässt sich aber besser per Script korrigieren. Alle diese
> Segmente können automatisch übersetzt werden.

hier mal ein xslt daß die image-tags 1:1 vom source übernimmt . Bin
mir nicht ganz sicher, ob es doch mal Fälle gibt, in denen die
Übersetzung eine andere Grafik oder andere Größe verwerndet. Falls das
vorkommen soll/darf, dann muß das Skript angepaßt werden.
Außerdem wird die Reihenfolge von source und target im alt-trans
Element korrigiert.

In der angesprochenen shared/00.xlf gibt es jedenfalls neben der
Abweichung bei der Größe auch abweichungen bei den Dateinamen
Bsp: refpin1.png und refpin2.png im Source ist was anderes, allerdings
ist da auch die id eine andere...

Naja, egal, hier das Stylesheet (zum Vergleich original und
umgewandelt am besten tidy oder xmllint über beide Dateien laufen
lassen um die Einrückung und Zeilenumbrüche anzupassen).

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="2.0" xpath-default-namespace="urn:oasis:names:tc:xliff:document:1.1">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no" />

<!-- just copy everything as-is unless otherwise specified  -->
<xsl:template match="*">
        <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:apply-templates/>
        </xsl:copy>
</xsl:template>

<xsl:template match="alt-trans" mode="#default">
        <!-- no need to modify, just correct the order of elements -->
        <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:sequence select="source,target"/>
                <xsl:sequence select="* except (source|target)"/>
        </xsl:copy>
</xsl:template>

<xsl:template match="source|target" mode="align">
        <!-- adapt rule, align the image tags to those of the
trans-unit's source -->
        <xsl:param name="imagetag"/>
        <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:value-of
select="replace(.,'&lt;image[^&gt;]*&gt;',$imagetag)"/>
                <xsl:apply-templates/>
        </xsl:copy>
</xsl:template>

<xsl:template match="alt-trans" mode="align">
        <!-- adapt rule, align the image tags to those of the
trans-unit's source -->
        <xsl:param name="imagetag"/>
        <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:apply-templates select="source,target" mode="align">
                        <xsl:with-param name="imagetag" select="$imagetag"/>
                </xsl:apply-templates>
                <xsl:sequence select="* except (source|target)"/>
        </xsl:copy>
</xsl:template>

<xsl:template match="trans-unit">
        <xsl:copy>
                <xsl:copy-of select="@*"/>
                <!-- source can always be copied as-is -->
                <xsl:sequence select="source"/>
                <!-- image tag present? -->
                <xsl:choose>
                        <xsl:when
test="matches(source,'&lt;image[^&gt;]*(width|height)=')">
                                <!-- assumption is that the image tag
is not to be touched by translators at all,
                                if translators need to modify
filenames, other stuff contained in the tag, then
                                one needs to extract the
width/height/other parts seperately like this:
                                <xsl:variable name="img_width"
select="replace(./source,'^.*&lt;image[^&gt;]*width=&quot;([^&quot;]*)&quot;.*','$1')"/>
                                <xsl:variable name="img_height"
select="replace(./source,'^.*&lt;image[^&gt;]*height=&quot;([^&quot;]*)&quot;.*','$1')"/>
                                -->
                                <xsl:variable name="imagetag"
select="replace(./source,'^.*(&lt;image[^&gt;]*&gt;).*','$1')"/>
                                <xsl:apply-templates
select="target,alt-trans" mode="align">
                                        <xsl:with-param
name="imagetag" select="$imagetag"/>
                                </xsl:apply-templates>
                        </xsl:when>
                        <xsl:otherwise>
                                <!-- simple copy is sufficient for
target, but alt-trans might need reordering -->
                                <xsl:sequence select="target"/>
                                <xsl:apply-templates select="alt-trans"/>
                        </xsl:otherwise>
                </xsl:choose>
                <!-- copy the remaining tags as-is -->
                <xsl:sequence select="* except (source|target|alt-trans)"/>
        </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Zum anwenden des Stylesheets kann man beispielsweise saxon verwenden,
das ist bei OOo dabei:
java -jar <ooo-basis-dir>/program/classes/saxon9.jar  00.xlf
transform.xslt    >processed.xlf
(bzw. mit -o ausgabe.xlf anstatt mit redirection)
ciao
Christian

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@de.openoffice.org
For additional commands, e-mail: dev-h...@de.openoffice.org

Antwort per Email an