Nella maggior parte dei casi, durante la stesura del codice le stringhe vengono tradotte nel punto in cui sono state codificate. Occasionalmente tuttavia, avrete bisogno di marcare le stringhe per la traduzione, ma rinviare la traduzione ad un momento successivo. Un classico esempio è:
animals = ['mollusk', 'albatross', 'rat', 'penguin', 'python', ] # ... for a in animals: print a
Qui, volete contrassegnare le stringhe nella lista animals
perché siano tradotte, ma non volete tradurle fino a che non vengano
stampate.
Ecco un modo per gestire questa situazione:
def _(message): return message animals = [_('mollusk'), _('albatross'), _('rat'), _('penguin'), _('python'), ] del _ # ... for a in animals: print _(a)
Questo funziona perché la definizione di prova di _() restituisce semplicemante la stringa immutata. Inoltre la definizione di prova sovrascriverà temporaneamente ogni definizione di _() nello spazio dei nomi built-in (fino al comando del). Fate attenzione e verificate di non avere una precedente definizione di _ nello spazio dei nomi locale.
Notate che il secondo uso di _() non identifica ``a'' come traducibile dal programma pygettext, perchè non è una stringa.
Un altro moetodo per gestire questa situazione è rappresentato dal seguente esempio:
def N_(message): return message animals = [N_('mollusk'), N_('albatross'), N_('rat'), N_('penguin'), N_('python'), ] # ... for a in animals: print _(a)
In questo caso, state contrassegnando come traducibili stringhe marcate con la funzione N_(),6.6 che non andrà in conflitto con alcuna definizione di _(). Tuttavia avrete bisogno di istruire il vostro programma a cercare le stringhe marcate con N_(). Sia pygettext che xpot supportano questa funzionalità attraverso l'uso di switch da riga di comando.