2016-06-25 56 views
6

Quando si utilizza il meccanismo di localizzazione djangos (o meglio di gettext), è difficile ottenere i nomi dei giorni della locale corrente. Di solito, userei calendar:Come ottenere nomi giornalieri localizzati in django?

calendar.day_name[current_day] 

Dove current_day è un int compreso tra 0 e 6. Questo non funziona, come Django non sembra per impostare correttamente le impostazioni internazionali richiesto. Stessa situazione per i nomi dei mesi.

Quindi, come localizzare correttamente i nomi dei calendari?

risposta

5

È possibile utilizzare django.utils.formats.date_format.

>>> from django.utils.formats import date_format 
>>> from django.utils import translation 
>>> from datetime import date 
>>> date_format(date.today(), 'l') 
'Saturday' 
>>> translation.activate('fr') 
>>> date_format(date.today(), 'l') 
'samedi' 

translation.activate è inutile nel contesto di una richiesta in cui traduzione è già attivata. L'ho usato qui per esempio scopo.

Se non si dispone di una data specifica e necessario il nome di un giorno della settimana, basta usare ugettext di tradurlo:

>>> import calendar 
>>> from django.utils import translation 
>>> from django.utils.translation import ugettext as _ 
>>> translation.activate('fr') 
>>> _(calendar.day_name[0]) 
'lundi'