Qual è il punto sulla sintassi di gettext?
-
-
Grazie atuttiper le vostre risposteelaborate!Lo apprezzo davvero qui!Thank all of you for your elaborate answers! I really appreciate this here!
- 0
- 2012-07-09
- Circuit Circus
-
... Forse un'ulteriore domanda a questa: sipuòtralasciare l'inserimento del dominio ditesto?Hoiniziato aportarloin posizione verticale su ogni stringa che volevotradurremapoi ho riconosciuto alcuniesempinel codice Wordpress chenon lo contengono affatto ......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,ora l'hotrovatoin questapagina del codice - scusaper questa domanda ridondante :-)... Okay, now I came across it in this codex page - sorry for this redundant question :-)
- 0
- 2012-07-09
- Circuit Circus
-
3 risposta
- voti
-
- 2012-07-07
__
(doppiotrattinobasso) è lafunzione ditraduzione dibase. Traduce una stringae la restituisce come stringa._e
ha la stessafunzione di__
,maecho èil risultatoimmediatamente._x
è lafunzione ditraduzione contestuale. Ha una seconda opzioneperfornire contesto allepersone chefanno latraduzione._ex
è uguale a_x
,mail risultato èecho.Esempio di utilizzo di
_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' );
A volte la stessa stringapuòessere diversain altre lingue. Fornire contesto aitraduttoripuò aiutarli a scegliere leparolegiuste.
Funzioni di scelta rapida:
-
esc_attr__
:equivalente a__
maesegue ancheil risultatotramiteesc_attr
. -
esc_html__
:equivalente a__
maesegue ancheil risultatotramiteesc_html
. -
esc_attr_e
:equivalente a_e
maesegue ancheil risultatotramiteesc_attr
. -
esc_html_e
:equivalente a_e
maesegue ancheil risultatotramiteesc_html
. -
esc_attr_x
:equivalente a_x
maesegue ancheil risultatotramiteesc_attr
. -
esc_html_x
:equivalente a_x
maesegue ancheil risultatotramiteesc_html
.
_n
èilgestore dellapluralizzazione. Esempio:$string = sprintf( _n( 'You have %d taco.', 'You have %d tacos.', $number, 'plugin-domain'), $number );
In questoesempio,ci sono duemodiper direilnumero ditacos,a seconda che sia singolare omeno. Ilprimo utilizzo di $numeroindica allafunzione
_n
quale versione utilizzare. Il secondo utilizzo di $numero avvienenello sprintf,per sostituire% d conilnumeroeffettivonella stringa.Nonesiste unafunzioneechoequivalenteper
_n
,maesiste unafunzione denominata_nx
. È una combinazione di_n
e_x
. Pluralizzazionee contesto._n_noop
è speciale. Viene utilizzatopertradurre stringhepluralizzate,manonpereseguire latraduzioneimmediatamente. Ciò è utile se si desidera centralizzare le stringhemain realtà siesegueil lavoro altrove. Lafunzione cheeffettivamentefail lavoro altrove ètranslate_nooped_plural
.Esempio:
$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain'); // ... later ... $string = sprintf( translate_nooped_plural( $holder, $count ), $count );
Non èmolto utilizzato,mapuòessere utileper l'organizzazione. Semetti tutte letue stringhein unfile,adesempio,e poi lefai riferimento altrove,questonon sarebbepossibile solo con
_n
,haibisogno di qualcosa come_n_noop
perfarlo ._nx_noop
è uguale a_n_noop
,mapuò ancheprendere un contestoperi traduttori,come_x
.Nota chepuoiinserireil dominionella chiamata allafunzionenoop onella chiamata allafunzionetranslate_nooped_plural. Qualunque siapiù sensatoper latua organizzazione. Seentrambi hanno un dominio,vince quellopassato alla chiamatanoop.
number_format_i18n
è l'equivalente del number_format integratoin PHP,ma aggiungenellagestione di cose comei decimalie così via,che sono diversiin altre lingue.date_i18n
è l'equivalente della data incorporatain PHP,contutta lagestionepertinente anche lì. Nomi deimesi,nomi deigiorni,ecc.Inoltre,noninfrangeremai le leggi . Solo unpromemoria. :)
__
(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,questa è davvero unabuona spiegazione!Graziemilleper l'aiuto!Adesso ci vedobene.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 ()e _x (),_ex ()
__()
e_e()
sonoessenzialmenteentrambi un wrapper ditranslate()
(non usare direttamente)e quasi lo stesso.La differenza stanelfatto che
__()
restituisce latraduzione stringe_e()
lofaeco. Entrambi devono ricevere una stringa comeparametro obbligatorioe di solito,sebbene opzionale,anche un dominio ditesto.Analogamente,ci sono
_x()
e_ex()
,cheti consente di specificare un contestoin grado di descrivere dove appare la stringa. Seiltuoprogettoincludepiù dipoche decine di stringhetraducibili,l'uso del contesto hamolto senso.Inoltre,nota l'esistenza di
_n()
e < a href="http://codex.wordpress.org/Function_Reference/_nx" rel="nofollow">_nx()
peri plurali.Esempio di utilizzo comune
$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;
Parametri
__( $text, $domain ) _e( $text, $domain ) _x( $text, $context, $domain ) _ex( $text, $context, $domain ) _n( $single, $plural, $number $domain ) _nx( $single, $plural, $number, $context, $domain )
Tuttii parametritranne
$number
sono stringhe. Tuttitranne$domain
sono obbligatori.Ulterioreflessibilità con le variabilie sprintf ()
Se letue stringhe conterrannonumeri oparole variabili,utilizza
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;
Risorse aggiuntive
Alcune risorse aggiuntiveperilprossimo 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:
-
Controlla anche ["Localizzazione"in "Varie"nel codice] (http://codex.wordpress.org/Function_Reference/#Miscellaneous_Functions)per un'analisi completa dellefunzionie spiegazioni dettagliate.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
-
& questo èil luogo [dovei wp-polyglots siincontrano] (http://wppolyglots.wordpress.com/).& this is the place [where wp-polyglots meet](http://wppolyglots.wordpress.com/).
- 0
- 2012-07-07
- brasofilo
-
@Johannes Pille:non honotato latua rispostafino a quandonon hopubblicato lamia,dovrei cancellareilmiopost?@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 No,perché?Ulterioriinformazioninonpossonoessere unabrutta cosa,vero?!Penso che latua risposta siaben ponderata.+1 dame.@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 Modificatoin "risorse aggiuntive".@TheDeadMedic Edited into "additional resources".
- 0
- 2012-07-07
- Johannes Pille
-
- 2012-07-07
Non sono unesperto ditraduzioni,ma lapagina del codice di WordPress ha unabuona documentazionee spiegailmotivoper utilizzare ogniistanza.
Dallepagine del codice:
__()
Viene utilizzato quandoilmessaggio vienepassato come argomento a un'altrafunzione;
_e()
viene utilizzatoper scrivereilmessaggio direttamente sullapagina. Maggiori dettagli su queste duefunzioni:__('message')
Cercanelmodulo di localizzazione latraduzione di "messaggio"e passa latraduzione all'istruzione return di PHP. Senon vienetrovata alcunatraduzioneper "messaggio",restituisce solo "messaggio".
_e('message')
Cercanelmodulo di localizzazione latraduzione di "messaggio"e passa latraduzione all'istruzioneecho di PHP. Senon vienetrovata alcunatraduzioneper "messaggio",viene visualizzato semplicemente "messaggio".
Tienipresente che se staiinternazionalizzando untema o unplug-in,dovresti utilizzare un
"Text Domain"
.Ilframeworkgettext siprende cura dellamaggiorparte di WordPress. Tuttavia,ci sono alcunipuntinella distribuzione di WordPressin cuigettextnonpuòessere utilizzato:
- Ilfile READMEprincipale di WordPress: è unfile HTML statico,non unfile PHP,quindinonpuòessereeseguitotramite lefunzionigettext.
- Alcunimessaggi dierrore vengonogeneratimoltoprestonel ciclo di caricamento di WordPress,prima chegettext venga caricato.
Collegamento allapagina del Codex
Ulterioriinformazioni su quandogettextnonfunziona
Spero che questo risponda allatua domanda,altrimentifaccelo saperee forse qualcun altropuò aiutarti opossofare qualche ricercain più.
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.
Finora hogestito alcunetraduzioniin Wordpresse hoprovato a leggere la documentazione ufficiale digettextmanon ho capitoilpunto di una cosaforse semplice: quali sono le differenzetra quegliinizi come __ (,_e (,ecc.? E ancora dipiù: quali altri ci sono accanto? Graziein anticipo!
Frank