Skip to content

Add new langNumFmtFunc in numfmt #1895

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from 5 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
64 changes: 64 additions & 0 deletions numfmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@
CultureNameUnknown CultureName = iota
CultureNameEnUS
CultureNameZhCN
CultureNameZhTW
CultureNameJaJP
CultureNameKoKR
CultureNameThTH
)

var (
Expand Down Expand Up @@ -4782,6 +4786,54 @@
return langNumFmt["zh-cn"][numFmtID]
}

// langNumFmtFuncZhTW returns number format code by given date and time pattern
// for country code zh-tw.
func (f *File) langNumFmtFuncZhTW(numFmtID int) string {
if numFmtID == 30 && f.options.ShortDatePattern != "" {
return f.options.ShortDatePattern
}
if (32 <= numFmtID && numFmtID <= 33) && f.options.LongTimePattern != "" {
return f.options.LongTimePattern
}
return langNumFmt["zh-tw"][numFmtID]
}

// langNumFmtFuncJaJP returns number format code by given date and time pattern
// for country code ja-jp.
func (f *File) langNumFmtFuncJaJP(numFmtID int) string {
if numFmtID == 30 && f.options.ShortDatePattern != "" {
return f.options.ShortDatePattern
}
if (32 <= numFmtID && numFmtID <= 33) && f.options.LongTimePattern != "" {
return f.options.LongTimePattern
}
return langNumFmt["ja-jp"][numFmtID]
}

// langNumFmtFuncKoKR returns number format code by given date and time pattern
// for country code ko-kr.
func (f *File) langNumFmtFuncKoKR(numFmtID int) string {
if numFmtID == 30 && f.options.ShortDatePattern != "" {
return f.options.ShortDatePattern
}
if (32 <= numFmtID && numFmtID <= 33) && f.options.LongTimePattern != "" {
return f.options.LongTimePattern
}
return langNumFmt["ko-kr"][numFmtID]
}

// langNumFmtFuncThTH returns number format code by given date and time pattern
// for country code th-th.
func (f *File) langNumFmtFuncThTH(numFmtID int) string {
if numFmtID == 71 && f.options.ShortDatePattern != "" {
return f.options.ShortDatePattern
}
if numFmtID == 76 && f.options.LongTimePattern != "" {
return f.options.LongTimePattern
}
return langNumFmt["th-th"][numFmtID]
}

// getBuiltInNumFmtCode convert number format index to number format code with
// specified locale and language.
func (f *File) getBuiltInNumFmtCode(numFmtID int) (string, bool) {
Expand All @@ -4795,6 +4847,18 @@
if f.options.CultureInfo == CultureNameZhCN {
return f.langNumFmtFuncZhCN(numFmtID), true
}
if f.options.CultureInfo == CultureNameZhTW {
return f.langNumFmtFuncZhTW(numFmtID), true
}

Check warning on line 4852 in numfmt.go

View check run for this annotation

Codecov / codecov/patch

numfmt.go#L4851-L4852

Added lines #L4851 - L4852 were not covered by tests
if f.options.CultureInfo == CultureNameJaJP {
return f.langNumFmtFuncJaJP(numFmtID), true
}

Check warning on line 4855 in numfmt.go

View check run for this annotation

Codecov / codecov/patch

numfmt.go#L4854-L4855

Added lines #L4854 - L4855 were not covered by tests
if f.options.CultureInfo == CultureNameKoKR {
return f.langNumFmtFuncKoKR(numFmtID), true
}

Check warning on line 4858 in numfmt.go

View check run for this annotation

Codecov / codecov/patch

numfmt.go#L4857-L4858

Added lines #L4857 - L4858 were not covered by tests
if f.options.CultureInfo == CultureNameThTH {
return f.langNumFmtFuncThTH(numFmtID), true
}

Check warning on line 4861 in numfmt.go

View check run for this annotation

Codecov / codecov/patch

numfmt.go#L4860-L4861

Added lines #L4860 - L4861 were not covered by tests
}
return "", false
}
Expand Down
71 changes: 71 additions & 0 deletions numfmt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3668,3 +3668,74 @@ func TestNumFmt(t *testing.T) {
assert.Equal(t, ErrUnsupportedNumberFormat, err)
assert.False(t, changeNumFmtCode)
}

func TestLangNumFmtFunc(t *testing.T) {
shortDatePattern, longTimePattern := "M/d/yy", "h:mm:ss"
t.Run("test langNumFmtFuncZhTW", func(t *testing.T) {
f := NewFile(Options{
CultureInfo: CultureNameZhTW,
ShortDatePattern: shortDatePattern,
LongTimePattern: longTimePattern,
})
for k, v := range langNumFmt["zh-tw"] {
if k == 30 {
assert.Equal(t, f.langNumFmtFuncZhTW(k), shortDatePattern)
} else if 32 <= k && k <= 33 {
assert.Equal(t, f.langNumFmtFuncZhTW(k), longTimePattern)
} else {
assert.Equal(t, f.langNumFmtFuncZhTW(k), v)
}
}
})

t.Run("test langNumFmtFuncJaJP", func(t *testing.T) {
f := NewFile(Options{
CultureInfo: CultureNameJaJP,
ShortDatePattern: shortDatePattern,
LongTimePattern: longTimePattern,
})
for k, v := range langNumFmt["ja-jp"] {
if k == 30 {
assert.Equal(t, f.langNumFmtFuncJaJP(k), shortDatePattern)
} else if 32 <= k && k <= 33 {
assert.Equal(t, f.langNumFmtFuncJaJP(k), longTimePattern)
} else {
assert.Equal(t, f.langNumFmtFuncJaJP(k), v)
}
}
})

t.Run("test langNumFmtFuncKoKR", func(t *testing.T) {
f := NewFile(Options{
CultureInfo: CultureNameKoKR,
ShortDatePattern: shortDatePattern,
LongTimePattern: longTimePattern,
})
for k, v := range langNumFmt["ko-kr"] {
if k == 30 {
assert.Equal(t, f.langNumFmtFuncKoKR(k), shortDatePattern)
} else if 32 <= k && k <= 33 {
assert.Equal(t, f.langNumFmtFuncKoKR(k), longTimePattern)
} else {
assert.Equal(t, f.langNumFmtFuncKoKR(k), v)
}
}
})

t.Run("test langNumFmtFuncThTH", func(t *testing.T) {
f := NewFile(Options{
CultureInfo: CultureNameThTH,
ShortDatePattern: shortDatePattern,
LongTimePattern: longTimePattern,
})
for k, v := range langNumFmt["th-th"] {
if k == 71 {
assert.Equal(t, f.langNumFmtFuncThTH(k), shortDatePattern)
} else if k == 76 {
assert.Equal(t, f.langNumFmtFuncThTH(k), longTimePattern)
} else {
assert.Equal(t, f.langNumFmtFuncThTH(k), v)
}
}
})
}