Sto lavorando con Django 1.5.1 e sto sperimentando un "comportamento strano" con le traduzioni. Sto usando ugettext
e ugettext_lazy
nello stesso file Python. Se organizzo le importazioni come:funzioni ugettext e ugettext_lazy non riconosciute dai makemessages in Python Django
from django.utils.translation import ugettext as trans
from django.utils.translation import ugettext_lazy as _
o
from django.utils.translation import ugettext as trans, ugettext_lazy as _
Le corde contrassegnate come trans("string")
vengono saltati durante l'esecuzione makemessages
comando.
Tuttavia, se non rinominare il ugettext
funziona bene con entrambe le versioni:
from django.utils.translation import ugettext
from django.utils.translation import ugettext_lazy as _
o
from django.utils.translation import ugettext, ugettext_lazy as _
Ora trans("string")
funziona bene.
Quindi, qualcuno sa perché questa rinomina dell'importazione sta causando la chiamata della funzione rinominata? Si tratta di una vera e propria "limitazione" Python che non conoscevo quando si rinominava più di una funzione all'interno dello stesso modulo?
UPDATE
Dopo alcune prove, mi sono reso conto che anche la creazione di un modulo python vuoto all'interno di un app con il seguente codice non funziona:
from django.utils.translation import ugettext_lazy as translate
a = translate("string")
Tuttavia , se si utilizza _
per l'alias funziona:
from django.utils.translation import ugettext_lazy as _
a = _("string")
mio conclusione è: È possibile utilizzare solo l'alias _
per ugettext
e ugettext_lazy
(o qualsiasi altra funzione di traduzione correlato) in Django altrimenti non sarà riconosciuto dal makemessages
comando. La spiegazione tecnica può essere trovata nella risposta di Robert Lujo.
Grazie!
si può "rinomina", come molti simboli (funzione o altro) come si desidera, Python i nomi sono solo alias e entrambe le forme di importazione (una riga o due righe) sono equivalenti, quindi il problema è altrove. FWIW Sospetto fortemente che tu ricolleghi il nome "trans" a qualcos'altro dopo l'importazione ... –
Ciao! Non sto eseguendo l'override di 'trans' nel modulo (ho fatto una ricerca con Eclipse). Potrebbe essere possibile a causa della "_" ridenominazione? – Caumons
'_' è un nome Python valido e non ha poteri magici. wrt/rinominare, 'da x import y as z' è l'equivalente esatto di' from x import y; z = y; così da qui non succede nulla di magico. wrt/la tua affermazione che "non stai sovrascrivendo' trans' ", una semplice ricerca di testo potrebbe non essere sufficiente. Un pattern (anti) molto comune è override di importazione delle stelle, cioè 'da x import y; da z import * ', dove capita che' z' esporti anche un simbolo 'y'.Inoltre, se non hai familiarità con Python, le funzioni di Python _don't_ vivono in uno spazio dei nomi isolato, sono variabili ordinarie. –