# coding=utf-8 import datetime DAY_ALTERNATIVES = { 1: (u"вчера", u"завтра"), 2: (u"позавчера", u"послезавтра") } # : Day alternatives (i.e. one day ago -> yesterday) DAY_VARIANTS = ( u"день", u"дня", u"дней", ) # : Forms (1, 2, 5) for noun 'day' HOUR_VARIANTS = ( u"час", u"часа", u"часов", ) # : Forms (1, 2, 5) for noun 'hour' MINUTE_VARIANTS = ( u"минуту", u"минуты", u"минут", ) # : Forms (1, 2, 5) for noun 'minute' PREFIX_IN = u"через" # : Prefix 'in' (i.e. B{in} three hours) SUFFIX_AGO = u"назад" # : Prefix 'ago' (i.e. three hours B{ago}) MONTH_NAMES = ( (u"Янв", u"январь", u"января"), (u"Фев", u"февраль", u"февраля"), (u"Мар", u"март", u"марта"), (u"Апр", u"апрель", u"апреля"), (u"Май", u"май", u"мая"), (u"Июн", u"июнь", u"июня"), (u"Июл", u"июль", u"июля"), (u"Авг", u"август", u"августа"), (u"Сен", u"сентябрь", u"сентября"), (u"Окт", u"октябрь", u"октября"), (u"Ноя", u"ноябрь", u"ноября"), (u"Дек", u"декабрь", u"декабря"), ) # : Month names (abbreviated, full, inflected) DAY_NAMES = ( (u"пн", u"понедельник", u"понедельник", u"в\xa0"), (u"вт", u"вторник", u"вторник", u"во\xa0"), (u"ср", u"среда", u"среду", u"в\xa0"), (u"чт", u"четверг", u"четверг", u"в\xa0"), (u"пт", u"пятница", u"пятницу", u"в\xa0"), (u"сб", u"суббота", u"субботу", u"в\xa0"), (u"вск", u"воскресенье", u"воскресенье", u"в\xa0") ) # : Day names (abbreviated, full, inflected, preposition) def ru_strftime(format=u"%d.%m.%Y", date=None, inflected=False, inflected_day=False, preposition=False): if date is None: date = datetime.datetime.today() weekday = date.weekday() prepos = preposition and DAY_NAMES[weekday][3] or u"" month_idx = inflected and 2 or 1 day_idx = (inflected_day or preposition) and 2 or 1 # for russian typography standard, # 1 April 2007, but 01.04.2007 if u'%b' in format or u'%B' in format: format = format.replace(u'%d', unicode(date.day)) format = format.replace(u'%a', prepos + DAY_NAMES[weekday][0]) format = format.replace(u'%A', prepos + DAY_NAMES[weekday][day_idx]) format = format.replace(u'%b', MONTH_NAMES[date.month - 1][0]) format = format.replace(u'%B', MONTH_NAMES[date.month - 1][month_idx]) # strftime must be str, so encode it to utf8: s_format = format.encode("utf-8") s_res = date.strftime(s_format) # and back to unicode # u_res = s_res.decode("utf-8") return s_res