Was bringt die gettext-Syntax?
-
-
Vielen Dankfür Ihre ausführlichen Antworten!Ich weiß das hier wirklich zu schätzen!Thank all of you for your elaborate answers! I really appreciate this here!
- 0
- 2012-07-09
- Circuit Circus
-
... Vielleichtnocheine Frage dazu: Kann der Eintrag der Textdomäne weggelassen werden?Ichfing aufrecht an,es zujedem String zubringen,denich übersetzen wollte,erkannte dann abereinige Beispieleim Wordpress-Codex,diees überhauptnichtenthalten ......Maybe one further question to this: Can the entry of the text-domain be left out? I upright started bring it to every string I wanted to translate but then recognized some examples in the Wordpress codex which don't contain it at all...
- 0
- 2012-07-09
- Circuit Circus
-
... Okay,jetztbin ich auf dieser Codex-Seite daraufgestoßen - Entschuldigungfür diese überflüssige Frage :-)... Okay, now I came across it in this codex page - sorry for this redundant question :-)
- 0
- 2012-07-09
- Circuit Circus
-
3 Antworten
- Stimmen
-
- 2012-07-07
__
(doppelter Unterstrich)ist die Basisübersetzungsfunktion. Es übersetzteine Zeichenfolge undgibt sie als Zeichenfolge zurück._e
macht dasselbe wie__
,aber das Ergebnis wird sofort wiedergegeben._x
ist die kontextbezogene Übersetzungsfunktion. Esgibt eine zweite Option,um den Personen,die die Übersetzung durchführen,einen Kontextbereitzustellen._ex
ist dasselbe wie_x
,aber Echoist das Ergebnis.Beispielfür die Verwendung von
_x
:$string = _x( 'Buffalo', 'an animal', 'plugin-domain' ); $string = _x( 'Buffalo', 'a city in New York', 'plugin-domain' ); $string = _x( 'Buffalo', 'a verb meaning to confuse somebody', 'plugin-domain' );
Manchmal kann dieselbe Zeichenfolgein anderen Sprachen unterschiedlich sein. Durch die Bereitstellung von Kontextfür die Übersetzer können sie die richtigen Wörter auswählen.
Verknüpfungsfunktionen:
-
esc_attr__
: Entspricht__
,führt das Ergebnisjedoch auch überesc_attr
aus. -
esc_html__
: Entspricht__
,führt das Ergebnisjedoch auch überesc_html
aus. -
esc_attr_e
: Entspricht_e
,führt das Ergebnisjedoch auch überesc_attr
aus. -
esc_html_e
: Entspricht_e
,führt das Ergebnisjedoch auch überesc_html
aus. -
esc_attr_x
: Entspricht_x
,führt das Ergebnisjedoch auch überesc_attr
aus. -
esc_html_x
: Entspricht_x
,führt das Ergebnisjedoch auch überesc_html
aus.
_n
ist der Pluralisierungshandler. Beispiel:$string = sprintf( _n( 'You have %d taco.', 'You have %d tacos.', $number, 'plugin-domain'), $number );
In diesem Beispielgibt es zwei Möglichkeiten,die Anzahl der Tacos zubestimmen,je nachdem,ob sie singulär sind odernicht. Dieerste Verwendung von $numberteilt der Funktion
_n
mit,welche Version verwendet werden soll. Die zweite Verwendung von $numbererfolgtim Sprintf,um% d durch dietatsächliche Zahlin der Zeichenfolge zuersetzen.Esgibt keine Echofunktion,diefür
_n
äquivalentist,aberesgibt eine Funktionnamens_nx
. Esisteine Kombination aus_n
und_x
. Pluralisierung und Kontext._n_noop
istetwas Besonderes. Es wird zum Übersetzenpluralisierter Zeichenfolgen verwendet,führt die Übersetzungjedochnicht sofort durch. Diesistnützlich,wenn Sie die Zeichenfolgen zentralisierenmöchten,die Arbeitjedoch aneiner anderen Stelle ausführenmöchten. Die Funktion,die die Arbeittatsächlich an anderer Stelleerledigt,isttranslate_nooped_plural
.Beispiel:
$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain'); // ... later ... $string = sprintf( translate_nooped_plural( $holder, $count ), $count );
Dies wirdnicht oft verwendet,kann aberfür die Organisationnützlich sein. Wenn Siebeispielsweise alle Ihre Zeichenfolgenin einer Datei ablegen und dann an anderer Stelle referenzieren,ist diesmit
_n
nichtmöglich. Dazubenötigen Siebeispielsweise_n_noop
._nx_noop
ist dasselbe wie_n_noop
,kann aber aucheinen Kontextfür die Übersetzer annehmen,wie_x
.Beachten Sie,dass Sie die Domäneentwederin den Funktionsaufrufnoop oderin den Funktionsaufruftranslate_nooped_pluraleinfügen können. Wasfür Ihr Unternehmen sinnvollerist. Wennbeideeine Domain haben,gewinnt die an den Noop-Anruf übergebene.
number_format_i18n
entspricht demin PHPintegrierten number_format ,aberesfügt die Behandlungfür Dinge wie Dezimalstellen usw. hinzu,die sichin anderen Gebietsschemas unterscheiden.date_i18n
entspricht demin PHPintegrierten Datum ,mit all dereinschlägigen Handhabung dort auch. Monatsnamen,Tagesnamen usw.Auch verstößtniemalsgegen die Gesetze . Nureine Erinnerung. :)
__
(double underscore) is the base translate function. It translates a string and returns it as a string._e
does the same as__
, but echo's the result immediately._x
is the contextual translate function. It has a second option to provide context to people doing the translation._ex
is the same as_x
, but echo's the result.Example of using
_x
:$string = _x( 'Buffalo', 'an animal', 'plugin-domain' ); $string = _x( 'Buffalo', 'a city in New York', 'plugin-domain' ); $string = _x( 'Buffalo', 'a verb meaning to confuse somebody', 'plugin-domain' );
Sometimes the same string can be different in other languages. Providing context to the translators can help them pick the right words.
Shortcut functions:
esc_attr__
: Equivalent to__
but also runs the result throughesc_attr
.esc_html__
: Equivalent to__
but also runs the result throughesc_html
.esc_attr_e
: Equivalent to_e
but also runs the result throughesc_attr
.esc_html_e
: Equivalent to_e
but also runs the result throughesc_html
.esc_attr_x
: Equivalent to_x
but also runs the result throughesc_attr
.esc_html_x
: Equivalent to_x
but also runs the result throughesc_html
.
_n
is the pluralization handler. Example:$string = sprintf( _n( 'You have %d taco.', 'You have %d tacos.', $number, 'plugin-domain'), $number );
In that example, there's two ways to say the number of tacos, depending on if it's singular or not. The first use of $number tells the
_n
function which version to use. The second use of $number happens in the sprintf, to replace the %d with the actual number in the string.There is no echo function equivalent for
_n
, but there is a function named_nx
. It's a combination of_n
and_x
. Pluralization and context._n_noop
is a special one. It's used for translating pluralized strings, but not actually performing the translation immediately. This is useful if you want to make the strings centralized but actually do the work elsewhere. The function that actually does the work elsewhere istranslate_nooped_plural
.Example:
$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain'); // ... later ... $string = sprintf( translate_nooped_plural( $holder, $count ), $count );
This isn't used much, but can be handy for organization. If you put all your strings in one file, for example, then reference them elsewhere, this wouldn't be possible with just
_n
, you need something like_n_noop
to do that._nx_noop
is the same as_n_noop
, but also can take a context for the translators, same as_x
.Note that you can put the domain into either the noop function call, or into the translate_nooped_plural function call. Whichever makes more sense for your organization. If both have a domain, then the one passed to the noop call wins.
number_format_i18n
is the equivalent to PHP's built-in number_format, but it adds in the handling for things like decimals and so on, which are different in other locales.date_i18n
is the equivalent to PHP's built-in date, with all the pertinent handling there as well. Month names, day names, etc.Also, never break the laws. Just a reminder. :)
-
Wow,dasist wirklicheine gute Erklärung dafür!Vielen Dankfür Ihre Hilfe!Jetzt seheich klar.Wow, this is really a good explanation of it! Thank you very much for helping! Now I see clear.
- 0
- 2012-07-09
- Circuit Circus
-
- 2012-07-07
__ (),_e () und _x (),_ex ()
__()
und_e()
sindim Wesentlichenbeideein Wrapper vontranslate()
(nicht direkt verwenden) undfastgleich.Der Unterschiedbesteht darin,dass
__()
das Übersetzte zurückgibt Zeichenfolge und_e()
geben es wieder. Beidenmusseine Zeichenfolge alserforderlicher Parameter undnormalerweise,obwohl optional,aucheine Textdomäne zugeführt werden.Analoggibt es
_x()
und_ex()
,mit dem Sieeinen Kontext angeben können,derbeschreiben kann,wo die Zeichenfolge angezeigt wird. Wenn Ihr Projektmehr alsein paar zehn übersetzbare Zeichenfolgenenthält,ist die Verwendung des Kontexts sehr sinnvoll.Beachten Sie auch das Vorhandensein von
_n()
und < a href="http://codex.wordpress.org/Function_Reference/_nx" rel="nofollow">_nx()
für Pluralformen.Beispielfür die allgemeine Verwendung
$output = '<label for="some_field">' . _x( 'Some Information.', 'Some Form Field', 'your-text-domain' ) . '</label>' . '<input type="text" name="some_field" value="" />' . '<p class="description">' . _x( 'Here you can enter some info.', 'Some Form Field', 'your-text-domain' ) . '</p>'; return $output;
Parameter
__( $text, $domain ) _e( $text, $domain ) _x( $text, $context, $domain ) _ex( $text, $context, $domain ) _n( $single, $plural, $number $domain ) _nx( $single, $plural, $number, $context, $domain )
Alle Parameter außer
$number
sind Zeichenfolgen. Alle außer$domain
sinderforderlich.Weitere Flexibilitätmit Variablen und sprintf ()
Wenn Ihre Zeichenfolgen variable Zahlen oder Wörterenthalten,verwenden Sie
sprintf()
:$stars = get_post_meta( $post->ID, 'rating', true ); $title = get_the_title( $post->ID ); $output = '<p>' . sprintf( _x( 'The movie titled %2$s received a %1$d star rating.', 'Movie Description', 'your-text-domain' ), $stars, $title ) . '</p>'; return $output;
Zusätzliche Ressourcen
Einige zusätzliche Ressourcenfür das kommende WordPress I18n Ninja:
- I18nfür WordPress-Entwickler
- Referenzübersicht zu Lokalisierungsfunktionen
- Lokalisierung von Codestyling (fantastisches Plugin!)
- Poedit
__(), _e() and _x(), _ex()
__()
and_e()
are essentially both a wrapper oftranslate()
(do not use directly) and almost the same.The difference lies in that
__()
returns the translated string and_e()
echoes it. Both need to be fed a string as a required parameter and usually, though optional, also a textdomain.Analogously, there's
_x()
and_ex()
, which let you specify a context that can describe where the string appears. If your project includes more than a few tens of translatable strings, using context makes a lot of sense.Also, note the existence of
_n()
and_nx()
for plurals.Example of common usage
$output = '<label for="some_field">' . _x( 'Some Information.', 'Some Form Field', 'your-text-domain' ) . '</label>' . '<input type="text" name="some_field" value="" />' . '<p class="description">' . _x( 'Here you can enter some info.', 'Some Form Field', 'your-text-domain' ) . '</p>'; return $output;
Parameters
__( $text, $domain ) _e( $text, $domain ) _x( $text, $context, $domain ) _ex( $text, $context, $domain ) _n( $single, $plural, $number $domain ) _nx( $single, $plural, $number, $context, $domain )
All parameters but
$number
are strings. All but$domain
are required.Further flexibility with variables and sprintf()
If your strings will contain variable numbers or words, use
sprintf()
:$stars = get_post_meta( $post->ID, 'rating', true ); $title = get_the_title( $post->ID ); $output = '<p>' . sprintf( _x( 'The movie titled %2$s received a %1$d star rating.', 'Movie Description', 'your-text-domain' ), $stars, $title ) . '</p>'; return $output;
Additional resources
Some additional resources for the upcoming WordPress I18n Ninja:
-
Unter ["Lokalisierung" unter "Verschiedenes"im Codex] (http://codex.wordpress.org/Function_Reference/#Miscellaneous_Functions)finden Sie aucheine vollständige Aufschlüsselung der Funktionen und detaillierte Erklärungen.Also check out ["Localization" under "Miscellaneous" in the codex](http://codex.wordpress.org/Function_Reference/#Miscellaneous_Functions) for a complete breakdown of functions & detailed explanations.
- 0
- 2012-07-07
- TheDeadMedic
-
& Diesist der Ort [an dem sich wp-Polyglotstreffen] (http://wppolyglots.wordpress.com/).& this is the place [where wp-polyglots meet](http://wppolyglots.wordpress.com/).
- 0
- 2012-07-07
- brasofilo
-
@Johannes Pille: Ich habe deine Antworterstbemerkt,alsichmeine gepostet hatte. Sollichmeinen Beitrag löschen?@Johannes Pille: I didn't notice your answer until I'd posted mine, should I delete my post?
- 0
- 2012-07-07
- Jeremy Jared
-
@ JeremyJared Nein,warum?Weitere Informationen können keine schlechte Sache sein,oder?!Ich denke,Ihre Antwortistgut durchdacht.+1 vonmir.@JeremyJared No, why? Further info can't be a bad thing, can it?! I think your answer is well thought through. +1 from me.
- 0
- 2012-07-07
- Johannes Pille
-
@TheDeadMedic Bearbeitetin "zusätzliche Ressourcen".@TheDeadMedic Edited into "additional resources".
- 0
- 2012-07-07
- Johannes Pille
-
- 2012-07-07
Ichbin kein Expertefür Übersetzungen,aber die WordPress-Codex-Seiteenthälteine gute Dokumentation underklärt den Grundfür die Verwendungjeder Instanz.
Von den Codex-Seiten:
__()
Wird verwendet,wenn die Nachricht als Argument aneine andere Funktion übergeben wird.
_e()
wird verwendet,um die Nachricht direkt auf die Seite zu schreiben. Weitere Details zu diesenbeiden Funktionen:__('message')
Durchsucht das Lokalisierungsmodulnach der Übersetzung von 'message' und übergibt die Übersetzung an die PHP-return-Anweisung. Wennfür 'message' keine Übersetzunggefunden wird,wirdnur 'message' zurückgegeben.
_e('message')
Durchsucht das Lokalisierungsmodulnach der Übersetzung von 'message' und übergibt die Übersetzung an die PHP-Echoanweisung. Wennfür 'message' keine Übersetzunggefunden wird,wirdnur 'message' wiedergegeben.
Beachten Sie,dass Siebei der Internationalisierungeines Themes oder Pluginseine
"Text Domain"
verwenden sollten.Dasgettext-Framework kümmert sich um dengrößten Teil von WordPress. Esgibt jedocheinige Stellenin der WordPress-Distribution,an denengettextnicht verwendet werden kann:
- Die Haupt-WordPress-README-Datei -es handelt sich umeine statische HTML-Datei,keine PHP-Datei,daher kann sienicht über diegettext-Funktionen ausgeführt werden.
- Einige Fehlermeldungen werden sehrfrühim Ladezyklus von WordPressgeneriert,bevorgettextgeladen wird.
Zusätzliche Informationen dazu,wanngettextnichtfunktioniert
Hoffentlichbeantwortet das Ihre Frage,wennnicht,lassen Siees uns wissen und vielleicht kannjemand anderes helfen oderich kannnochetwas recherchieren.
I'm not an expert on translations, but the WordPress Codex Page has good documentation and explains the reason to use each instance.
From the codex pages:
__()
Is used when the message is passed as an argument to another function;
_e()
is used to write the message directly to the page. More detail on these two functions:__('message')
Searches the localization module for the translation of 'message', and passes the translation to the PHP return statement. If no translation is found for 'message', it just returns 'message'.
_e('message')
Searches the localization module for the translation of 'message', and passes the translation to the PHP echo statement. If no translation is found for 'message', it just echoes 'message'.
Note that if you are internationalizing a Theme or Plugin, you should use a
"Text Domain"
.The gettext framework takes care of most of WordPress. However, there are a few places in the WordPress distribution where gettext cannot be used:
- The main WordPress README file -- it's a static HTML file, not a PHP file, so it cannot be run through the gettext functions.
- A few error messages are generated very early in the WordPress loading cycle, before gettext is loaded.
Additional info regarding when gettext doesn't work
Hopefully that answers your question, if not let us know and maybe someone else can help or I can do some more research.
Bisher habeicheinige Übersetzungenin Wordpressbearbeitet und versucht,die offiziellegettext-Dokumentation zu lesen,aberich verstehenichteine vielleichteinfache Sache: Was sind die Unterschiede zwischen diesen Starts wie __ (,_e (usw.)?"Undnochmehr: Welche anderengibt esnebenan? Vielen Dankim Voraus!
Frank