Quel est l'intérêt de la syntaxe gettext?
-
-
Merci àtouspour vos réponses élaborées!J'apprécie vraiment çaici!Thank all of you for your elaborate answers! I really appreciate this here!
- 0
- 2012-07-09
- Circuit Circus
-
... Peut-être une autre question à ceci:peut-on omettre l'entrée du domaine detexte?J'ai commencé à l'amener à chaque chaîne queje voulaistraduire,maisj'aiensuite reconnu quelquesexemples dans le codex Wordpress quine le contiennentpas dutout ......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
-
... OK,maintenantje l'ai rencontré dans cettepage de codex - désolépour cette question redondante :-)... Okay, now I came across it in this codex page - sorry for this redundant question :-)
- 0
- 2012-07-09
- Circuit Circus
-
3 réponses
- votes
-
- 2012-07-07
__
(doubletiretbas)est lafonction detraduction debase. Iltraduit une chaîneet la renvoie sousforme de chaîne._e
fait lamême chose que__
,maisfaitimmédiatement écho au résultat._x
est lafonction detraduction contextuelle. Il a une deuxième optionpourfournir un contexte auxpersonneseffectuant latraduction._ex
estidentique à_x
,maisfait écho au résultat.Exemple d'utilisation de
_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' );
Parfois,lamême chaînepeut être différente dans d'autres langues. Fournir un contexte auxtraducteurspeut les aider à choisir lesbonsmots.
Fonctions de raccourci:
-
esc_attr__
: équivalent à__
maisexécute également le résultat viaesc_attr
. -
esc_html__
: équivalent à__
maisexécute également le résultat viaesc_html
. -
esc_attr_e
: équivalent à_e
maisexécute également le résultat viaesc_attr
. -
esc_html_e
: équivalent à_e
maisexécute également le résultat viaesc_html
. -
esc_attr_x
: équivalent à_x
maisexécute également le résultat viaesc_attr
. -
esc_html_x
: équivalent à_x
maisexécute également le résultat viaesc_html
.
_n
est legestionnaire depluralisation. Exemple:$string = sprintf( _n( 'You have %d taco.', 'You have %d tacos.', $number, 'plugin-domain'), $number );
Dans cetexemple,il y a deuxfaçons de dire lenombre detacos,selon qu'ilest singulier ounon. Lapremière utilisation de $numberindique à lafonction
_n
la version à utiliser. La deuxième utilisation de $number seproduit dans le sprintf,pour remplacer le% dpar lenombre réel dans la chaîne.Iln'y apas d'équivalent defonction d'échopour
_n
,maisilexiste unefonctionnommée_nx
. C'est une combinaison de_n
et_x
. Pluralisationet contexte._n_noop
est spécial. Ilest utilisépourtraduire des chaînes aupluriel,maispaspoureffectuer latraductionimmédiatement. Ceciest utile si vous souhaitez centraliser les chaînesmaisen faitfaire letravail ailleurs. Lafonction quifait réellement letravail ailleursesttranslate_nooped_plural
.Exemple:
$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain'); // ... later ... $string = sprintf( translate_nooped_plural( $holder, $count ), $count );
Cen'estpasbeaucoup utilisé,mais celapeut êtrepratiquepour l'organisation. Si vousmetteztoutes vos chaînes dans unfichier,parexemple,puis que vous les référencez ailleurs,celane seraitpaspossible avec seulement
_n
,vous avezbesoin de quelque chose comme_n_noop
pour lefaire ._nx_noop
estidentique à_n_noop
,maispeut égalementprendre un contextepour lestraducteurs,identique à_x
.Notez que vouspouvezplacer le domaine soit dans l'appel defonctionnoop,soit dans l'appel defonctiontranslate_nooped_plural. Selon ce qui a leplus de senspour votre organisation. Si les deux ont un domaine,celuipassé à l'appelnoop l'emporte.
number_format_i18n
est l'équivalent du number_format intégré à PHP,mais cela ajoute à lagestion de choses comme les décimales,etc.,qui sont différentes dans d'autresparamètres régionaux.date_i18n
est l'équivalent de la date intégrée à PHP,avectoute lamanipulationpertinente là aussi. Noms demois,noms dejours,etc.Deplus,n'enfreignezjamais les lois . Juste un rappel. :)
__
(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,c'est vraiment unebonneexplication!Mercibeaucouppour votre aide!Maintenantje vois clair.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 ()et _x (),_ex ()
__()
et_e()
sontessentiellement à lafois un wrapper detranslate()
(nepas utiliser directement)et presque lamême chose.La différence réside dans lefait que
__()
renvoie le stringet_e()
en fait écho. Les deux doivent recevoir une chaîneen tant queparamètre obligatoireet généralement,bien quefacultatif,également un domaine detexte.Demanière analogue,ilexiste
_x()
et_ex()
,qui vouspermet de spécifier un contexte quipeut décrire où la chaîne apparaît. Si votreprojet comprendplus de quelques dizaines de chaînestraduisibles,l'utilisation du contexte abeaucoup de sens.Notez également l'existence de
_n()
et < a href="http://codex.wordpress.org/Function_Reference/_nx" rel="nofollow">_nx()
pour lespluriels.Exemple d'utilisation courante
$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;
Paramètres
__( $text, $domain ) _e( $text, $domain ) _x( $text, $context, $domain ) _ex( $text, $context, $domain ) _n( $single, $plural, $number $domain ) _nx( $single, $plural, $number, $context, $domain )
Tous lesparamètres sauf
$number
sont des chaînes. Tous sauf$domain
sont obligatoires.Flexibilité accrue avec les variableset sprintf ()
Si vos chaînes contiennent desnombres ou desmots variables,utilisez
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;
Ressources supplémentaires
Quelques ressources supplémentairespour leprochain WordPress I18n Ninja:
__(), _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:
-
Consultez également ["Localisation" sous "Divers" dans le codex] (http://codex.wordpress.org/Function_Reference/#Miscellaneous_Functions)pour une ventilation complète desfonctionset desexplications détaillées.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
-
& c'est le lieu [où les wp-polyglots se rencontrent] (http://wppolyglots.wordpress.com/).& this is the place [where wp-polyglots meet](http://wppolyglots.wordpress.com/).
- 0
- 2012-07-07
- brasofilo
-
@Johannes Pille: Jen'aipas remarqué votre réponse avant d'avoirpublié lamienne,dois-je supprimermonmessage?@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 Non,pourquoi?Plus d'informationsne peuventpas être unemauvaise chose,n'est-cepas?!Jepense que votre réponseestbien réfléchie.+1 demoi.@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 Modifié dans "ressources supplémentaires".@TheDeadMedic Edited into "additional resources".
- 0
- 2012-07-07
- Johannes Pille
-
- 2012-07-07
Jene suispas unexperten traductions,mais lapage WordPress Codex a unebonne documentationet explique la raison d'utiliser chaqueinstance.
Àpartir despages du codex:
__()
Est utilisé lorsque lemessageestpassé comme argument à une autrefonction;
_e()
est utilisépour écrire lemessage directement sur lapage. Plus de détails sur ces deuxfonctions:__('message')
Recherche dans lemodule de localisation latraduction de 'message'et transmet latraduction à l'instruction de retour PHP. Si aucunetraductionn'esttrouvéepour «message»,il renvoie simplement «message».
_e('message')
Recherche dans lemodule de localisation latraduction de 'message'et transmet latraduction à l'instruction d'écho PHP. Si aucunetraductionn'esttrouvéepour «message»,ilfait simplement écho à «message».
Notez que si vousinternationalisez unthème ou unplugin,vous devez utiliser un
"Text Domain"
.Leframeworkgettextprenden charge laplupart de WordPress. Cependant,il y a quelquesendroits dans la distribution WordPress oùgettextne peutpas être utilisé:
- Lefichierprincipal de WordPress README - c'est unfichier HTML statique,pas unfichier PHP,ilne peut doncpas êtreexécuté via lesfonctionsgettext.
- Quelquesmessages d'erreur sontgénéréstrèstôt dans le cycle de chargement de WordPress,avant le chargement degettext.
Informations supplémentaires concernant les cas oùgettextne fonctionnepas
J'espère que cela répond à votre question,sinonfaites-lenous savoiret peut-être que quelqu'un d'autrepourra vous aider ou queje pourraifaire des recherches supplémentaires.
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.
Jusqu'àprésent,j'aimanipulé destraductions dans Wordpresset essayé de lire la documentation officielle degettext,maisje ne comprendraipas une chosepeut-être simple: quelles sont les différencesentre ces débuts comme __ (,_e (,etc.? Etplusencore: quels sont les autres à côté? Merci d'avance!
Frank