Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions locale/fa-IR.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package locale

import (
"fmt"
"math"
"time"
)

var farsiIran = Formatters{
-1 << 63: func(d time.Duration) string {
return fmt.Sprintf("در %.0f سال", math.Ceil(-d.Hours()/(24.0*30*12)))
},
-17 * (24 * time.Hour) * 30: func(_ time.Duration) string { return "در یک سال" },
-10 * (24 * time.Hour) * 30: func(d time.Duration) string { return fmt.Sprintf("در %.0f ماه", math.Ceil(-d.Hours()/(24.0*30))) },
-45 * (24 * time.Hour): func(d time.Duration) string { return "در یک ماه" },
-25 * (24 * time.Hour): func(d time.Duration) string { return fmt.Sprintf("در %.0f روز", math.Ceil(-d.Hours()/24.0)) },
-35 * time.Hour: func(_ time.Duration) string { return "در یک روز" },
-21 * time.Hour: func(d time.Duration) string { return fmt.Sprintf("در %.0f ساعت", math.Ceil(-d.Hours())) },
-89 * time.Minute: func(_ time.Duration) string { return "در یک ساعت" },
-44 * time.Minute: func(d time.Duration) string { return fmt.Sprintf("در %.0f دقیقه", math.Ceil(-d.Minutes())) },
-89 * time.Second: func(_ time.Duration) string { return "در یک دقیقه" },
-44 * time.Second: func(_ time.Duration) string { return "در چند ثانیه" },

44 * time.Second: func(_ time.Duration) string { return "چند ثانیه پیش" },
89 * time.Second: func(_ time.Duration) string { return "یک دقیقه پیش" },
44 * time.Minute: func(d time.Duration) string { return fmt.Sprintf("%.0f دقیقه پیش", math.Ceil(d.Minutes())) },
89 * time.Minute: func(_ time.Duration) string { return "یک ساعت پیش" },
21 * time.Hour: func(d time.Duration) string { return fmt.Sprintf("%.0f ساعت پیش", math.Ceil(d.Hours())) },
35 * time.Hour: func(_ time.Duration) string { return "یک روز پیش" },
25 * (24 * time.Hour): func(d time.Duration) string { return fmt.Sprintf("%.0f روز پیش", math.Ceil(d.Hours()/24.0)) },
45 * (24 * time.Hour): func(d time.Duration) string { return "یک ماه پیش" },
10 * (24 * time.Hour) * 30: func(d time.Duration) string { return fmt.Sprintf("%.0f ماه پیش", math.Ceil(d.Hours()/(24.0*30))) },
17 * (24 * time.Hour) * 30: func(_ time.Duration) string { return "یک سال پیش" },
1<<63 - 1: func(d time.Duration) string {
return fmt.Sprintf("%.0f سال پیش", math.Ceil(d.Hours()/(24.0*30*12)))
},
}

func init() {
Register("fa", farsiIran) // also register it as the default english locale
Register("fa-IR", farsiIran)
}
131 changes: 131 additions & 0 deletions timediff_fa_IR_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package timediff_test

import (
"fmt"
"math"
"testing"
"time"

"github.com/mergestat/timediff"
"github.com/mergestat/timediff/locale"
)

var fixtures_fa_IR = map[string]string{
"-10s": "چند ثانیه پیش",
"-44s": "چند ثانیه پیش",
"-45s": "یک دقیقه پیش",
"-89s": "یک دقیقه پیش",
"-90s": "2 دقیقه پیش",
"-91s": "2 دقیقه پیش",
"-2m": "2 دقیقه پیش",
"-10m": "10 دقیقه پیش",
"-44m": "44 دقیقه پیش",
"-45m": "یک ساعت پیش",
"-60m": "یک ساعت پیش",
"-1h": "یک ساعت پیش",
"-80m": "یک ساعت پیش",
"-89m": "یک ساعت پیش",
"-90m": "2 ساعت پیش",
"-2h": "2 ساعت پیش",
"-20h": "20 ساعت پیش",
"-21h": "21 ساعت پیش",
"-21h30m": "یک روز پیش",
"-22h": "یک روز پیش",
"-24h": "یک روز پیش",
"-24h30m": "یک روز پیش",
"-34h59m": "یک روز پیش",
"-36h": "2 روز پیش",
fmt.Sprintf("-%dh", 10*24): "10 روز پیش",
fmt.Sprintf("-%dh", 25*24): "25 روز پیش",
fmt.Sprintf("-%dh", 26*24): "یک ماه پیش",
fmt.Sprintf("-%dh", 45*24): "یک ماه پیش",
fmt.Sprintf("-%dh2m", 45*24): "2 ماه پیش",
fmt.Sprintf("-%dh", 46*24+1): "2 ماه پیش",
fmt.Sprintf("-%dh", 80*24): "3 ماه پیش",
fmt.Sprintf("-%dh", 9*24*30): "9 ماه پیش",
fmt.Sprintf("-%dh", 10*24*30): "10 ماه پیش",
fmt.Sprintf("-%dh1m", 10*24*30): "یک سال پیش",
fmt.Sprintf("-%dh", 12*24*30): "یک سال پیش",
fmt.Sprintf("-%dh", 17*24*30+1): "2 سال پیش",
fmt.Sprintf("-%dh", 24*24*30): "2 سال پیش",
fmt.Sprintf("-%dh", 20*24*30*12): "20 سال پیش",
fmt.Sprintf("-%dh", 100*24*30*12): "100 سال پیش",

"10s": "در چند ثانیه",
"44s": "در چند ثانیه",
"45s": "در یک دقیقه",
"89s": "در یک دقیقه",
"90s": "در 2 دقیقه",
"2m": "در 2 دقیقه",
"10m": "در 10 دقیقه",
"44m": "در 44 دقیقه",
"45m": "در یک ساعت",
"60m": "در یک ساعت",
"1h": "در یک ساعت",
"80m": "در یک ساعت",
"89m": "در یک ساعت",
"89m10s": "در 2 ساعت",
"90m": "در 2 ساعت",
"2h": "در 2 ساعت",
"20h": "در 20 ساعت",
"21h": "در 21 ساعت",
"21h30m": "در یک روز",
"22h": "در یک روز",
"24h": "در یک روز",
"36h": "در 2 روز",
"35h10m": "در 2 روز",
fmt.Sprintf("%dh", 10*24): "در 10 روز",
fmt.Sprintf("%dh", 25*24): "در 25 روز",
fmt.Sprintf("%dh", 26*24): "در یک ماه",
fmt.Sprintf("%dh", 45*24): "در یک ماه",
fmt.Sprintf("%dh1m", 45*24): "در 2 ماه",
fmt.Sprintf("%dh", 46*24): "در 2 ماه",
fmt.Sprintf("%dh", 80*24): "در 3 ماه",
fmt.Sprintf("%dh", 9*24*30): "در 9 ماه",
fmt.Sprintf("%dh", 10*24*30): "در 10 ماه",
fmt.Sprintf("%dh1m", 10*24*30): "در یک سال",
fmt.Sprintf("%dh", 12*24*30): "در یک سال",
fmt.Sprintf("%dh", 24*24*30): "در 2 سال",
fmt.Sprintf("%dh", 20*24*30*12): "در 20 سال",
fmt.Sprintf("%dh", 100*24*30*12): "در 100 سال",
}

func TestTimeDiffFaIR(t *testing.T) {
execFixtures(t, fixtures_fa_IR, timediff.WithLocale("fa-IR"))
}

func TestWithStartTimeFaIR(t *testing.T) {
start := time.Date(2022, time.January, 22, 12, 0, 0, 0, time.Now().Local().Location())
timeToDiff := time.Date(2022, time.January, 22, 10, 0, 0, 0, time.Now().Local().Location())

want := "2 ساعت پیش"
got := timediff.TimeDiff(timeToDiff, timediff.WithLocale("fa-IR"), timediff.WithStartTime(start))

if got != want {
t.Fatalf("expected: %q, got %q", want, got)
}
}

func TestWithCustomFormattersFaIR(t *testing.T) {
var custom = locale.Formatters{
21 * time.Hour: func(d time.Duration) string { return fmt.Sprintf("پیام: %.0f ساعت", math.Ceil(d.Hours())) },
}

{
want := "پیام: 2 ساعت"
got := timediff.TimeDiff(time.Now().Add(-2*time.Hour), timediff.WithCustomFormatters(custom), timediff.WithLocale("fa-IR"))

if got != want {
t.Fatalf("expected: %q, got %q", want, got)
}
}

{
want := "پیام: 100 ساعت"
got := timediff.TimeDiff(time.Now().Add(-100*time.Hour), timediff.WithCustomFormatters(custom), timediff.WithLocale("fa-IR"))

if got != want {
t.Fatalf("expected: %q, got %q", want, got)
}
}
}
Loading