Startseite » Dokumentation » Support » Übersetzung für Texte durch andere Plugins und Themen

Übersetzung für Texte durch andere Plugins und Themen

WPML hilft bei der Übersetzung von Texten, die durch andere Plugins und durch das Thema erstellt wurden. Beginnen wir mit einem Beispiel.

Das beliebte Plugin Contact Form 7 erstellt Kontaktformulare, die Sie Ihrer Webseite hinzufügen können. Sie können die Standardfelder (z.B. Name und Email) verwenden und eigene Felder hinzufügen. Wenn sich Besucher die Webseite in verschiedenen Sprachen ansehen, muss auch das Kontaktformular in der entsprechenden Sprache angezeigt werden.

Sind alle Texte im Plugin hart codiert, können sie mit gettext (der .mo-Datei des Plugins) lokalisiert werden. Wie verfahren Sie jedoch mit Texten, die der Benutzer eingibt? Fügt der Benutzer dem Kontaktformular ein neues Feld hinzu, z.B. Beruf, kann dieses nicht mithilfe der .mo-Datei des Plugins übersetzt werden. Der Benutzer muss eine Übersetzung für diesen Text bereitstellen können.

String-Übersetzung in WPML

WPML umfasst einen Mechanismus für die Übersetzung dieser Art von Texten. Standardmäßig hilft es Benutzern dabei, den Blogtitel, die Tag-Zeile, Text-Widgets und andere Texte zu übersetzen, die WordPress generiert. Andere Plugins und das Thema können diesen Mechanismus ebenfalls verwenden, um die Übersetzung für Texte bereitzustellen, die angezeigt werden müssen.

1. Registrieren Sie die Strings, die übersetzt werden müssen

Erstellt der Benutzer neue Strings oder aktualisiert vorhandene Strings, müssen diese in der String-Tabelle von WPML registriert werden. Rufen Sie hierzu folgendes auf:

icl_register_string($context, $name, $value)
  • $context – der Name des Plugins in einem vom Menschen lesbaren Format
  • $name – der Name des Strings, so kann der Benutzer (oder Übersetzer) leichter erkennen, was übersetzt wird.
  • $value – der String, der übersetzt werden muss.

Wollten wir in unserem Beispiel mit dem Kontaktformular ein neues Feld ("Beruf") hinzufügen, wäre der Aufruf:

icl_register_string('Contact Form 7', 'Input field label', 'Profession')

Das sagt WPML, dass der String "Profession" übersetzt werden muss. Bei der Übersetzung bemerkt der Benutzer, dass das Feld zum Plugin "Contact Form 7" gehört und dass es ein "Input field label" ist.

Benötigt das Plugin Übersetzung eines bestimmten Textes nicht mehr (z.B. weil der Benutzer das Feld aus dem Kontaktformular gelöscht hat), kann der String mit dem folgenden Aufruf aus der Übersetzungstabelle gelöscht werden:

icl_unregister_string($context, $name)

2. Nutzung der Übersetzung beim Anzeigen

Wird das Plugin Kontaktformular angezeigt, muss es die Übersetzungen holen und verwenden. Hierzu verwendet es die Funktion icl_t :

icl_t($context, $name, $value)

WPML sucht nach einem String mit übereinstimmendem $context und $name. Findet es diesen, sucht es nach der Übersetzung in der entsprechenden Sprache (der Sprache, in der die Webseite angezeigt wird). Existiert eine Übersetzung, wird diese zurückgeliefert. Andernfalls wird der ursprüngliche String zurückgeliefert

Das Argument $value wird an den Aufruf icl_t() geliefert, sodass der normale Stringwert zurückgeliefert wird, falls WPML zum Zeitpunkt der Erstellung nicht aktiv war und der String nicht registriert ist.

So funktioniert die Stringübersetzung intern in WPML

WPML umfasst eine String-Übersetzungsschnittstelle, welche die Strings auflistet und die Verwaltung von deren Übersetzung ermöglicht.

Die String-Übersetzungsschnittstelle von WPML

Die String-Übersetzungsschnittstelle von WPML

Klicken Benutzer für einen String auf translations, wird ein mehrsprachiges Übersetzungspanel geöffnet, in dem der Benutzer die Übersetzung pro Sprache bearbeiten kann. Zu jeder Übersetzung gehört ein Kennzeichen Complete. Sind die Übersetzungen in alle Sprachen abgeschlossen ("Complete"), wird auch der String selbst als "Complete" gekennzeichnet.

Ändert sich der String, werden alle seine Übersetzungen als incomplete markiert, sodass der Benutzer weiß, dass die Übersetzung überarbeitet werden muss.

Die gesamte Stringbearbeitung erfolgt in derselben WordPress Admin-Schnittstelle und erfordert keine Aufrufe von externen Services.

Integrierung der WPML Stringübersetzung mit Plugins und Themen

Bei der Integrierung der Stringübersetzung in Plugins und Themen ist es wichtig darauf zu achten, dass der Aufruf vorhanden ist.

Die Aufrufe der String-Übersetzungsfunktionen von WPML müssen in function_exists() Statements eingeschlossen werden. So wird WPML aufgerufen, falls dieses aktiv ist. Andernfalls bleibt der Vorgang wie gehabt.

Darüber hinaus sollten Plugin-Entwickler den Fall berücksichtigen, dass WPML aktiviert wird, lange nachdem der Benutzer beginnt, das Plugin zu nutzen. In diesem Fall erfolgt der Aufruf icl_register_string nicht, wenn neue Text-Strings erstellt werden, und diese werden niemals übersetzt Zur Lösung dieses Problems sollten immer alle Benutzer-Strings registriert werden, sobald der Admin-Bildschirm für das Plugin geladen wird.

Dadurch wird die Ausführungszeit geringfügig verlängert, aber es wird auch sichergestellt, dass alle Strings immer zur Übersetzung geschickt werden und aktuell sind. Der Code kann einmalig überprüfen, ob icl_register_string vorhanden ist und dieses dann aufrufen, um alle Strings zu registrieren, die Benutzer erfassen können.

Wird diese Funktion mit den Werten "blank" oder "NULL" aufgerufen, wird sie von WPML ignoriert. Existiert der String bereits und wurde nicht modifiziert, wird der Aufruf ebenfalls ignoriert. Er wirkt sich nur dann aus, wenn neue oder modifizierte Strings registriert werden.

Die gesamte Übersetzungstabelle wird im Cache gespeichert, so dass ihr wiederholter Aufruf nur wenig Verarbeitungsaufwand bedeutet.

Was muss zur Übersetzung geschickt werden

Beginnen wir zunächst mit dem, was nicht mithilfe von icl_register() zur Übersetzung geschickt werden muss.

WPML verwendet verschiedene Beiträge, Seiten, Tags und Kategorien für verschiedene Sprachen. Das heißt, dass falls eine Webseite die Seite- example.com/about/ und example.com/es/sobre/ enthält, sind dies verschiedene WordPress-Seiten.

Alle Texte, die einer Seite hinzugefügt werden, erscheinen bereits in mehreren Sprachen, da der Benutzer den korrekten Text bereits in der Sprache eingibt, in der die Seite geschrieben ist.

Mit der WPML String-Übersetzung müssen Texte übersetzt werden, die zu keinem Beitrag, keiner Seite, keinem Tag und keiner Kategorie gehören. SEO-Plugins erlauben beispielsweise die Eingabe von Texten für den Homepagetitel, Keywords und eine Beschreibung. Dieser Text muss mithilfe der WPML-Stringübersetzung übersetzt werden. So wird er für Homepages in verschiedenen Sprachen übersetzt angezeigt.

Eine Antwort zu “Übersetzung für Texte durch andere Plugins und Themen”

  1. Peter sagt:

    Hallo,

    ich habe die große Version von WPML gekauft und muss Strings übersetzen, die das Plugin nicht automatisch findet/auflistet. Diese Erklärung hier hilft mir aber nicht ganz. Denn ich weiß nicht, wo ich die Strings registrieren soll: irgendwo in WordPress auf einer WPML-Konfigurationsseite oder direkt in einer php-Datei? Könnten Sie mir bitte sagen, wo genau ich die Strings registrieren muss? Ich habe von programmieren nicht den leisesten Schimmer, kann aber schon fertigen Code in ein Dokument einfügen, wenn ich weiß, wo ich das machen muss. (Muss ich auch den Code unter Punkt 2. irgendwo eintragen? Wenn ja, wo?)

    In meinem Fall geht es um Werte in den Theme-Options und um ein Widget, das wohl nicht zum Standardumfang von WordPress zählt (ich bin WordPress-Neuling). Es heißt: “Custom Tabbed Widget +” Es ist möglicherweise Bestandteil des Plug-ins “WP-PageNavi”, das ich für das Theme installieren musste. Das verwendete Theme heißt “Paradise Premium” und ist von Thememakers.

    Vielen Dank!
    Peter

Eine Antwort hinterlassen

Bitte hinterlassen Sie hier nur Kommentare über diese Seite.
Technischen Support finden Sie in unserem Forum, in dem Sie auch Vorschläge zu Funktionen los werden können. Wir warten auf Sie!

Sie können diese Tags verwenden:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>