Domanda

In Mercurial, molte delle estensioni di avvolgere il loro stringa di aiuto / sintassi in una chiamata a una funzione di sottolineatura, in questo modo:

 _('[OPTION] [QUEUE]')

Questo mi confonde, perché non sembra necessario (istruzioni le scrittura delle estensioni non parlare di esso) e non sembra essere un _ definita nella classe, quindi mi chiedo se questo è un po 'di sintassi speciale che non capisco, forse un altro modo per dire lambda, o forse l'identità funzione? Inoltre mi chiedo che cosa il beneficio di questa metodologia (qualunque esso sia) è finita solo la stringa cruda come la documentazione suggerisce.

Niente che ho visto nella documentazione Python menzioni tale funzione una, quindi non sono sicuro se questo è davvero una questione di Python, o una domanda Mercurial.

Ecco due esempi che utilizzano questa struttura (sguardo al dizionario cmdtable vicino alla parte inferiore del file)

È stato utile?

Soluzione

Guarda on line 45:

from mercurial.i18n import _

Questo è l'abbreviazione usuale nel pacchetto internazionalizzazione gettext , ed eventualmente altri pacchetti troppo , per la funzione che restituisce una traduzione del suo argomento alla lingua il programma è attualmente in esecuzione. E 'abbreviato in _ per comodità, dal momento che è utilizzato per quasi ogni messaggio visualizzati all'utente.

appare come Mercurial lo avvolge nel proprio modulo. ( "I18n" sta per "internazionalizzazione", perché ci sono 18 lettere in tra "i" e "n").

Altri suggerimenti

_ (un nome di funzione di un singolo trattino) è spesso associata a internazionalizzazione, dovuta al precedente della gettext, un approccio GNU che ha trovato posto nella libreria standard di Python (stessa architettura completamente diversa implementazione) - per docs del modulo ,

gettext.install(domain[, localedir[, unicode[, codeset[, names]]]])
  

Questo consente di installare la funzione _() in   Python builtins spazio dei nomi, sulla base di   dominio, localedir, e codeset che   vengono passati alla funzione   traduzione(). La bandiera è unicode   passata alla traduzione risultante   dell'oggetto installano () metodo.

     

Per il parametro nomi, vedere   la descrizione della traduzione   dell'oggetto installano () metodo.

     

Come si è visto al di sotto, di solito contrassegnare la   stringhe nell'applicazione che sono   i candidati per la traduzione, per   avvolgendoli in una chiamata al _()   la funzione, in questo modo:

print _('This string will be translated.') 
  

Per comodità, è   desidera che la funzione _() da installare   in builtins spazio dei nomi di Python, in modo da   è facilmente accessibile in tutti i moduli di   l'applicazione.

Come @ptomato menzioni, Mercurial ha seguito questa tradizione nominando _ la funzione equivalente della propria che usano per le finalità stessa di internazionalizzazione.

C'è anche una tradizione separato per uso _ come il "non mi interessa" identificativo, come in

fee, fie, _, _, foo, _, fum = thesevenitemstuple

, ma, naturalmente, è meglio non utilizzare entrambe le tradizioni in una sola volta nello stesso codice; -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top