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 'default'
der WordPress-Domänenname verwendet. Siehe den Link für weitere Details.
Verwenden Sie immer die Zeichenfolge ( '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 %s
Platzhalter teilt dem menschlichen Übersetzer mit, dass dort ein String eingeht. 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 nach der beabsichtigten Bedeutung.)
Dein Code:
$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';
Übersetzen Sie kein HTML. Das ist in jeder Sprache gleich.
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 klar ist, was oben und unten ist, können Sie das verwenden _x()
, um den Kontext dieser Begriffe zu erläutern.
Weitere Übersetzungsfälle finden Sie hier: Internationalisierung: Sie machen es wahrscheinlich falsch
textdomain
muss eine wörtliche Zeichenfolge sein, es kann keine Variable / Konstante / Eigenschaft sein.sprintf()
. Das ist wirklich die Art und Weise, wie HTML in der übersetzbaren Zeichenfolge enthalten ist.sprintf()
in irgendeiner Weise anders hilft, als vielleicht etwas sauberer auszusehen. Wenn Sie einen Satz mit HTML haben,Some text with a <strong>strong</strong> word inside.
wie ist es möglich, den Satz als Ganzes zu übersetzen und nicht zu übersetzenSome text with a
,strong
und zwarword inside
einzeln (was keinen Sinn ergibt ).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.
Das Obige nimmt zwei Zeilen in Ihrer Tabelle für den im Wesentlichen gleichen Text ein. Sie können umgeschrieben werden als:
Reduzieren Sie es auf eine einzelne Zeile.
Manchmal ist HTML im Text unvermeidlich. Nehmen Sie zum Beispiel:
Da Sprachen grammatikalisch sind, würde das Teilen des Textes für jeden, der übersetzt, Probleme verursachen.
Faustregel. HTML- Textformatierungs- Tags im mittleren Satz sind in Ordnung. Sätze, die mit HTML beginnen und enden, verschwenden nur Platz.
quelle
"<b>$string</b>"
. Dann können Sie verwenden'You currently owe %s dollars'
. Möglicherweise muss es jedoch beibehalten werden, wenn Sie es mit der_n()
Funktion verwenden, die einen%d
Platzhalter erfordert .%s
, um es etwas klarer zu machen.