it-swarm.com.de

HTML in __ () oder _e () Sprachübersetzung

Was ist der richtige Ansatz zum Erstellen von Übersetzungszeichenfolgen?

Zum Beispiel,

echo __( 'Hello ' . $first . ' you owe me money.' );
echo __( '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>' )

Ist es in Ordnung, die Zeichenfolgen und/oder HTML hinzuzufügen, oder sollte dies zuerst geschehen und dann die Übersetzung wie folgt durchlaufen:

$html = '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>';
echo __( $html ); 
23
Jason

Es gibt ein zweites Argument in der Funktion __() . Es sollte auf die Domain eingestellt sein, die Sie für Ihr Plugin oder Theme verwenden. In den folgenden Beispielen verwende ich 'text_domain'. Ihre Domain-Zeichenfolge sollte eindeutig sein. Es sollte keiner anderen Domain-Zeichenfolge entsprechen. Wenn Sie kein Textdomänenargument verwenden, wird standardmäßig der WordPress-Domänenname 'default' verwendet. Siehe den Link für weitere Details.

Verwenden Sie immer den String ('text_domain'). Verwenden Sie niemals eine Variable, Funktion oder Konstante mit der Zeichenfolge darin. Die meisten (alle?) Übersetzungsprogramme werden es ohne die Zeichenfolge dort nicht sehen.

Dein Code:

echo __( 'Hello ' . $first . ' you own me money.' );

Fügen Sie keine Variablen in die Zeichenfolge ein.

Ein besserer Weg:

echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

Oder nur:

printf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

Der Platzhalter %s teilt dem menschlichen Übersetzer mit, dass eine Zeichenfolge darin enthalten ist. Verwenden Sie %d für Zahlen. Es gibt auch andere Platzhalter .

(Dieser Satz ist grammatikalisch falsches Englisch. Verwenden Sie entweder 'Hello %s, you owe me money.' oder 'Hello %s, you own my money.', je nachdem, welche Bedeutung Sie beabsichtigt haben.)


Dein Code:

$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';

Übersetzen Sie kein HTML. Es ist in jeder Sprache das Gleiche.

Ein besserer Weg:

$html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) .  $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin );

Oder teilen Sie es in mehrere Zeilen auf:

$html = sprintf(
    '<div><p>%s</p><p>%s</p></div>',
    __( 'Top: ', 'text_domain' ) .  $t_margin,
    __( 'Bottom: ', 'text_domain' ) . $b_margin
);

Wenn nicht ersichtlich ist, was Top und Bottom ist, können Sie die _x() verwenden, um den Kontext dieser Begriffe zu erläutern.


Weitere Übersetzungsfälle finden Sie hier: Internationalisierung: Sie machen es wahrscheinlich falsch

37

Ich werde das Problem der Variablen in der Zeichenfolge nicht ansprechen, da dies bereits gesagt wurde.

Sie möchten, dass Ihre Zeichenfolge statisch bleibt, sodass sich der Inhalt nicht ändert. Sie möchten auch unnötiges HTML fernhalten.

__( '<p>Hello World!</p>' );
__( '<h1>Hello World!</h1>' );

Das Obige nimmt zwei Zeilen in Ihrer Tabelle für den im Wesentlichen gleichen Text ein. Sie können umgeschrieben werden als:

'<p>' . __( 'Hello World!' ) . '</p>'
'<h1>' . __( 'Hello World!' ) . '</h1>'

Reduzieren Sie es auf eine einzelne Zeile.

Manchmal ist HTML im Text unvermeidlich. Nehmen Sie zum Beispiel:

__( 'You currently owe <b>%s</b> dollars' );

Da Sprachen grammatikalisch sind, würde das Teilen des Textes für jeden, der übersetzt, Probleme verursachen.

Faustregel. HTML-Text Formatierung Tags im mittleren Satz sind in Ordnung. Sätze, die mit HTML beginnen und enden, verschwenden nur Platz.

4
Twifty