Skip to content

Commit ba1771e

Browse files
patrickdevivoclaude
andcommitted
feat: Add ja-JP (Japanese) locale with tests
Added Japanese locale support with comprehensive test coverage. Translations follow the same time range patterns as other locales. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent f2b2b3d commit ba1771e

File tree

2 files changed

+130
-0
lines changed

2 files changed

+130
-0
lines changed

locale/ja-JP.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package locale
2+
3+
import (
4+
"fmt"
5+
"math"
6+
"time"
7+
)
8+
9+
var japaneseJapan = Formatters{
10+
-1 << 63: func(d time.Duration) string { return fmt.Sprintf("%.0f年後", math.Ceil(-d.Hours()/(24.0*30*12))) },
11+
-17 * (24 * time.Hour) * 30: func(_ time.Duration) string { return "1年後" },
12+
-10 * (24 * time.Hour) * 30: func(d time.Duration) string { return fmt.Sprintf("%.0fヶ月後", math.Ceil(-d.Hours()/(24.0*30))) },
13+
-45 * (24 * time.Hour): func(d time.Duration) string { return "1ヶ月後" },
14+
-25 * (24 * time.Hour): func(d time.Duration) string { return fmt.Sprintf("%.0f日後", math.Ceil(-d.Hours()/24.0)) },
15+
-35 * time.Hour: func(_ time.Duration) string { return "1日後" },
16+
-21 * time.Hour: func(d time.Duration) string { return fmt.Sprintf("%.0f時間後", math.Ceil(-d.Hours())) },
17+
-89 * time.Minute: func(_ time.Duration) string { return "1時間後" },
18+
-44 * time.Minute: func(d time.Duration) string { return fmt.Sprintf("%.0f分後", math.Ceil(-d.Minutes())) },
19+
-89 * time.Second: func(_ time.Duration) string { return "1分後" },
20+
-44 * time.Second: func(_ time.Duration) string { return "数秒後" },
21+
22+
44 * time.Second: func(_ time.Duration) string { return "数秒前" },
23+
89 * time.Second: func(_ time.Duration) string { return "1分前" },
24+
44 * time.Minute: func(d time.Duration) string { return fmt.Sprintf("%.0f分前", math.Ceil(d.Minutes())) },
25+
89 * time.Minute: func(_ time.Duration) string { return "1時間前" },
26+
21 * time.Hour: func(d time.Duration) string { return fmt.Sprintf("%.0f時間前", math.Ceil(d.Hours())) },
27+
35 * time.Hour: func(_ time.Duration) string { return "1日前" },
28+
25 * (24 * time.Hour): func(d time.Duration) string { return fmt.Sprintf("%.0f日前", math.Ceil(d.Hours()/24.0)) },
29+
45 * (24 * time.Hour): func(d time.Duration) string { return "1ヶ月前" },
30+
10 * (24 * time.Hour) * 30: func(d time.Duration) string { return fmt.Sprintf("%.0fヶ月前", math.Ceil(d.Hours()/(24.0*30))) },
31+
17 * (24 * time.Hour) * 30: func(_ time.Duration) string { return "1年前" },
32+
1<<63 - 1: func(d time.Duration) string { return fmt.Sprintf("%.0f年前", math.Ceil(d.Hours()/(24.0*30*12))) },
33+
}
34+
35+
func init() {
36+
Register("ja", japaneseJapan)
37+
Register("ja-JP", japaneseJapan)
38+
}

timediff_ja_JP_test.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package timediff_test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/mergestat/timediff"
8+
)
9+
10+
var fixtures_ja_JP = map[string]string{
11+
"-10s": "数秒前",
12+
"-44s": "数秒前",
13+
"-45s": "1分前",
14+
"-89s": "1分前",
15+
"-90s": "2分前",
16+
"-91s": "2分前",
17+
"-2m": "2分前",
18+
"-10m": "10分前",
19+
"-44m": "44分前",
20+
"-45m": "1時間前",
21+
"-60m": "1時間前",
22+
"-1h": "1時間前",
23+
"-80m": "1時間前",
24+
"-89m": "1時間前",
25+
"-90m": "2時間前",
26+
"-2h": "2時間前",
27+
"-20h": "20時間前",
28+
"-21h": "21時間前",
29+
"-21h30m": "1日前",
30+
"-22h": "1日前",
31+
"-24h": "1日前",
32+
"-24h30m": "1日前",
33+
"-34h59m": "1日前",
34+
"-36h": "2日前",
35+
fmt.Sprintf("-%dh", 10*24): "10日前",
36+
fmt.Sprintf("-%dh", 25*24): "25日前",
37+
fmt.Sprintf("-%dh", 26*24): "1ヶ月前",
38+
fmt.Sprintf("-%dh", 45*24): "1ヶ月前",
39+
fmt.Sprintf("-%dh2m", 45*24): "2ヶ月前",
40+
fmt.Sprintf("-%dh", 46*24+1): "2ヶ月前",
41+
fmt.Sprintf("-%dh", 80*24): "3ヶ月前",
42+
fmt.Sprintf("-%dh", 9*24*30): "9ヶ月前",
43+
fmt.Sprintf("-%dh", 10*24*30): "10ヶ月前",
44+
fmt.Sprintf("-%dh1m", 10*24*30): "1年前",
45+
fmt.Sprintf("-%dh", 12*24*30): "1年前",
46+
fmt.Sprintf("-%dh", 17*24*30+1): "2年前",
47+
fmt.Sprintf("-%dh", 24*24*30): "2年前",
48+
fmt.Sprintf("-%dh", 20*24*30*12): "20年前",
49+
fmt.Sprintf("-%dh", 100*24*30*12): "100年前",
50+
51+
"10s": "数秒後",
52+
"44s": "数秒後",
53+
"45s": "1分後",
54+
"89s": "1分後",
55+
"90s": "2分後",
56+
"2m": "2分後",
57+
"10m": "10分後",
58+
"44m": "44分後",
59+
"45m": "1時間後",
60+
"60m": "1時間後",
61+
"1h": "1時間後",
62+
"80m": "1時間後",
63+
"89m": "1時間後",
64+
"89m10s": "2時間後",
65+
"90m": "2時間後",
66+
"2h": "2時間後",
67+
"20h": "20時間後",
68+
"21h": "21時間後",
69+
"21h30m": "1日後",
70+
"22h": "1日後",
71+
"24h": "1日後",
72+
"35h10m": "2日後",
73+
"36h": "2日後",
74+
fmt.Sprintf("%dh", 10*24): "10日後",
75+
fmt.Sprintf("%dh", 25*24): "25日後",
76+
fmt.Sprintf("%dh", 26*24): "1ヶ月後",
77+
fmt.Sprintf("%dh", 45*24): "1ヶ月後",
78+
fmt.Sprintf("%dh1m", 45*24): "2ヶ月後",
79+
fmt.Sprintf("%dh", 46*24): "2ヶ月後",
80+
fmt.Sprintf("%dh", 80*24): "3ヶ月後",
81+
fmt.Sprintf("%dh", 9*24*30): "9ヶ月後",
82+
fmt.Sprintf("%dh", 10*24*30): "10ヶ月後",
83+
fmt.Sprintf("%dh1m", 10*24*30): "1年後",
84+
fmt.Sprintf("%dh", 12*24*30): "1年後",
85+
fmt.Sprintf("%dh", 24*24*30): "2年後",
86+
fmt.Sprintf("%dh", 20*24*30*12): "20年後",
87+
fmt.Sprintf("%dh", 100*24*30*12): "100年後",
88+
}
89+
90+
func TestTimeDiffJaJP(t *testing.T) {
91+
execFixtures(t, fixtures_ja_JP, timediff.WithLocale("ja-JP"))
92+
}

0 commit comments

Comments
 (0)