Anpassen von Sprachdateien

(Auszug aus "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" von Thomas Schraitle)

Die flexibelste Möglichkeit die Texte für Sprache zu ändern oder neue einzufügen, besteht mit Sprachdateien.

Aufbau von Sprachdateien

Zum Zeitpunkt der Bucherstellung unterstützen die DocBook-XSL-Stylesheets über 60 Sprachen, die im Verzeichnis common abgelegt sind. Jede dieser Dateien besteht aus einem Sprachcode und der Endung .xml. Die Stylesheets lesen bei der Transformation diese Dateien ein. Jede der Sprachdateien hat einen so genannten Kontext, der in folgender Tabelle gezeigt wird. Der Aufbau der deutschen Datei common/de.xml ist stark gekürzt. Möglicherweise werden im Laufe der Zeit weitere Einträge hinzukommen.

Tabelle: Erlaubte Kontextnamen in einer Sprachdatei

Kontextname Bedeutung
title Enthält Formatangaben, wie ein Titel in Bezug auf den *.autolabel-Parameter zu formatieren ist. Enthält beispielsweise der Parameter chapter.autolabel den Wert 0 (Null), wird der Kontext title-unnumbered gewählt und die Nummerierung eines Kapitels abgeschaltet. Enthält der vorige Parameter jedoch den Wert 1, a oder andere, wird der Kontext title-numbered gewählt. Entsprechendes gilt für Anhang, Buchteil und andere. Der Kontext title wird für alle übrigen Block-Elemente verwendet, die einen Titel enthalten bzw. für Elemente, bei deren obige Kontexte undefiniert sind.
title-unnumbered
title-numbered
subtitle Text für Untertitel, falls anwendbar.
xref Wird beim Erstellen von Querverweisen verwendet. Näheres wird in Anpassen mittels gentext-Template erklärt.
xref-number
xref-number-and-title
authorgroup Text, um Autoren in einem authorgroup voneinander abzugrenzen.
glossary Übersetzungen für die Elemente glosssee und glossseealso.
msgset Übersetzungen für die Elemente msglevel, msgorig und msgaud.
termdef Vor- und Nachtext für das Element termdef.
datetime Datumsformat für die Sprache sowie ausgeschriebene und abgekürzte Monats- und Tagesnamen.
datetime-full
datetime-abbrev
htmlhelp Sprachcode für HTMLHelp.
index Begrenzungszeichen für Indexeinträge.
iso690 Ersetzungstexte für Literaturverzeichnisse nach ISO 690 (siehe auch ISO 690 und ISO 690-2 konforme Ausgabe).

Eine stark gekürzte Darstellung ist in folgendem Beispiel gezeigt.

Beispiel: Auszug der deutschen Sprachdatei common/de.xml

<l:l10n language="de" english-language-name="German" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
  <l:context name="title">
    <l:template name="chapter" text="%t"/>
  </l:context>
  <l:context name="subtitle">
    <l:template name="chapter" text="%s"/>
  </l:context>
  <l:context name="xref">
    <l:template name="chapter" text="Kapitel %n. %t"/>
  </l:context>
  <l:context name="datetime">
    <l:template name="format" text="d.m.Y"/>
  </l:context>
  <l:context name="datetime-full">
    <l:template name="January" text="Januar"/>
  </l:context>
  <l:context name="datetime-abbrev">
    <l:template name="Jan" text="Jan"/>
  </l:context>
  <l:context name="htmlhelp">
    <l:template name="langcode" text="0x0407 German (GERMANY)"/>
  </l:context>
  <l:context name="index">
    <l:template name="term-separator" text=", " lang="en"/>
  </l:context>
  <l:context name="iso690">
    <l:template name="lastfirst.sep" text=", " lang="en"/>
  </l:context> 
</l:l10n>

Anhand dieser Daten kann die Funktion gentext für jede unterstützte Sprache die übersetzte Zeichenkette für ein bestimmtes Schlüsselwort zurückliefern. Jede dieser Sprachdateien besitzt verschiedene Elemente (siehe obigen Code), wobei der gesuchte Eintrag über einen Schlüssel identifiziert wird (zu finden im Attribut key bzw. name). Der übersetzte Text befindet sich im Attribut text. Das Stylesheet benötigt jedoch in manchen Fällen Hinweise, in welcher Reihenfolge bestimmte Teile zu verwenden sind (wie bei Nummerierung/Titel). Hierfür wird als Platzhalter das Prozentzeichen gefolgt von einem Buchstaben eingesetzt (siehe folgende Tabelle "Platzhalter in Sprachdateien").  

Tabelle: Platzhalter in Sprachdateien

Platzhalter Bedeutung
%t wird durch den Titel ersetzt
%s ergibt den Untertitel
%n erzeugt eine Nummerierung
%p fügt Seitennummer ein (nur für XSL-FO sinnvoll)

Die folgende Zeichenkette enthält Platzhalter für Kapitelnummer (%n) und Titel (%t):

Kapitel %n. &quot;%t&quot;

Wird der Text ersetzt, erhält man für dieses Kapitel:

Kapitel 15. "Die DocBook-XSL-Stylesheets"

Anpassen von lokalisiertem Text

Falls Ihnen die Standardübersetzung unpassend erscheint, Sie die Reihenfolge eines bestimmten Formats ändern möchten, oder einen korrigierten Stil benötigen, überschreiben Sie die Standardübersetzungen. Im folgendem Beispiel wird der Standardtext für Kapitel in "Thema" geändert, ebenso für einen Querverweis:

Beispiel: Geänderte Lokalisierung von Kapiteln

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="..."/>
  <xsl:param name="local.l10n.xml" select="document('')"/> 
  <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"> 
   <l:l10n english-language-name="German" language="de" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
     <l:gentext key="chapter" text="Thema"/>
     <l:context name="title-numbered">
       <l:template name="chapter" text="Thema %n %t"/>
     </l:context>
     <l:context name="xref">
       <l:template name="chapter" text="%n. Thema, %t"/>
     </l:context>
     <!-- ... -->
   </l:l10n>
  </l:i18n>
</xsl:stylesheet>

Zeile 4: Zeigt mit Hilfe der leeren document()-Funktion auf das aktuelle Stylesheet.
Zeile 5: Oberstes Element der Sprachdateien, das nur l:l10n-Elemente (l10n ist eine Abkürzung für localisation: erster und letzter Buchstabe sowie die Zahl 10 für die Anzahl der dazwischen ausgelassenen Buchstaben) enthalten kann und an den Namensraum "http://docbook.sourceforge.net/xmlns/l10n/1.0" gebunden ist.
Zeile 6: Jeder Spracheintrag beginnt mit einem l:l10n-Element.
Zeile 9: Nummerierte Komponenten (Wert title-numbered) besitzen Text (erkennbar an %t) und die entsprechende Zahl (%n).
Zeile 12: Querverweise (Wert xref) enthalten den Namen des Verweiselements und den entsprechenden Verweistext.

Das Besondere am obigen Stylesheet ist, dass Parameter und Sprachdaten zusammen in der XSLT-Datei vorhanden sind. In l:10n tragen Sie nur solche Einträge ein, die Sie ändern möchten, wodurch die Gesamtmenge relativ klein bleibt. Indem die document()-Funktion mit einem leeren Argument aufgerufen wird, erhält der Parameter local.l10n.xml die Knotenmenge des aktuellen Stylesheets. Dadurch können die DocBook-Stylesheets die entsprechenden Übersetzungen auswählen.

Diese Methode eignet sich am Besten für wenige Einträge, sonst wird das Stylesheet unübersichtlich. Haben Sie dagegen viele Einträge bietet es sich an, die Sprachanpassungen in eine separate Datei auszulagern (siehe nächster Abschnitt).

Hinzufügen eigener Einträge

Benötigen Sie umfangreichere Änderungen an den Übersetzungen oder müssen Sie für mehrere Sprachen diese ändern, benötigen Sie eine eigene Sprachdatei.

Um beispielsweise für jedes othercredit-Element mit dem Attribut class und den Wert translator den Begriff "Übersetzer" sprachabhängig einzufügen, gehen Sie wie folgt vor:

  1. Erstellen Sie den Rumpf Ihrer Sprachdatei und fügen Sie alle Sprachen ein, die Sie unterstützen möchten. An der Stelle der drei Punkte fügen Sie Ihre angepassten oder neuen Begriffe ein:
<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"> 
  <l:l10n language="en" english-language-name="English"> 
   ...  
  </l:l10n> 
  <l:l10n language="de" english-language-name="German"> 
   ...
  </l:l10n> 
</l:i18n>
  1. "Erfinden" Sie ein neues Schlüsselwort, das nicht bereits in common/en.xml vorhanden ist. Tragen Sie für den englischen Teil (Zeile 3) folgenden Zeile ein:
<l:gentext key="Translator" text="Translator"/> 

Für den deutschen Teil (Zeile 6) tragen Sie ein:

<l:gentext key="Translator" text="Übersetzer"/> 
  1. Erstellen Sie eine Anpassungsdatei wie in Eine Anpassungsdatei für die DocBook-Stylesheets gezeigt wurde. Achten Sie darauf, den URI bzw. Pfad zu Ihrer Sprachdatei richtig zu setzen und fügen Sie folgende Zeile ein:
<xsl:param name="local.l10n.xml" select="document('myl10n.xml')"/> 
  1. Rufen Sie gentext in Ihren Templates auf, um einen übersetzten Begriff zu erhalten. Für dieses Beispiel war eine Übersetzung für othercredit gefordert, daher schreiben Sie:
<xsl:template select="othercredit[@class='translator']"> 
  <xsl:call-template name="gentext"> 
    <xsl:with-param name="key">Translator</xsl:with-param> 
  </xsl:call-template> 
  <!-- ... --> 
</xsl:template>

Durch diese Methode sind Ihre Templates frei von sprachabhängigen Texten. Des Weiteren lassen sich weitere Sprachen mühelos einbinden, falls dies benötigt wird.

  

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema DocBook bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2009 Millin Verlag
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Millin Verlag, Siebengebirgsring 36, 53797 Lohmar, info(at)millin.de