Skip to content

durufmt is like durafmt, but for Russian language! 🕙 🇷🇺

License

Notifications You must be signed in to change notification settings

fat0troll/durufmt

Repository files navigation

durufmt - это durafmt, но на русском

Build Status

Intro in English

durafmt is a tiny Go library that formats time.Duration strings (and types) into a human readable format. durufmt is the same, but for Russian language.

All documentation and contributions are in Russian due to library specific use case. If you interested in English language human readable durations, consult the original library documentation. If you interested in any other language (or want to merge durafmt, durufmt and maybe more into one fully internationalized library), feedback is welcome.

Что это за библиотека?

durafmt - это маленькая Go-библиотека, которая позволяет отформатировать строки time.Duration (и типы тоже) в человекочитаемый формат на английском языке. durufmt делает то же самое, но на русском языке.

Вся документация (в виде этого README), комментарии в коде и тесты переведены на русский язык. Заинтересованные в человекочитаемых временных интервалах на английском языке могут использовать исходную библиотеку durafmt. Заинтересованные в других языках, помимо английского и русского (а так же, возможно, в создании более универсальной библиотеки, которая будет поддерживать нормальную локализацию) могут отправлять свой фидбэк мне или автору оригинальной библиотеки.

Установка

go get github.com/fat0troll/durufmt

Зачем нужна эта библиотека?

Автор оригинальной durafmt боролся с тем, что дефолтное строковое представление time.Duration выглядит так себе. Например, вот так:

53m28.587093086s // :)

Легко прочитать? А как насчёт вот такого?

354h22m3.24s // :S

Но есть ещё одна проблема, касающаяся конкретно durufmt - числительные в русском языке работают несколько сложнее, чем в английском. Недостаточно просто в конце поставить одну буковку, чтобы всё заработало - нужно учитывать три склонения (а ещё помнить, что одиннадцать, двенадцать и тринадцать - волшебные числительные-исключения). Из-за невнимательности и/или нежелания заморачиваться иногда мы видим в локализованных на русский язык интерфейсах что-нибудь типа "осталось 4 минут(-ы)", или же ещё хуже - "осталось 1 минуты". durufmt позволяет отформатировать временной интервал вызовом одной функции, не задумываясь о сложности и красоте русского языка.

Использование

Библиотека старается быть drop-in replacement для оригинальной durafmt, но никто не гарантирует, что так будет всегда.

durufmt.ParseString()

package main

import (
	"fmt"
	
	"github.com/fat0troll/durufmt"
)

func main() {
	duration, err := durufmt.ParseString("354h22m3.24s")
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(duration) // 2 недели 18 часов 22 минуты 3 секунды
	// duration.String() // "2 недели 18 часов 22 минуты 3 секунды"
}

durufmt.ParseStringShort()

Версия функции durufmt.ParseString(), возвращающая только первый (наибольший) элемент временной продолжительности.

package main

import (
	"fmt"
	
	"github.com/fat0troll/durufmt"
)

func main() {
	duration, err := durufmt.ParseStringShort("354h22m3.24s")
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(duration) // 2 недели
	// duration.String() // "2 недели"
}

durufmt.Parse()

package main

import (
	"fmt"
	"time"
	
	"github.com/fat0troll/durufmt"
)

func main() {
	timeduration := (354 * time.Hour) + (22 * time.Minute) + (3 * time.Second)
	duration := durafmt.Parse(timeduration).String()

	fmt.Println(duration) // 2 недели 18 часов 22 минуты 3 секунды
}

LimitFirstN()

Функция похожа на durufmt.ParseStringShort(), но позволяет оставить первые N частей строки вместо одной.

package main

import (
	"fmt"
	"time"
	
	"github.com/fat0troll/durufmt"
)

func main() {
	timeduration := (354 * time.Hour) + (22 * time.Minute) + (3 * time.Second)
	duration := durafmt.Parse(timeduration).LimitFirstN(2) // ограничимся двумя первыми частями

	fmt.Println(duration) // 2 недели 18 часов
}

Помощь и участие в разработке библиотеки

Помощь приветствуется! Форкайте репозиторий, меняйте его, присылайте пулл-реквесты.

В разделе Issues гитхаба можно оставлять описание багов, предложение фич и впечатления от работы с библиотекой.

Тесты можно прогнать с помощью go test, кроме того, библиотека тестируется линтером golangci-lint.

Перед присыланием пулл-реквеста запуск go test и golangci-lint обязателен.

Заключение

Отдельная благодарность Wesley Hill и всем авторам и контрибьюторам в библиотеку durafmt.

Лицензия

MIT, см. файл LICENSE.

About

durufmt is like durafmt, but for Russian language! 🕙 🇷🇺

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages