Hilfe:Erweiterung:Übersetzen/Gruppenkonfigurationsbeispiel

From mediawiki.org
This page is a translated version of the page Help:Extension:Translate/Group configuration example and the translation is 100% complete.

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 Erweiterung:Übersetzen werden dir gerne helfen, wenn du nach dem Abarbeiten dieser Anleitung noch Fragen hast.

Voraussetzungen

Diese Anleitung wurde basierend auf der Version r97948 (2011-09-23) der Erweiterung:Ü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

Abhängig von deiner Konfiguration musst du dies möglicherweise als Root oder anderer Benutzer ausführen, bevor du Projektdateien oder Konfigurationsdateien hinzufügst. Auf translatewiki.net ist der Benutzer "betawiki", sodass der obige Befehl ausgeführt wird als:

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/ [1] 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:
  class: FlatPhpFFS
  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:
  class: FlatPhpFFS
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
  codeMap:
    en: english
    "no": norwegian
Beachte, dass du um den Sprachcode 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%.

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:
  class: FlatPhpFFS
  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:
  class: FlatPhpFFS
  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:
    class: FlatPhpFFS
    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
Beachte, dass jede Gruppe durch eine Linie aus drei Strichen --- 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' );
Eine erweiterte Gesamtgruppe (siehe größerer Ausschnitt)

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.