7.3. Platzhalter in Übersetzungen

Der Satzbau ist nicht in jedem Land gleich. Existiert im englischen ein Satz wie: “The post with the title „Nonsense“ has been deleted.“, so wird dieser im deutschen wohl mit “Der Artikel mit dem Titel „Nonsense“ wurde gelöscht. übersetzt. Wie aber bekommen Sie den durchaus dynamischen und vom Benutzer eingegebenen Titel in die Übersetzung?

Schlechtes Beispiel

<?php
echo __( 'The post with the title', 'mm_trans' ) . ' ' . $title . ' ' . __( 'has been deleted.', 'mm_trans' );
?>

Das Problem sind der bereits angesprochene Satzbau aber auch die Übersichtlichkeit bei der späteren Übersetzung. Sind die Sprachen Englisch und Deutsch sich noch relativ ähnlich, so wird es bei anderen Sprachen schwieriger. Kurzum: Sie können einen String nicht (wie im schlechten Beispiel oben) so aufbauen, dass er für jede Sprache gültig ist.

Darüber hinaus erhalten Sie nun auch mehrere auseinander gerissene Sätze in der späteren Übersetzungsdatei:

  • „The post with the title“ und
  • “has been deleted.“

Damit geht der Zusammenhang vollkommen verloren. Vor allem, wenn sich dazwischen noch weitere Übersetzungen befinden:

  1. „The post with the title“
  2. “Save“
  3. “Cancel“
  4. “Never show this warning again“
  5. “has been deleted.“

Sie sehen: Es wird unübersichtlich. Das wollen wir mit Platzhaltern vermeiden. Die Funktionen dafür liefert uns diesmal nicht WordPress sondern PHP höchst selbst.

sprintf()

Die Funktion sprintf() ersetzt Ihnen alle Vorkommen von %{Platzhalter} durch die später angegebenen Parameter. Sie erlaubt eine unbegrenzte Anzahl von Parametern. Wobei gilt:

  • $format (string)
    Der erste Parameter ist die Formatierungsanweisung des Strings.
  • $arg1 (mixed)
    Eine Variable.
  • $arg2 (mixed)
    Eine zweite Variable.
  • $arg3 (mixed)
    Eine dritte Variable.
  • Und so weiter …

Jede Formatierungsanweisung selbst besteht aus einem Prozent-Zeichen (%), gefolgt von einem oder mehreren der folgenden Elemente:

  • %%
    Gibt das Prozentzeichen % aus.
  • %b
    Gibt einen Integer als Binärwert aus.
  • %c
    Gibt einen Integer als ASCII-Zeichen aus.
  • %d
    Gibt einen Integer vorzeichenbehaftet als Dezimalwert aus.
  • %e
    Gibt eine wissenschaftliche Notation aus (z.B. 1.2e+2).
  • %E
    Wie %e aber mit großem E (z.B. 1.2E+2).
  • %u
    Gibt einen Integer als vorzeichenlosen Dezimalwert aus.
  • %f
    Gibt einen Float-Wert als Fließkommazahl (abhängig von den lokalen Zeit-Einstellungen) aus.
  • %F
    Gibt einen Float-Wert als Fließkommazahl (unabhängig von den lokalen Zeit-Einstellungen) aus.
  • usw.

Eine Übersicht über alle möglichen Formatierungsanweisungen erhalten Sie hier: http://www.php.net/manual/de/function.sprintf.php. Nachfolgende ein paar Beispiele dazu:

You’re not allowed to see this content. Please log in first.

printf()

Im Gegensatz zu sprintf() gibt printf() den String direkt aus (keinen Rückgabewert). Die Funktion arbeitet ansonsten genau wie oben beschrieben.

Beispiel

You’re not allowed to see this content. Please log in first.

vsprintf()

Diese Funktion arbeitet wie sprintf(), erwartet jedoch neben der eigentlichen Formatierungsanweisung als einzigen weiteren Parameter ein Array mit allen Werten. Zurückgegeben wird ein String.

Beispiel

You’re not allowed to see this content. Please log in first.

vprintf()

Diese Funktion arbeitet wie printf(), erwartet jedoch neben der eigentlichen Formatierungsanweisung als einzigen weiteren Parameter ein Array mit allen Werten. Es wird nichts zurück gegeben. Stattdessen erfolgt die Ausgabe sofort.

Beispiel

You’re not allowed to see this content. Please log in first.