После некоторых размышлений понял, что при моих запросах никакая библиотека не поможет, и написал сам.
Выглядит страшновато, но сходу не знаю, как заменить эти бесконечные if'ы на что-то более изящное:
def seconds_to_rus(seconds_in: float):
GROUPS = {1:1, 2:2, 3:2, 4:2, 5:5, 6:5, 7:5, 8:5, 9:5, 0:5}
HOURS = {1: "час", 2: "часа", 5: "часов"}
MINUTES = {1: "минута", 2: "минуты", 5: "минут"}
SECONDS = {1: "секунда", 2: "секунды", 5: "секунд"}
if seconds_in < 0.1:
return "0.1 секунды"
if seconds_in < 1:
return "%.1f секунды" % seconds_in
if seconds_in < 1.1:
return "1 секунда"
if seconds_in < 2:
return "%.1f секунды" % seconds_in
if seconds_in < 2.1:
return "2 секунды"
if seconds_in < 3:
return "%.1f секунды" % seconds_in
seconds_in = int(round(seconds_in))
seconds_1 = seconds_in % 10
if seconds_in < 60: # 1 минута
return "%d %s" % (seconds_in, SECONDS[GROUPS[seconds_1]])
if seconds_in < 300: # 5 минут
minutes_in = int(seconds_in / 60.0)
minutes_1 = minutes_in % 10
seconds_in %= 60
if seconds_in:
return "%d %s %d %s" % (minutes_in, MINUTES[GROUPS[minutes_1]], seconds_in, SECONDS[GROUPS[seconds_1]])
else:
return "%d %s" % (minutes_in, MINUTES[GROUPS[minutes_1]])
minutes_in = int(round(seconds_in / 60.0))
minutes_1 = minutes_in % 10
if minutes_in < 60: # 1 час
return "%d %s" % (minutes_in, MINUTES[GROUPS[minutes_1]])
else:
hours_in = int(minutes_in / 60.0)
hours_1 = hours_in % 10
minutes_in %= 60
if minutes_in:
return "%d %s %d %s" % (hours_in, HOURS[GROUPS[hours_1]], minutes_in, MINUTES[GROUPS[minutes_1]])
else:
return "%d %s" % (hours_in, HOURS[GROUPS[hours_1]])