PmWiki unterstützt die Internationalisierung von Netzseiten, erlaubt etwa Buchstaben mit Akzenten oder Umlauten in Seitennamen und bietet fast vollständige Anpassungsmöglichkeiten für PmWiki-Meldungen. Die meisten Anpassungen werden von PmWiki mittels der Funktion XLPage() zu Verfügung gestellt, die einen Satz von Übersetzungsvariablen aus einer Wikiseite lädt, üblicherweise XLPage genannt, die Seite kann aber beliebig umbenannt werden.
Der Rest dieser Seite widmet sich der Installation, Konfiguration und dem Gebrauch der Unterstützung anderer Sprachen. Wenn Sie nach Werkzeugen und Hilfe suchen, um PmWiki in Ihrer Sprache zu lokalisieren oder wie Sie die vorhandene Übersetzung verbessern können, beginnen Sie mit der Seite Lokalisierung – dem Übersetzungsportal, auf englisch.
Laden von Übersetzungs-Seiten
Seiten in vielen anderen Sprachen, darunter Französisch, Deutsch, Holländisch und Spanisch, werden in der pmwiki.com-Website bereits bereitgestellt und gepflegt. Sie können ein Archiv dieser Übersetzungen von http://www.pmwiki.org/pub/pmwiki/i18n/ herunterladen. Entpacken Sie einfach das(die) Archiv(e) in das Verzeichnis, das Ihre pmwiki.php-Installation enthält. Jedes Archiv enthält eine Reihe von Dateien, die im wikilib.d/-Verzeichnis gespeichert werden, sowie einige spezielle Skripten für Übersetzungen, die andere Zeichensätze als iso-8859-1 (standardmäßig von PmWiki verwendet) benutzen. Sie können auch den Zeichensatz UTF-8 benutzen.
Für eine deutsche Installation reicht es, die Dateien PmwikiDe.*
in das Verzeichnis wikilib.d
zu entpacken und hochzuladen.
Nach dem Installieren der Übersetzungs-Seiten aktivieren Sie eine bestimmte Sprache, indem Sie einen Aufruf von XLPage() in Ihre config.php einfügen. Beispielsweise erfolgt das Auswählen der deutschsprachigen Meldungen mittels
include_once("scripts/xlpage-utf-8.php"); # optional XLPage('de','PmWikiDe.XLPage');
Diese Anweisung lädt die deutschen Übersetzungen ('de') von der Seite PmWikiDe.XLPage. Die "include once"-Zeile wird empfohlen, wenn Sie ein neues Wiki aufsetzen und sie sollte vor der XLPage-Zeile stehen. Für Sprachen mit anderen Alphabeten als dem lateinischen ist die "include once"-Zeile zwingend nötig. Diese Zeilen sollten nahe dem Beginn der config.php-Datei stehen, aber nach jeglicher Setzung von $WikiDir und $WikiLibDirs (wenn Sie eine solche Setzung haben) .
Es ist problemlos möglich, mehrere Übersetzungsseiten zu laden. Wenn Sie also eigene Übersetzungen nutzen wollen, ohne die aus dem i18n-Archiv zu verändern, erzeugen Sie einfach eine neue Seite (siehe unten) und laden sie. Ihre eigenen Übersetzungen müssen zuerst geladen werden, um Vorrang zu haben:
XLPage('de','PmWikiDe.XLPageLokal'); # meine eigenen Übersetzungen XLPage('de','PmWikiDe.XLPage'); # aus i18n.tgz
Wenn Sie beabsichtigen, in Ihrem Wiki mehrere Sprachversionen anzubieten und Wikigruppen zur Auswahl der Sprache verwenden wollen, benötigen Sie etwas Kode in der Anpassungsdatei der Gruppe (siehe Individuelle Einstellungen pro Gruppe). Wenn Ihr Wiki z. B. deutsche und englische Bereiche enthält und die deutschen Seiten in der Gruppe De
sind, können Sie eine Datei De.php im Verzeichnis local/ mit folgendem Inhalt erstellen:
<?php if (!defined('PmWiki')) exit(); # wechsle zu deutschen Meldungen XLPage('de','PmWikiDe.XLPage');
Es bietet sich in diesem Fall an, auch eine Datei PmWikiDe.php gleichen Inhalts zu erstellen, um auch beim Zugriff auf die deutsche Dokumentation von PmWiki die deutsche Oberfläche von PmWiki zu bekommen. En.php ist in diesem Fall – für den englischen Teil – nicht nötig, da Englisch die Standardsprache ist.
Als Alternative zur Anpassungsdatei "pro Gruppe" ist auch folgender Kode in der config.php möglich, der testet, ob eine XLPage in der Gruppe der angeforderten Seite ist und sie dann lädt (gilt für jede Sprache):
$xlpage = FmtPageName('$Group.XLPage', $pagename); if (PageExists($xlpage)) XLPage($xlpage, $xlpage);
Danach müssen Sie alle relevanten XLPage-Seiten in jede Gruppe kopieren, die die entsprechende Sprachunterstützung haben soll.
Ein anderer (fortschrittlicher) Weg wäre, das folgende Skript in config.php einzufügen. Es fragt vom Webserver die Header ab, die vom Browser des Benutzers gesendet wurden, und wählt eine Sprache aus.
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); switch ($lang){ case "es": XLPage('es','PmWikiEs.XLPage'); break; case "en": XLPage('en','PmWikiEn.XLPage'); break; default: XLPage('en','PmWikiEn.XLPage'); break; }
Siehe auch (englisch)
Neue Übersetzungen erstellen
Wenn für die von Ihnen gewünschte Sprache keine Übersetzungsseiten existieren, ist es einfach, selbst welche zu erstellen! Eine XLPage-Übersetzungsdatei ist eine Datei, die einfach Zeilen der folgenden Form enthält:
'Ausdruck' => 'übersetzter Ausdruck',
Dabei ist "Ausdruck" eine internationalisierte Phrase (durch $[phrase]
gekennzeichnet) in PmWiki's $...Fmt-Variablen und "übersetzter Ausdruck" ist das, was in Ihrer speziellen Sprache auf den Bildschirm kommt. Beispielsweise wandelt die Zeile (in PmWikiDe.XLPage)
'Search' => 'Suchen',
"$[Search]
" bei der Ausgabe in "Suchen" um. Die Datei Lokalisation:XLPageVorlage ist ein guter Ausgangspunkt, um eine neue XLPage-Datei zu erstellen und hat die meisten der PmWiki-Phrasen bereits aufgelistet. Beachten Sie, dass der Übersetzungsmechanismus nur Phrasen übersetzt, die in den $...Fmt-Ausdrücken (der verschiedenen .php-Skripten) als übersetzbar gekennzeichnet sind – es werden keine Wörter übersetzt, die in den Wiki-Formatierungsanweisungen auftauchen.
Wenn Sie neue Versionen von PmWiki-Seiten in anderen Sprachen erstellen, erwägen Sie bitte, sie zu der originalen PmWiki-Site hinzuzufügen, so dass sie mittels der i18n-Archive auch anderen zugänglich gemacht werden! Sie sollten auf jeden Fall das Lokalisationsportal aufsuchen, um weitere Informationen für eine effektive Internationalisierung von PmWiki zu erhalten.
Sonderzeichen in WikiLinks ermöglichen
Um Sonderzeichen wie zum Beispiel deutsche Umlaute in WikiLinks zu ermöglichen, muss die "locale"-Einstellung des Servers richtig eingestellt werden, damit PmWiki die passende Zeichensatzdefinition verwendet.
Falls das wegen beschränktem Zugriff auf die Serverkonfiguration (Hosting) nicht möglich ist, kann PmWiki so eingestellt werden, dass eine bestimmte "locale"-Einstellung aus den XLPage Optionen verwendet wird (siehe XLPageTemplate).
Für deutsche Umlaute ist zum Beispiel erforderlich:
'Locale' => 'deu',
<- für Windows-Server, siehe MSDN List of locale identifiers'Locale' => 'de_DE',
<- für Linux-Server; für die UTF-8-Dekodierung müssen Sie eventuell bei einigen Installationen'de_DE.utf8'
oder'de_DE.UTF-8'
setzen.
Hinweis: Die erforderliche "locale" Einstellung kann vom Betriebssystem und der spezifischen Installation abhängen.
FAQ
Wenn mein Wiki internationalisiert ist durch die config.php, wie kehre ich für eine bestimmte Gruppe zu Englisch zurück?
Benutzen Sie $XLLangs = array('en');
in der Anpassungsdatei der Gruppe (<gruppenname>.php, siehe Individuelle Einstellungen pro Gruppe).
Wenn mein Wiki in Englisch ist und ich nur eine Seite oder eine Gruppe auf Spanisch haben will, schreibe ich dann XLPage('es','PmWikiEs.XLPage');
in die Gruppen- oder Seitenkonfigurationsdatei?
Ja, das ist gewöhnlich die beste Methode. Wenn Sie das mit vielen verteilten Seiten tun oder mit mehreren Sprachen, finden Sie es vielleicht leichter zu verwalten, wenn Sie die Übersetzungen alle in config.php laden wie hier:
XLPage('es','PmWikiEs.XLPage'); XLPage('fr','PmWikiFr.XLPage'); XLPage('ru','PmWikiRu.XLPage'); $XLLangs = array('en');
In der Gruppen- oder Seitenkonfigurationsdatei müssen sie dann nur $XLLangs = array('es');
schreiben, um die Sprache einzustellen, die benutzt werden soll (in diesem Beispiel Spanisch).
Anmerkung: Obwohl diese Methode leichter zu verwalten ist, ist sie etwas langsamer, weil jedes Mal alle Übersetzungstabellen für jedes Seitenansehen geladen werden, auch wenn sie nicht gebraucht werden.
Wofür steht der erste Parameter in dieser Funktion? Wie wird er benutzt?
Der XLPage-Mechanismus erlaubt mehrere Übersetzungssätze zu laden, der erste Parameter dient dazu, diesen Satz zu bestimmen.
Angenommen, ich will zum Beispiel Übersetzungen für normales Französisch und kanadisches Französisch haben. Anstatt zwei ganz und gar getrennte Sätze von Seiten zu verwalten, kann ich dies tun:
XLPage('fr', 'PmWikiFr.XLPage'); XLPage('fr-ca', 'PmWikiFrCa.XLPage');
PmWikiFr.XLPage würde die ganzen Standardfranzösisch-Übersetzungen enthalten, wohingegen PmWikiFrCA.XLPage nur die kanada-spezifischen Übersetzungen enthalten muss – d. h. jene, die sich von denen aus der französischen Seite unterscheiden.
Der erste Parameter unterscheidet die zwei Sätze der Übersetzungen. Zusätzlich kann ein config.php-Skript die $XLLangs-Variable benutzen, um die Reihenfolge der Übersetzungen einzustellen, wenn es also eine Gruppe oder Seite gibt, wo ich nur die Standardfranzösisch-Übersetzung haben möchte, setze ich:
$XLLangs = array('fr', 'en');
und PmWiki nutzt nur die 'fr'- und 'en'- Übersetzungen (in dieser Reihenfolge), egal, wie viele Übersetzungen mit XLPage() geladen worden sind.
Wie kann ich eine Übersetzung für einen individuellen String in einer PHP-Datei hinzufügen?
Benutzen Sie die XLSDV()-Funktion, um eine Übersetzung für einen bestimmten (englischen) String zu liefern. Zum Beispiel hiermit in der config.php-Datei
XLSDV('nl', array('my English expression'=>'mijn Nederlandse uitdrukking'));
wird jedes Vorkommen des Variablenausdrucks $[my English expression]
im Wikiquelltext im Standardkontext (englisch) als my English expression ausgegeben, aber als mijn Nederlandse uitdrukking in niederländischem (nl) Kontext, z. B. wenn XLPage('nl',...)
für jene Seite in der config.php oder einem Kochbuchrezept aufgerufen worden ist.
Wenn Sie eine Übersetzung in einer PHP-Datei erhalten wollen, benutzen Sie die XL()
-Funktion:
$local_string = XL("my English expression");
Aber seien Sie auf der Hut: Die XLPage()-Funktion benutzt intern auch die XLDV()-Funktion für ihre Übersetzungspaare und nur die erste Definition wird akzeptiert. Wenn daher die niederländische XLPage bereits einen Übersetzung für ihren String wie
'my English expression' => 'bla bla',
besitzt und Sie wollen den überschreiben, müssen sie Ihr XLDV('nl', ...) vor dem Aufruf vom korrespondierenden XLPage('nl',...) benutzen. Andernfalls, durch Benutzen von XLSDV() nach XLPage() – z. B. innerhalb eine Rezeptes, das später in der config.php geladen wird – wird ihre Übersetzung nur funktionieren, solange keiner 'my English expression' in jener XLPage definiert.
Übersetzung von PmWiki.Internationalizations, Originalseite auf PmWikiDe.Internationalizations — Rückverweise
Zuletzt geändert: | PmWikiDe.Internationalizations | am 18.11.2019 |
PmWiki.Internationalizations | am 17.11.2019 |