2010-03-11 45 views
60

leggere su Kohana templates e vide qualcosa che non ho mai visto prima:PHP: cosa fa __ ('Some text')?

$this->template->title = __('Welcome To Acme Widgets'); 

Cosa __('Text') significa? Che cos'è? Che cosa fa?

+1

Strano ... Ho scaricato Kohana e non riesco a trovare alcun riferimento a tale funzione nel codice sorgente. –

+0

@Alvaro Forse hai scaricato la versione 2.x. Prova e trova la versione 3. – alex

risposta

38

In Kohana (versione 3) la funzione è definita in system/base.php ed è una funzione di comodo per aiutare (come le altre risposte hanno menzionato) l'internazionalizzazione. Fornisci una stringa (con, facoltativamente, alcuni segnaposti per sostituire i valori nel testo finito) che viene poi interpretata e, se necessario, viene restituita una traduzione.

Contrariamente alle ipotesi in altre risposte, questo non utilizza gettext.

Un esempio molto semplice sarebbe (questa particolare stringa è già tradotto in inglese, spagnolo e francese in Kohana):

// 1. In your bootstrap.php somewhere below the Kohana::init line 
I18n::lang('fr'); 

// 2. In a view 
echo __("Hello, world!"); // Bonjour, monde! 
+1

A partire da 3.2, è passato alla classe [Kohana_I18n] (https://github.com/ kohana/core/blob/3.2/master/classes/kohana/i18n.php) – timborden

+4

Anche in CakePHP. – givanse

5

significa che qualcuno ha creato una funzione denominata __ (Ecco due sottolineature uno accanto all'altro.)

La mia ipotesi è definita da qualche parte nella documentazione Kohana.

+6

Ha chiesto cosa significa. Ciò implica per me che non sa che è chiamata di funzione. YMMV. – jmucchiello

+1

@Adriano Non sono d'accordo, la domanda almeno sembra supporre che sia qualcosa * altro * di una funzione. Proprio come $ in jQuery, questo è un nome di funzione strano che può essere confuso come qualcos'altro. –

+2

+1, non del tutto inutile e concordo con Tim Lytle. Sarei solo arrabbiato se questo fosse accettato rispetto alle altre * migliori * risposte. – alex

6

E 'string gettext (string $message): http://php.net/manual/en/function.gettext.php

Restituisce una stringa tradotta se uno è trovato nella tabella di traduzione, oppure il messaggio inviato se non viene trovato.

Il __() è solo un alias per esso. Così __("some text") è equivalente a gettext("some text")

edit: In realtà se si tratta di due sottolineature di quanto non è gettext(). L'alias per gettext() è un trattino di sottolineatura.

Seconda modifica: Sembra che __() potrebbe essere un altro alias per gettext(). Con un significato leggermente diverso da _(). Vedi qui: http://groups.google.com/group/cake-php/browse_thread/thread/9f501e31a4d4130d?pli=1

Terza e ultima modifica: Ecco un articolo che lo spiega in modo più dettagliato. Sembra che non sia una funzione incorporata, ma piuttosto qualcosa che viene comunemente aggiunto in molti framework. È essenzialmente un alias di gettext - esegue la stessa funzione. Tuttavia, non è un alias diretto (non credo). È implementato in e è specifico per il framework. Cerca e restituisce una localizzazione o traduzione della stringa che viene fornita. Per di più, si veda questo post del blog: http://www.eatmybusiness.com/food/2007/04/13/what-on-earth-does-a-double-underscore-then-parenthesis-mean-in-php-__/7/

+1

Non è solo * uno * '_', non due? –

+0

Non lo sapevo. Ma la domanda si interroga sulla funzione "due underscore". – jmucchiello

+0

@ T.J. Crowder Sì, la mia prima ricerca ha rivelato quell'articolo e non ho notato che era solo uno e non due. Tuttavia, in una seconda ricerca sembra che sia praticamente la stessa cosa. Appena implementato specifico per il framework. –