2012-05-29 23 views
12

Tratar de entender la aplicación L10N en Django, aquí están mis ajustesformato de fecha del sistema no recoger Django local

LANGUAGE_CODE = 'fr-FR' 
USE_L10N = True 

Si intento

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

me dará 'Wed May 30 15:30:00 2012' que es la ES configuración regional. Sin embargo, el doc está diciendo:

[...] Dos usuarios que acceden al mismo contenido, pero en un lenguaje diferente, verá los campos de fecha y número con formato de diferentes maneras, dependiendo del formato para su localización actual [. ..]

¿Están hablando de la configuración regional para sus respectivos navegadores?
En caso negativo, ¿cómo puedo configurarlo en francés de forma predeterminada, por ejemplo?

Respuesta

21

localización de Django funciona en el contexto de plantillas y formularios de Django, y no puede viajar hasta la cadena de representaciones de fecha y hora internas de 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. 

Así que si usted tiene USE_L10N = True y un usuario con la región FR entra 10,45 en un formulario, que se interpretará en el sentido de 10.45 en el sistema decimal en inglés. De forma similar, el resultado de una etiqueta de plantilla como {{ value|date:"SHORT_DATE_FORMAT" }} variará en función de la configuración regional del usuario.

Sin embargo, el interno de Python strftime('%c') no accede a la configuración de Django, sino que se refiere a la configuración regional en la máquina en la que está instalado. Puede recuperar y cambiar los puntos de la configuración regional de Python 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 estableciendo la variable de entorno $LANG.

+0

Gracias por esta respuesta detallada. Me olvidé de darme cuenta de que 'datetime' obviamente no tiene nada que ver con Django :) Ahora, si necesito enviar una lista de fechas formateadas por JSON, ¿cuál sería la mejor forma de formatearla dependiendo de la configuración regional de los usuarios? –

+0

Supongo que requeriría realmente ensamblar el JSON después de conocer la configuración regional del usuario. ¿Prueba esto? https://docs.djangoproject.com/en/1.3/howto/i18n/ – Karmel

+0

Nueva pregunta formulada [aquí] (http://stackoverflow.com/questions/10802680/django-accessing-request-meta-data-from- producción) –

Cuestiones relacionadas