Hilfe:Erweiterung:Übersetzen/Gruppenkonfigurationsbeispiel
Übersetzer (Haupthilfeseite )
- Anleitung zum Übersetzen
- Beste Praktiken
- Statistiken und Berichte
- Qualitätssicherung
- Nachrichtengruppenstatus
- Offlineübersetzung
- Glossar
Übersetzungsadministratoren
- Eine Seite zur Übersetzung vorbereiten
- Seitenübersetzungsadministrator
- Unstrukturierte Elementübersetzung
- Gruppenverwaltung
- Übersetzbare Seite verschieben
- Import translations via CSV
- Working with message bundles
Systemadministratoren & Entwickler
Diese Anleitung wendet sich an Entwickler und erfahrene Übersetzungsadministratoren. Diese Anleitung erklärt, wie man neue Konfigurationsdateien für die Übersetzung der Benutzeroberfläche erstellt und erläutert dabei die praktischen Aspekte. Sie soll zusammen mit der Gruppenkonfigurationsanleitung genutzt werden. Die Entwickler der Übersetzen werden dir gerne helfen, wenn du nach dem Abarbeiten dieser Anleitung noch Fragen hast.
Voraussetzungen
- Installiere MediaWiki
- Installiere die Übersetzungserweiterung und
- Konfiguriere sie.
Diese Anleitung wurde basierend auf der Version r97948 (2011-09-23) der Übersetzen erstellt.
Diese Anleitung beschreibt, wie man die Übersetzung für einige Teile des MyBB-Projektes aktiviert. Du kannst die entsprechenden Schritte auch befolgen, um die Übersetzung anderer Projekte/Dateien zu aktivieren. Einige Dinge werden auf translatewiki.net genauer erläutert, außerdem solltest du natürlich darauf achten, was für deinen Fall relevant ist und diese Anleitung nicht blind befolgen.
Schritt 1: Prüfe den Quelltext
Schauen wir uns mit $wgTranslateGroupRoot
als Arbeitsverzeichnis den MyBB-Quellcode an, in diesem Beispiel /home/betawiki/projects/
.
cd /home/betawiki/projects
svn co http://svn.mybboard.net/mybb/branches/1.6-stable mybb
sudo -u betawiki svn co http://svn.mybboard.net/mybb/branches/1.6-stable mybb
Wir müssen nun die Dateien finden, die die Nachrichten enthalten. Sie befinden sich im Unterverzeichnis mybb/inc/languages/
, die englischen Ausgangsnachrichten befinden sich im Unterverzeichnis english/
.
Lass uns mit mybb/inc/languages/english/index.lang.php
, der ersten Lokalisierungsdatei unseres Projektes, anfangen.
Schritt 2: Dateiformatunterstützung
In unserem MediaWiki-Installationsverzeichnis können wir unter FFS.php
und Translate/ffs/
src/FileFormatSupport/FileFormatFactory.php die Klassen für die Dateiformatunterstützung sehen, die genutzt werden, um Nachrichtengruppen den Lokalisierungsdateien jedes Projektes zuzuordnen. Du musst etwas suchen, um herauszufinden, welche Arten von Formaten unterstützt werden. Wir entscheiden uns, zunächst die FlatPhpFFS-Klasse auszuprobieren und herauszufinden, wie gut sie mit unserer PHP-Datei arbeitet.
Nun haben wir eine Datei für die Zuordnung und wir haben dafür die FFS-Klasse ausgewählt. Jetzt müssen wir eine Gruppenkonfiguration schreiben. Dies ist eine YAML-Datei.
Im Index kannst du einen Link auf die Gruppenkonfiguration finden. Lass uns als Beispiel mit der kleinen Datei aus dem BASIC-Abschnitt beginnen.
BASIC:
id: out-freecol
label: FreeCol (open source game)
description: "{{int:bw-desc-freecol}}"
namespace: NS_FREECOL
class: FileBasedMessageGroup
Wir können einfach den Beispieltext durch unsere eigenen Werte ersetzen.
BASIC:
id: out-mybb
label: MyBB
description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
namespace: NS_MYBB
class: FileBasedMessageGroup
Die Beschreibung akzeptiert jede Form von Wikitext. Ein schöner Trick aus dem originalen Beispiel ist, dass du sie mit {{int:message-key}} übersetzbar machen kannst. Dann musst du jedoch den Standardtext auf der Seite [[MediaWiki:Message-key]] definieren. Beachte, dass die Namensraum-ID über eine Konstante hinzugefügt wird, siehe wie man benutzerdefinierte Namensräume nutzt.
Wir brauchen noch eine Sache: den Abschnitt FILES
. Auch hier gehen wir vom Beispiel aus der Dokumentation aus:
FILES:
format: FlatPhp
sourcePattern: %GROUPROOT%/inc/languages/messages_%CODE%.properties
targetPattern: commonist/messages_%CODE%.properties
Hmm, %CODE%
ist der Sprachcode, wie standardmäßig en
. Zunächst wollen wir die von MyBB genutzte Struktur des Verzeichnisses nicht ändern. Stattdessen können wir für diesen Zweck eine spezielle Funktion nutzen: Code Map, das uns erlaubt, den von unserem Projekt genutzten Identifikatoren Sprachcodes jeder Sprache zuzuordnen.
So enden wir mit:
FILES:
format: FlatPhp
sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
targetPattern: mybb/inc/languages/%CODE%/index.lang.php
codeMap:
en: english
"no": norwegian
no
Anführungszeichen setzen musst, da einige YAML-Parser ihn sonst als booleschen Wert interpretieren.Im Wesentlichen sagt dies aus, dass für den Code en
der %CODE%
english
ist, was das Verzeichnis der englischen Nachrichtendateien ist.
Der Schlüssel targetPattern
ist normalerweise der gleiche wie sourcePattern
, jedoch ohne das Präfix %GROUPROOT%
.
The key targetPattern
is usually the same as sourcePattern
, but without the %GROUPROOT%
prefix.
Gut. Lass uns nun diese Datei irgendwo speichern, zum Beispiel im Ordner MyBB.yaml
, dem gleichen Ordner, in dem auch LocalSettings.php gespeichert wird. Die ganze Datei ist:
BASIC:
id: out-mybb
label: MyBB
description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
namespace: NS_MYBB
class: FileBasedMessageGroup
FILES:
format: FlatPhp
sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
targetPattern: mybb/inc/languages/%CODE%/index.lang.php
codeMap:
en: english
"no": norwegian
Dann müssen wir unserer Erweiterung den Befehl geben, die Datei zu lesen. Füge die folgende Zeile in LocalSettings.php
ein:
$wgTranslateGroupFiles[] = "MyBB.yaml";
Befolge anschließend die Anweisungen auf Hilfe:Erweiterung:Übersetzen/Gruppenmanagement und führe das Skript processMessageChanges.php
aus.
Nun können wir uns anmelden, stelle sicher, dass für den Benutzer das Recht "translate-manage" konfiguriert ist und gehe auf [[Special:ManageMessageGroups]].
Möglicherweise siehst du dies:
No valid namespace defined, got NS_MYBB. Backtrace: <...>
Lies dir in diesem Fall gründlich die Dokumentation durch, möglicherweise musst du die folgende Zeile in LocalSettings.php
einfügen, um den neuen Namensraum in MediaWiki zu registrieren:
wfAddNamespace( 1246, 'MyBB' );
In diesem Beispiel wird 1246 genutzt, du kannst dir jedoch jede freie Namensraum-Nummer nehmen. Für die Übersetzungserweiterung empfehlen wir die Nutzung der Namensraum-Nummern 1200-1298.
Wenn du nun die Spezialseite ManageMessageGroups neu lädst, solltest du eine Zeile erhalten, die anzeigt:
MyBB This message group has not been imported previously.
Klicke auf den MyBB-Link. Anschließend wirst du eine Liste von Nachrichten sehen, die in der Datei enthalten sind. Klicke auf "Ausführen", wenn du mit den Ergebnissen zufrieden bist.
Nachdem du "Ausführen" angeklickt hast, wird die Datei verarbeitet und du wirst eine ähnliche Ausgabe wie diese erhalten:
Imported new version of page MyBB:L\x5b'boardstats'\x5d/en. Imported new version of page MyBB:L\x5b'new posts'\x5d/en. Imported new version of page MyBB:L\x5b'no new posts'\x5d/en. ... Cache rebuild. All done!
Wenn die Datei sehr groß ist, musst du zunächst php Translate/scripts/sync-group.php --group=out-mybb --lang=en
ausführen, da die Web-Oberfläche nur eine begrenzte Anzahl von Nachrichten gleichzeitig importieren kann, da sonst das PHP-Zeitlimit überschritten wird; wenn du dieses Limit erreichst, kannst du auf eine Schaltfläche unten auf der Seite klicken, um die verbleibenden Nachrichten zu importieren.
Schritt 3: Eine weitere Datei hinzufügen
Lass uns nun eine zweite Datei zur Übersetzung von MyBB hinzufügen. Hierfür gibt es zwei verschiedene Möglichkeiten:
Ansatz 1: Eine neue YAML-Datei hinzufügen
Füge einfach eine neue YAML-Datei hinzu und speichere sie unter einem neuen Namen. Rufe sie dann aus LocalSettings.php
ab und befolge die oben genannten Schritte. Die Datei wird ähnlich wie diese aussehen:
BASIC:
id: out-mybb-showthread
label: MyBB
description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
namespace: NS_MYBB
class: FileBasedMessageGroup
FILES:
format: FlatPhp
sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/showthread.lang.php
targetPattern: mybb/inc/languages/%CODE%/showthread.lang.php
codeMap:
en: english
"no": norwegian
Wie aus dem obigen Beispiel deutlich wird, musst du für diese neue Gruppe eine andere ID verwenden.
Obwohl dies einfach ist, eignet es sich nicht für hunderte unterschiedliche Übersetzungseinheiten (d.h. Dateien, die Nachrichtengruppen zugeordnet sind). An einem bestimmten Punkt wirst du einzelne Werte aktualisieren müssen und dies für all diese Dateien zu tun, macht keinen Spaß. Glücklicherweise gibt es einen anderen Weg, der unten gezeigt wird.
Ansatz 2: Vorlagen-Syntax
Die Idee ist, dass wir verbreitete Werte in eine Vorlage setzen. Dann kann jede Gruppe fehlende Werte aus der Vorlage entnehmen und sie müssen nicht für jede Gruppe wiederholt werden.
Lass uns zu unserem MyBB-Beispiel zurückkehren. Wir möchten zum Beispiel, dass die übersetzbaren Nachrichten index.lang.php
, showthread.lang.php
und global.lang.php
enthalten. Die YAML-Datei muss wie folgt aktualisiert werden:
TEMPLATE:
BASIC:
description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
namespace: NS_MYBB
class: FileBasedMessageGroup
FILES:
format: FlatPhp
codeMap:
en: english
"no": norwegian
---
BASIC:
id: out-mybb-index
label: MyBB - index page
FILES:
sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
targetPattern: mybb/inc/languages/%CODE%/index.lang.php
---
BASIC:
id: out-mybb-showthread
label: MyBB - show thread
FILES:
sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/showthread.lang.php
targetPattern: mybb/inc/languages/%CODE%/showthread.lang.php
---
BASIC:
id: out-mybb-global
label: MyBB - global messages
FILES:
sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/global.lang.php
targetPattern: mybb/inc/languages/%CODE%/global.lang.php
---
ohne vorhergehende oder dazwischenliegende Leerzeichen abgetrennt werden muss! Andernfalls wird die YAML-Datei nicht korrekt zerteilt.Wie in dem obigen Beispiel deutlich wird, wird codeMap
nur einmal definiert; das Hinzufügen und Entfernen von Dateien ist so einfach wie das Hinzufügen oder Entfernen eines Abschnitts in der obigen Datei.
Wenn du nun auf die Spezialseite ManageMessageGroups gehst, solltest du drei Objekte sehen, die in etwa wie folgt aussehen:
MyBB global messages: This message group has not been imported previously. MyBB index page: This message group has not been imported previously. MyBB show thread: This message group has not been imported previously.
Wenn dein Projekt viele Dateien beinhalten soll, kann es sinnvoll sein, ein Skript zu schreiben, das die YAML-Datei für dich generiert. Ein Beispiel befindet sich auf svn:trunk/translatewiki/StatusNet/genStatusNet-plugins.php.
Schritt 4: Gesamtgruppe
Das Hinzufügen einer Gesamtgruppe und die Definition der Nachrichtendateien als deren Untergruppen hat zwei Vorteile:
- Weniger Arbeit für Übersetzer, um unterschiedliche Nachrichtengruppen auszuwählen, insbesondere bei Wartungsarbeiten. Übersetzer können einfach die Gesamtgruppe öffnen und alles, was aktualisiert oder übersetzt werden muss, für alle Gruppen übersetzen oder aktualisieren.
- Statistiken können für die Gesamtgruppe, d.h. das ganze Projekt, erstellt werden.
Um eine Gesamtgruppe zu definieren musst du den folgenden Abschnitt direkt nach dem Abschnitt TEMPLATE und vor der Definition der einzelnen Untergruppen einfügen:
---
BASIC:
id: out-mybb-0-all # The id should sort before all the subgroups it has
label: MyBB
meta: yes
class: AggregateMessageGroup # Not taken from template
GROUPS:
- out-mybb-* # We could specify them one by one, but wildcard is easier
Damit sind wir ziemlich weit gekommen, jedoch fehlt noch ein Schritt. Wenn du zu diesem Zeitpunkt auf Special:Translate gehst, wirst du die MyBB-Gesamtgruppe sehen (und sie funktioniert!), jedoch werden auch die Untergruppen als getrennte Gruppen aufgelistet. :(
Dies kannst du beheben, indem du die folgende Zeile in deine LocalSettings.php
einfügst:
$wgTranslateGroupStructure['/^out-mybb/'] = array( 'mybb' );
Dies sorgt dafür, dass von allen Gruppen, deren ID zu dem vorgegebenen Muster passt, nur die erste Gruppe angezeigt wird und alles unterhalb dieser Gruppe versteckt wird. Das ist zwar unschön, funktioniert jedoch. Diese Konstruktion unterstützt nur zwei Stufen, obwohl Gesamtgruppen Teil von Gesamtgruppen sein können.
Wenn du jetzt auf [[Special:Translate]] gehst, siehst du nur die Gesamtgruppe MyBB. Außerdem wirst du einen Link "Zeige 3 Untergruppen" sehen; wenn du ihn anklickst, werden dir die Namen der Untergruppen angezeigt.
Sieh dir die Anleitung für TAGS und weitere Abschnitte an, die wir in dieser Anleitung nicht behandelt haben.
Schritt 5: Aufräumen
YAML-Dateien von Projekten, die von translatewiki.net unterstützt werden, werden in das translatewiki-Repositorium auf Git übernommen.
In translatewiki.net befinden sich die LocalSettings.php
-Zeilen in TranslateSettings.php
. Das Sandboxwiki auf translatewiki.net hat keine TranslateSettings.php
-Datei, weshalb wir alles zu LocalSettings.php
hinzugefügt haben.
Sandboxwiki at translatewiki.net does not have a TranslateSettings.php
file, which is why we added everything in LocalSettings.php
.