Qual é o ponto na sintaxe do GetText?
-
-
Obrigado atodos vocêspor suas respostaselaboradas!Eu realmente aprecioisso aqui!Thank all of you for your elaborate answers! I really appreciate this here!
- 0
- 2012-07-09
- Circuit Circus
-
... Talvez uma outraperguntaparaisso: aentrada do domínio detexto seja deixada defora?Eu voltando começou atrazerparatodas as cordas queeu queriatraduzir,mas reconheceu algunsexemplosno WordPress Codex quenão continham ......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,agorame depareinestapágina de códice - Desculpeporestapergunta redundante :-)... Okay, now I came across it in this codex page - sorry for this redundant question :-)
- 0
- 2012-07-09
- Circuit Circus
-
3 respostas
- votos
-
- 2012-07-07
__
(Double Underscore) é afunção detradução debase. Eletraduz uma stringe retorna como uma string._e
faz omesmo que__
,mas oeco é o resultadoimediatamente._x
é afunção detradução contextual. Tem uma segunda opçãoparafornecer contexto àspessoasfazendo atradução._ex
é omesmo que_x
,mas oeco é o resultado.Exemplo de uso
_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' );
Às vezes amesma stringpode ser diferenteem outrosidiomas. Fornecer contexto aostradutorespode ajudá-los aescolher aspalavras certas.
Funções de atalho:
-
esc_attr__
:equivalente a__
mastambémexecuta o resultado atravésesc_attr
. -
esc_html__
:equivalente a__
,mastambémexecuta o resultado atravésesc_html
. -
esc_attr_e
:equivalente a_e
,mastambémexecuta o resultado através deesc_attr
. -
esc_html_e
:equivalente a_e
masexecuta o resultado atravésesc_html
. -
esc_attr_x
:equivalente a_x
,mastambémexecuta o resultado atravésesc_attr
. -
esc_html_x
:equivalente a_x
,mastambémexecuta o resultado atravésesc_html
.
_n
é omanipulador depluralização. Exemplo:$string = sprintf( _n( 'You have %d taco.', 'You have %d tacos.', $number, 'plugin-domain'), $number );
Nesseexemplo,há duasmaneiras de dizer onúmero detacos,dependendo se é singular ounão. Oprimeiro uso donúmero $informa ao
_n
que a versão usa. O segundo uso do $número aconteceno SPRINTF,para substituir o% Dpelonúmero realna string.Não háfunção ECHOequivalentepara
_n
,mas há umafunção chamada_nx
. É uma combinação de_n
e_x
. Pluralizaçãoe contexto._n_noop
é umespecial. É usadoparatraduzir cadeiaspluralizadas,masnão realizando atraduçãoimediatamente. Isso é útil se você quiserfazer as cordas centralizadas,mas realmente otrabalhoem outro lugar. Afunção que realmentefaz otrabalhoem outro lugar étranslate_nooped_plural
.Exemplo:
$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain'); // ... later ... $string = sprintf( translate_nooped_plural( $holder, $count ), $count );
Issonão é usadomuito,maspode ser útilpara organização. Se você colocartodas as suas stringsem um arquivo,porexemplo,referência-losem outro lugar,issonão seriapossível com apenas
_n
,vocêprecisa de algo como_n_noop
parafazerisso ._nx_noop
é omesmo que_n_noop
,mastambémpode assumir um contextopara ostradutores,omesmo que_x
.Observe que vocêpode colocar o domíniopara a chamada defunçãonoop ouna chamada defunçãotranslate_nooped_plural. O quefazmais sentidopara sua organização. Se ambostiverem um domínio,o que umpassoupara as vitórias da chamadanoop.
number_format_i18n
é oequivalente aophp'sbuilt-in number_format ,mas acrescentanomanuseiopara coisas como decimaise assimpor diante,que são diferentesem outras localidades.date_i18n
é oequivalente aophp'sbuilt-in Data ,comtodo omanuseiopertinentetambém. Nomes demeses,nomes de dia,etc.Além disso,nunca quebre as leis . Apenas um lembrete. :)
__
(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. :)
-
Uau,esta é realmente umaboaexplicação disso!Muito obrigadopor ajudar!Agoraeu vejo claro.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()
sãoessencialmentetanto uminvólucro detranslate()
(não use diretamente)e quase omesmo.A diferençaestáem que
__()
retorna o Traduzido stringe_e()
Echoa. Ambosprecisam ser alimentados com uma string comoparâmetroexigidoe geralmente,embora opcional,também um TextDomain.Analogamente,há
_x()
e_ex()
,quepermiteespecificar um contexto quepode descrever onde a string éexibida. Se o seuprojetoincluimais do que algumas dezenas de seqüênciastraduzíveis,o uso do contextofazmuito sentido.também,observe aexistência de
_n()
e < um href="http://codex.wordpress.org/function_reference/_nx" rel="nofollow">_nx()
paraplurais.Exemplo de uso comum
$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;
parâmetros
__( $text, $domain ) _e( $text, $domain ) _x( $text, $context, $domain ) _ex( $text, $context, $domain ) _n( $single, $plural, $number $domain ) _nx( $single, $plural, $number, $context, $domain )
Todos osparâmetros,mas
$number
são strings. Todos,mas$domain
sãonecessários.Flexibilidade adicional com variáveis e sprintf ()
Se suas strings conteremnúmeros oupalavras variáveis,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;
Recursos adicionais
Alguns recursos adicionaispara opróximo 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:
-
Verifiquetambém ["localização"em "Diversos"no Codex] (http://codex.wordpresspress.org/function_reference/#miscellaneous_functions)para uma decomposição completa dasfunçõese explicações detalhadas.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
-
& Este é o lugar [onde WP-Polyglots se reúnem] (http://wppolyglots.wordpress.com/).& this is the place [where wp-polyglots meet](http://wppolyglots.wordpress.com/).
- 0
- 2012-07-07
- brasofilo
-
@Johannes Pille: Eunãonotei sua resposta até queeupostei omeu,devoexcluirmeupost?@Johannes Pille: I didn't notice your answer until I'd posted mine, should I delete my post?
- 0
- 2012-07-07
- Jeremy Jared
-
@Jeremyjarednão,por quê?Maisinformaçõesnãopodem ser uma coisa ruim,pode?!Eu acho que sua resposta ébem pensada.+1 demim.@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
-
@Thedeadmediceditadoem "Recursos Adicionais".@TheDeadMedic Edited into "additional resources".
- 0
- 2012-07-07
- Johannes Pille
-
- 2012-07-07
Eunão sou umespecialistaem traduções,mas apágina do WordPress Codextem boa documentaçãoe explica omotivopara usar cadainstância.
daspáginas do Codex:
__()
é usado quando amensagem épassada como um argumentopara outrafunção;
_e()
é usadoparagravar amensagem diretamentepara apágina. Mais detalhes sobreestas duasfunções:__('message')
Pesquisa omódulo de localizaçãopara atradução de 'mensagem'e passa atraduçãopara a declaração de retorno PHP. Senenhumatraduçãoforencontradapara 'mensagem',basta retornar "mensagem".
_e('message')
Pesquisa omódulo de localizaçãopara atradução de 'mensagem'e passa atraduçãopara ainstrução PHP ECHO. Senenhumatraduçãoforencontradapara 'mensagem',apenasecoamensagem '.
Observe que se vocêestiverinternacionalizando umtema ouplugin,você deve usar um
"Text Domain"
.Aestrutura do GetText cuida damaiorparte do WordPress. Noentanto,existem alguns lugaresna distribuição WordPress onde o GetTextnãopode ser usado:
- O arquivoprincipal do WordPress Readme - é um arquivo HTMLestático,não um arquivo PHP,portanto,elenãopode serexecutado através dasfunções GetText.
- Algumasmensagens deerro sãogeradasmuito cedono ciclo de carregamento do WordPress antes dogettextfor carregado.
Informações adicionais sobre quando o GetTextnãofunciona
Espero que responda a suapergunta,senãonos avisee talvez alguémpossa ajudar oupossofazermais algumaspesquisas.
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.
Até agoraeutenhomanuseio algumastraduçõesno WordPresse tentei ler a documentação oficial do GetText,masnão obterei oponto de uma coisa simples: Quais são as diferençasentreessasiniciações como __ (,_E (,etc.E aindamais: quais outrosestão lá ao lado? Agradecemos antecipadamente!
Frank