我如何进行本地化以获得不错的人性化输出,以便像这样的文章
今天
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') }}
但是如何本地化字符串“今天”和“昨天”以及如何从 babel 中获取缩写形式,例如 Jan 而不是 1 月、2 月而不是 2 月,以及当我知道实体所在的国家/地区时如何向该项目添加时区是在修改的时候?我有一个变量 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),现在它的本地化效果更好:
以上是之前,以下是巴西葡萄牙语的本地化