内置模板标签似乎打破了i18n

时间:2012-08-30 11:36:04

标签: python django localization django-templates django-1.4

就在我认为我已经完成了国际化和时区的时候,我终于可以继续使用更有趣的功能了,最后一次我被咬了。 :)

在我的模板中,只要我有以下内容,模板会自动将日期时间从UTC转换为我当前选择的时区。我也可以切换到不同的文化(美国到英国格式),日期和时间格式也会相应改变。简单完美。

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime }}</td>
     <td>{{ item.conversation_datetime }}</td>
{% endfor %}

现在我需要做的就是提取前者的本地化日期和后者的本地化时间。所以我想在那里打一个模板标签,生活很美好。

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date }}</td>
     <td>{{ item.conversation_datetime|time }}</td>
{% endfor %}

但如果生活很美好,我不会坐在这里写下这个吗? ;) 设置这些过滤器的那一刻,这两个字段的格式似乎固定在美国文化上。日期格式为mm / dd / yyyy,时间为上午12点/下午。

在成功之前选择英国语言不再有任何影响。

事实上,我已覆盖enen-gb的formats.py,并且可以确认en / format.py的条目TIME_FORMAT = 'P'对应于12小时/时。

虽然en_GB / formats.py的TIME_FORMAT = 'G:i'对应24小时。 您是否认为在我忽略的模板中使用过滤器标签还有其他一点?

1 个答案:

答案 0 :(得分:1)

编辑:第二种方法是解决方案。另见下面的评论。

您观察到的行为确实在文档中提到过(请参阅date filter):

  

在没有格式字符串的情况下使用时:{{ value|date }}将使用DATE_FORMAT设置中定义的格式字符串,而不应用任何本地化

time过滤器也提到了相同的内容。从我在文档中看到的内容,您可以使用localize过滤器强制进行本地化:

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date|localize }}</td>
     <td>{{ item.conversation_datetime|time|localize }}</td>
{% endfor %}

或者,您可以传递您希望使用的设置(解决方案):

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date:"DATE_FORMAT" }}</td>
     <td>{{ item.conversation_datetime|time:"TIME_FORMAT" }}</td>
{% endfor %}

文档说明了这一点:

  

传递的格式可以是预定义格式之一DATE_FORMATDATETIME_FORMATSHORT_DATE_FORMATSHORT_DATETIME_FORMAT,也可以是使用表格中显示的格式说明符的自定义格式以上。 请注意,预定义格式可能会因当前区域设置而异。