2012-05-29 11 views
12

Cercando di capire implementazione L10N in Django, Qui sono le mie impostazionidata di sistema di formattazione non raccogliendo locale Django

LANGUAGE_CODE = 'fr-FR' 
USE_L10N = True 

Se provo

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M') 
     .strftime('%c') 

E mi darà 'Wed May 30 15:30:00 2012' che è il IT locale. Tuttavia il doc sta dicendo:

[...] Due utenti che accedono lo stesso contenuto, ma in lingua diversa, vedrà data e numero di campi formattati in modi diversi, a seconda del formato per la loro attuale locale [. ..]

Stanno parlando della locale impostata per il rispettivo browser?
In caso contrario, come posso impostarlo su francese per impostazione predefinita, ad esempio?

risposta

21

localizzazione di Django funziona nel contesto di modelli e forme Django, e non può viaggiare fino alla catena di rappresentazioni datetime interni di Python:

When using Django's formatting system, dates and numbers on templates 
will be displayed using the format specified for the current locale. 
...Django will also use localized formats when parsing data in forms. 

Quindi, se avete USE_L10N = True e un utente con la regione FR entra 10,45 in un modulo, che verrà interpretato nel significato di 10.45 nel sistema decimale inglese. Allo stesso modo, l'output di un tag modello come {{ value|date:"SHORT_DATE_FORMAT" }} varia in base alle impostazioni locali dell'utente.

Tuttavia, il Python interno strftime('%c') non accede alle impostazioni di Django e fa invece riferimento alla locale impostata sulla macchina su cui è installato. È possibile recuperare e modificare i punti impostazioni internazionali Python a con:

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c') 
'Wed May 30 15:30:00 2012' 
>>> import locale 
>>> locale.getlocale() 
(None, None) 
>>> locale.getdefaultlocale() 
('en_US', 'UTF-8') 
>>> locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") 
'fr_FR.UTF-8' 
>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c') 
'Mer 30 mai 15:30:00 2012' 

o impostando la variabile di ambiente $LANG.

+0

Grazie per questa risposta dettagliata. Ho dimenticato di notare che 'datetime' ovviamente non ha nulla a che fare con Django :) Ora, se ho bisogno di inviare un elenco di date formattate da JSON, quale sarebbe il modo migliore per formattarlo a seconda delle impostazioni locali dell'utente? –

+0

Immagino che ciò richieda effettivamente il montaggio del JSON dopo che si è a conoscenza delle impostazioni locali dell'utente. Prova questo? https://docs.djangoproject.com/en/1.3/howto/i18n/ – Karmel

+0

Nuova domanda [qui] (http://stackoverflow.com/questions/10802680/django-accessing-request-meta-data-from- produzione) –

Problemi correlati