2

我如何进行本地化以获得不错的人性化输出,以便像这样的文章

今天

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),现在它的本地化效果更好:

在此处输入图像描述 以上是之前,以下是巴西葡萄牙语的本地化 在此处输入图像描述

4

0 回答 0