如何本地化人性化的时间格式

时间:2011-12-16 17:35:31

标签: python google-app-engine gettext jinja2 babel

我如何本地化以获得像

这样的文章的时间的人性化输出
  

今天

     

16时48

  

昨天

     

17:10

  

12月13日

     

11:20

from webapp2_extras.i18n import gettext as _
import datetime
from datetime import date, datetime, time
from babel.dates import format_date, format_datetime, format_time
from babel.numbers import format_number, format_decimal, format_percent

def datetimeformat_jinja(value, format='%H:%M / %d-%m-%Y', locale='en'):
    now= datetime.now()
    if datetime.date(value) == datetime.date(now):
      info= _('Today')
    elif (now - value).days < 2:
      info= _('Yesterday')
    else:
      info=format_datetime(value, "MMMM dd", locale=locale)
    return info+'<br>'+format_time(value, 'hh:mm', locale=locale)

使用上面的代码,我可以为实体显示人性化输出的时间进行过滤:

{{ entity.modified|datetimeformat_jinja(locale='pt_BR') }}

但是我如何本地化字符串“今天”和“昨天”以及如何从像Jan这样的babel而不是1月而不是2月获得abbrieviated表单当我知道哪个时候如何为这个项目添加时区?该实体在修改时所在的国家/地区?我有一个变量entity.url,告诉我自哪个域以来我的应用程序服务于多个域,所以它基本上只是时区,取决于entity.url(巴西时区和印度时区),我的基本本地化主要是针对巴西葡萄牙语和英语但它应该更有效,即它应该易于添加和语言并切换到一种语言。

感谢您对评论的任何回答

更新

它现在正确呈现,但我不能直接从django的时间拿它,因为我还不能让时区工作。但现在剩下的唯一部分是时区,我想:

def datetimeformat_jinja(value, format='%H:%M / %d-%m-%Y', locale='en'):
    now= datetime.now()
    info = None
    if datetime.date(value) == datetime.date(now):
      info= _('Today')
    elif (now - value).days < 2:
      info= _('Yesterday')
    else:
      month = value.month
      if month == 1:
        info = str(value.day)+' '+_('Jan.')
      elif month == 2:
        info = str(value.day)+' '+_('Feb.')
      elif month == 3:
        info = str(value.day)+' '+_('Mar.')
      elif month == 4:
        info = str(value.day)+' '+_('April')
      elif month == 5:
        info = str(value.day)+' '+_('May')
      elif month == 6:
        info = str(value.day)+' '+_('June')
      elif month == 7:
        info = str(value.day)+' '+_('July')
      elif month == 8:
        info = str(value.day)+' '+_('Aug.')
      elif month == 9:
        info = str(value.day)+' '+_('Sep.')
      elif month == 10:
        info = str(value.day)+' '+_('Oct.')
      elif month == 11:
        info = str(value.day)+' '+_('Nov.')
      else:
        info = str(value.day)+' '+_('Dec.')
    return info+'<br>'+format_time(value, 'hh:mm', locale=locale)

我必须像上面那样才能获得翻译的短片形式,例如Dez.对于巴西的Dezember葡萄牙语)现在它本地化更好:

enter image description here 以上是巴西葡萄牙语的本地化版本 enter image description here

1 个答案:

答案 0 :(得分:2)

Django有一个很好的时间功能:

您可以根据自己的需要进行调整(可能需要删除翻译部分)。