Skip to content

Commit be36b09

Browse files
authored
This fixes qax-os#1457, reduce string concatenation when applying number format (qax-os#1459)
Co-authored-by: Nathan Davies <ndavies@turnitin.com>
1 parent 1ab7a99 commit be36b09

File tree

1 file changed

+87
-57
lines changed

1 file changed

+87
-57
lines changed

numfmt.go

+87-57
Original file line numberDiff line numberDiff line change
@@ -192,22 +192,46 @@ var (
192192
}
193193
// monthNamesAfrikaans list the month names in the Afrikaans.
194194
monthNamesAfrikaans = []string{"Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September", "Oktober", "November", "Desember"}
195+
// monthNamesAfrikaansAbbr lists the month name abbreviations in Afrikaans
196+
monthNamesAfrikaansAbbr = []string{"Jan.", "Feb.", "Maa.", "Apr.", "Mei", "Jun.", "Jul.", "Aug.", "Sep.", "Okt.", "Nov.", "Des."}
195197
// monthNamesChinese list the month names in the Chinese.
196198
monthNamesChinese = []string{"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"}
199+
// monthNamesChineseAbbr1 list the month number and character abbreviation in Chinese
200+
monthNamesChineseAbbrPlus = []string{"0月", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月"}
201+
// monthNamesChinesePlus list the month names in Chinese plus the character 月
202+
monthNamesChinesePlus = []string{"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"}
203+
// monthNamesKoreanAbbrPlus lists out the month number plus 월 for the Korean language
204+
monthNamesKoreanAbbrPlus = []string{"0월", "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월"}
205+
// monthNamesTradMongolian lists the month number for use with traditional Mongolian
206+
monthNamesTradMongolian = []string{"M01", "M02", "M03", "M04", "M05", "M06", "M07", "M08", "M09", "M10", "M11", "M12"}
197207
// monthNamesFrench list the month names in the French.
198208
monthNamesFrench = []string{"janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"}
209+
// monthNamesFrenchAbbr lists the month name abbreviations in French
210+
monthNamesFrenchAbbr = []string{"janv.", "févr.", "mars", "avri.", "mai", "juin", "juil.", "août", "sept.", "octo.", "nove.", "déce."}
199211
// monthNamesGerman list the month names in the German.
200212
monthNamesGerman = []string{"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"}
213+
// monthNamesGermanAbbr list the month abbreviations in German
214+
monthNamesGermanAbbr = []string{"Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"}
201215
// monthNamesAustria list the month names in the Austria.
202216
monthNamesAustria = []string{"Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"}
217+
// monthNamesAustriaAbbr list the month name abbreviations in Austrian
218+
monthNamesAustriaAbbr = []string{"Jän", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"}
203219
// monthNamesIrish list the month names in the Irish.
204220
monthNamesIrish = []string{"Eanáir", "Feabhra", "Márta", "Aibreán", "Bealtaine", "Meitheamh", "Iúil", "Lúnasa", "Meán Fómhair", "Deireadh Fómhair", "Samhain", "Nollaig"}
221+
// monthNamesIrishAbbr lists the month abbreviations in Irish
222+
monthNamesIrishAbbr = []string{"Ean", "Feabh", "Márta", "Aib", "Beal", "Meith", "Iúil", "Lún", "MFómh", "DFómh", "Samh", "Noll"}
205223
// monthNamesItalian list the month names in the Italian.
206224
monthNamesItalian = []string{"gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"}
225+
// monthNamesItalianAbbr list the month name abbreviations in Italian
226+
monthNamesItalianAbbr = []string{"gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"}
207227
// monthNamesRussian list the month names in the Russian.
208228
monthNamesRussian = []string{"январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"}
229+
// monthNamesRussianAbbr list the month abbreviations for Russian.
230+
monthNamesRussianAbbr = []string{"янв.", "фев.", "март", "апр.", "май", "июнь", "июль", "авг.", "сен.", "окт.", "ноя.", "дек."}
209231
// monthNamesSpanish list the month names in the Spanish.
210232
monthNamesSpanish = []string{"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"}
233+
// monthNamesSpanishAbbr list the month abbreviations in Spanish
234+
monthNamesSpanishAbbr = []string{"ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"}
211235
// monthNamesThai list the month names in the Thai.
212236
monthNamesThai = []string{
213237
"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
@@ -238,22 +262,51 @@ var (
238262
"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54\u0f0b",
239263
"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54\u0f0b",
240264
}
265+
// monthNamesTibetanAbbr lists the month name abbreviations in Tibetan
266+
monthNamesTibetanAbbr = []string{
267+
"\u0f5f\u0fb3\u0f0b\u0f21",
268+
"\u0f5f\u0fb3\u0f0b\u0f22",
269+
"\u0f5f\u0fb3\u0f0b\u0f23",
270+
"\u0f5f\u0fb3\u0f0b\u0f24",
271+
"\u0f5f\u0fb3\u0f0b\u0f25",
272+
"\u0f5f\u0fb3\u0f0b\u0f26",
273+
"\u0f5f\u0fb3\u0f0b\u0f27",
274+
"\u0f5f\u0fb3\u0f0b\u0f28",
275+
"\u0f5f\u0fb3\u0f0b\u0f29",
276+
"\u0f5f\u0fb3\u0f0b\u0f21\u0f20",
277+
"\u0f5f\u0fb3\u0f0b\u0f21\u0f21",
278+
"\u0f5f\u0fb3\u0f0b\u0f21\u0f22",
279+
}
241280
// monthNamesTurkish list the month names in the Turkish.
242281
monthNamesTurkish = []string{"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"}
282+
// monthNamesTurkishAbbr lists the month name abbreviations in Turkish, this prevents string concatenation
283+
monthNamesTurkishAbbr = []string{"Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"}
284+
// monthNamesVietnamese list the month name used for Vietnamese
285+
monthNamesVietnamese = []string{"Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"}
286+
// monthNamesVietnameseAbbr3 list the mid-form abbreviation for Vietnamese months
287+
monthNamesVietnameseAbbr3 = []string{"Thg 1", "Thg 2", "Thg 3", "Thg 4", "Thg 5", "Thg 6", "Thg 7", "Thg 8", "Thg 9", "Thg 10", "Thg 11", "Thg 12"}
288+
// monthNamesVietnameseAbbr5 list the short-form abbreviation for Vietnamese months
289+
monthNamesVietnameseAbbr5 = []string{"T 1", "T 2", "T 3", "T 4", "T 5", "T 6", "T 7", "T 8", "T 9", "T 10", "T 11", "T 12"}
243290
// monthNamesWelsh list the month names in the Welsh.
244291
monthNamesWelsh = []string{"Ionawr", "Chwefror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorffennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"}
292+
// monthNamesWelshAbbr lists the month name abbreviations in Welsh, this prevents string concatenation
293+
monthNamesWelshAbbr = []string{"Ion", "Chwef", "Maw", "Ebr", "Mai", "Meh", "Gorff", "Awst", "Medi", "Hyd", "Tach", "Rhag"}
245294
// monthNamesWolof list the month names in the Wolof.
246295
monthNamesWolof = []string{"Samwiye", "Fewriye", "Maars", "Awril", "Me", "Suwe", "Sullet", "Ut", "Septàmbar", "Oktoobar", "Noowàmbar", "Desàmbar"}
247296
// monthNamesWolofAbbr list the month name abbreviations in Wolof, this prevents string concatenation
248297
monthNamesWolofAbbr = []string{"Sam.", "Few.", "Maa", "Awr.", "Me", "Suw", "Sul.", "Ut", "Sept.", "Okt.", "Now.", "Des."}
249298
// monthNamesXhosa list the month names in the Xhosa.
250299
monthNamesXhosa = []string{"uJanuwari", "uFebuwari", "uMatshi", "uAprili", "uMeyi", "uJuni", "uJulayi", "uAgasti", "uSeptemba", "uOktobha", "uNovemba", "uDisemba"}
251-
// monthNamesXhosaAbbr list the mont abbreviations in the Xhosa, this prevents string concatenation
300+
// monthNamesXhosaAbbr list the month abbreviations in the Xhosa, this prevents string concatenation
252301
monthNamesXhosaAbbr = []string{"uJan.", "uFeb.", "uMat.", "uEpr.", "uMey.", "uJun.", "uJul.", "uAg.", "uSep.", "uOkt.", "uNov.", "uDis."}
253302
// monthNamesYi list the month names in the Yi.
254303
monthNamesYi = []string{"\ua2cd", "\ua44d", "\ua315", "\ua1d6", "\ua26c", "\ua0d8", "\ua3c3", "\ua246", "\ua22c", "\ua2b0", "\ua2b0\ua2aa", "\ua2b0\ua44b"}
304+
// monthNamesYiSuffix lists the month names in Yi with the "\ua1aa" suffix
305+
monthNamesYiSuffix = []string{"\ua2cd\ua1aa", "\ua44d\ua1aa", "\ua315\ua1aa", "\ua1d6\ua1aa", "\ua26c\ua1aa", "\ua0d8\ua1aa", "\ua3c3\ua1aa", "\ua246\ua1aa", "\ua22c\ua1aa", "\ua2b0\ua1aa", "\ua2b0\ua2aa\ua1aa", "\ua2b0\ua44b\ua1aa"}
255306
// monthNamesZulu list the month names in the Zulu.
256307
monthNamesZulu = []string{"Januwari", "Febhuwari", "Mashi", "Ephreli", "Meyi", "Juni", "Julayi", "Agasti", "Septemba", "Okthoba", "Novemba", "Disemba"}
308+
// monthNamesZuluAbbr list teh month name abbreviations in Zulu
309+
monthNamesZuluAbbr = []string{"Jan", "Feb", "Mas", "Eph", "Mey", "Jun", "Jul", "Agas", "Sep", "Okt", "Nov", "Dis"}
257310
// apFmtAfrikaans defined the AM/PM name in the Afrikaans.
258311
apFmtAfrikaans = "vm./nm."
259312
// apFmtCuba defined the AM/PM name in the Cuba.
@@ -399,27 +452,23 @@ func localMonthsNameEnglish(t time.Time, abbr int) string {
399452
// localMonthsNameAfrikaans returns the Afrikaans name of the month.
400453
func localMonthsNameAfrikaans(t time.Time, abbr int) string {
401454
if abbr == 3 {
402-
month := monthNamesAfrikaans[int(t.Month())-1]
403-
if len([]rune(month)) <= 3 {
404-
return month
405-
}
406-
return string([]rune(month)[:3]) + "."
455+
return monthNamesAfrikaansAbbr[int(t.Month())-1]
407456
}
408457
if abbr == 4 {
409458
return monthNamesAfrikaans[int(t.Month())-1]
410459
}
411-
return monthNamesAfrikaans[int(t.Month())-1][:1]
460+
return monthNamesAfrikaansAbbr[int(t.Month())-1][:1]
412461
}
413462

414463
// localMonthsNameAustria returns the Austria name of the month.
415464
func localMonthsNameAustria(t time.Time, abbr int) string {
416465
if abbr == 3 {
417-
return string([]rune(monthNamesAustria[int(t.Month())-1])[:3])
466+
return monthNamesAustriaAbbr[int(t.Month())-1]
418467
}
419468
if abbr == 4 {
420469
return monthNamesAustria[int(t.Month())-1]
421470
}
422-
return monthNamesAustria[int(t.Month())-1][:1]
471+
return monthNamesAustriaAbbr[int(t.Month())-1][:1]
423472
}
424473

425474
// localMonthsNameBangla returns the German name of the month.
@@ -435,89 +484,80 @@ func localMonthsNameFrench(t time.Time, abbr int) string {
435484
if abbr == 3 {
436485
month := monthNamesFrench[int(t.Month())-1]
437486
if len([]rune(month)) <= 4 {
438-
return month
487+
return monthNamesFrench[int(t.Month())-1]
439488
}
440-
return string([]rune(month)[:4]) + "."
489+
return monthNamesFrenchAbbr[int(t.Month())-1]
441490
}
442491
if abbr == 4 {
443492
return monthNamesFrench[int(t.Month())-1]
444493
}
445-
return monthNamesFrench[int(t.Month())-1][:1]
494+
return monthNamesFrenchAbbr[int(t.Month())-1][:1]
446495
}
447496

448497
// localMonthsNameIrish returns the Irish name of the month.
449498
func localMonthsNameIrish(t time.Time, abbr int) string {
450499
if abbr == 3 {
451-
switch int(t.Month()) {
452-
case 1, 4, 8:
453-
return string([]rune(monthNamesIrish[int(t.Month())-1])[:3])
454-
case 2, 3, 6:
455-
return string([]rune(monthNamesIrish[int(t.Month())-1])[:5])
456-
case 9, 10:
457-
return string([]rune(monthNamesIrish[int(t.Month())-1])[:1]) + "Fómh"
458-
default:
459-
return string([]rune(monthNamesIrish[int(t.Month())-1])[:4])
460-
}
500+
return monthNamesIrishAbbr[int(t.Month()-1)]
461501
}
462502
if abbr == 4 {
463503
return monthNamesIrish[int(t.Month())-1]
464504
}
465-
return string([]rune(monthNamesIrish[int(t.Month())-1])[:1])
505+
return monthNamesIrishAbbr[int(t.Month())-1][:1]
466506
}
467507

468508
// localMonthsNameItalian returns the Italian name of the month.
469509
func localMonthsNameItalian(t time.Time, abbr int) string {
470510
if abbr == 3 {
471-
return monthNamesItalian[int(t.Month())-1][:3]
511+
return monthNamesItalianAbbr[int(t.Month())-1]
472512
}
473513
if abbr == 4 {
474514
return monthNamesItalian[int(t.Month())-1]
475515
}
476-
return monthNamesItalian[int(t.Month())-1][:1]
516+
return monthNamesItalianAbbr[int(t.Month())-1][:1]
477517
}
478518

479519
// localMonthsNameGerman returns the German name of the month.
480520
func localMonthsNameGerman(t time.Time, abbr int) string {
481521
if abbr == 3 {
482-
return string([]rune(monthNamesGerman[int(t.Month())-1])[:3])
522+
return monthNamesGermanAbbr[int(t.Month())-1]
483523
}
484524
if abbr == 4 {
485525
return monthNamesGerman[int(t.Month())-1]
486526
}
487-
return string([]rune(monthNamesGerman[int(t.Month())-1])[:1])
527+
return monthNamesGermanAbbr[int(t.Month())-1][:1]
488528
}
489529

490530
// localMonthsNameChinese1 returns the Chinese name of the month.
491531
func localMonthsNameChinese1(t time.Time, abbr int) string {
492532
if abbr == 3 {
493-
return strconv.Itoa(int(t.Month())) + "月"
533+
return monthNamesChineseAbbrPlus[int(t.Month())]
494534
}
495535
if abbr == 4 {
496-
return monthNamesChinese[int(t.Month())-1] + "月"
536+
return monthNamesChinesePlus[int(t.Month())-1]
497537
}
498538
return monthNamesChinese[int(t.Month())-1]
499539
}
500540

501541
// localMonthsNameChinese2 returns the Chinese name of the month.
502542
func localMonthsNameChinese2(t time.Time, abbr int) string {
503543
if abbr == 3 || abbr == 4 {
504-
return monthNamesChinese[int(t.Month())-1] + "月"
544+
return monthNamesChinesePlus[int(t.Month())-1]
505545
}
506546
return monthNamesChinese[int(t.Month())-1]
507547
}
508548

509549
// localMonthsNameChinese3 returns the Chinese name of the month.
510550
func localMonthsNameChinese3(t time.Time, abbr int) string {
511551
if abbr == 3 || abbr == 4 {
512-
return strconv.Itoa(int(t.Month())) + "月"
552+
return monthNamesChineseAbbrPlus[int(t.Month())]
513553
}
514554
return strconv.Itoa(int(t.Month()))
515555
}
516556

517557
// localMonthsNameKorean returns the Korean name of the month.
518558
func localMonthsNameKorean(t time.Time, abbr int) string {
519559
if abbr == 3 || abbr == 4 {
520-
return strconv.Itoa(int(t.Month())) + "월"
560+
return monthNamesKoreanAbbrPlus[int(t.Month())]
521561
}
522562
return strconv.Itoa(int(t.Month()))
523563
}
@@ -527,7 +567,7 @@ func localMonthsNameTraditionalMongolian(t time.Time, abbr int) string {
527567
if abbr == 5 {
528568
return "M"
529569
}
530-
return fmt.Sprintf("M%02d", int(t.Month()))
570+
return monthNamesTradMongolian[int(t.Month()-1)]
531571
}
532572

533573
// localMonthsNameRussian returns the Russian name of the month.
@@ -537,7 +577,7 @@ func localMonthsNameRussian(t time.Time, abbr int) string {
537577
if len([]rune(month)) <= 4 {
538578
return month
539579
}
540-
return string([]rune(month)[:3]) + "."
580+
return monthNamesRussianAbbr[int(t.Month())-1]
541581
}
542582
if abbr == 4 {
543583
return monthNamesRussian[int(t.Month())-1]
@@ -548,12 +588,12 @@ func localMonthsNameRussian(t time.Time, abbr int) string {
548588
// localMonthsNameSpanish returns the Spanish name of the month.
549589
func localMonthsNameSpanish(t time.Time, abbr int) string {
550590
if abbr == 3 {
551-
return monthNamesSpanish[int(t.Month())-1][:3]
591+
return monthNamesSpanishAbbr[int(t.Month())-1]
552592
}
553593
if abbr == 4 {
554594
return monthNamesSpanish[int(t.Month())-1]
555595
}
556-
return monthNamesSpanish[int(t.Month())-1][:1]
596+
return monthNamesSpanishAbbr[int(t.Month())-1][:1]
557597
}
558598

559599
// localMonthsNameThai returns the Thai name of the month.
@@ -571,7 +611,7 @@ func localMonthsNameThai(t time.Time, abbr int) string {
571611
// localMonthsNameTibetan returns the Tibetan name of the month.
572612
func localMonthsNameTibetan(t time.Time, abbr int) string {
573613
if abbr == 3 {
574-
return "\u0f5f\u0fb3\u0f0b" + []string{"\u0f21", "\u0f22", "\u0f23", "\u0f24", "\u0f25", "\u0f26", "\u0f27", "\u0f28", "\u0f29", "\u0f21\u0f20", "\u0f21\u0f21", "\u0f21\u0f22"}[int(t.Month())-1]
614+
return monthNamesTibetanAbbr[int(t.Month())-1]
575615
}
576616
if abbr == 5 {
577617
if t.Month() == 10 {
@@ -585,41 +625,34 @@ func localMonthsNameTibetan(t time.Time, abbr int) string {
585625
// localMonthsNameTurkish returns the Turkish name of the month.
586626
func localMonthsNameTurkish(t time.Time, abbr int) string {
587627
if abbr == 3 {
588-
return string([]rune(monthNamesTurkish[int(t.Month())-1])[:3])
628+
return monthNamesTurkishAbbr[int(t.Month())-1]
589629
}
590630
if abbr == 4 {
591631
return monthNamesTurkish[int(t.Month())-1]
592632
}
593-
return string([]rune(monthNamesTurkish[int(t.Month())-1])[:1])
633+
return string([]rune(monthNamesTurkishAbbr[int(t.Month())-1])[:1])
594634
}
595635

596636
// localMonthsNameWelsh returns the Welsh name of the month.
597637
func localMonthsNameWelsh(t time.Time, abbr int) string {
598638
if abbr == 3 {
599-
switch int(t.Month()) {
600-
case 2, 7:
601-
return monthNamesWelsh[int(t.Month())-1][:5]
602-
case 8, 9, 11, 12:
603-
return monthNamesWelsh[int(t.Month())-1][:4]
604-
default:
605-
return monthNamesWelsh[int(t.Month())-1][:3]
606-
}
639+
return monthNamesWelshAbbr[int(t.Month())-1]
607640
}
608641
if abbr == 4 {
609642
return monthNamesWelsh[int(t.Month())-1]
610643
}
611-
return string([]rune(monthNamesWelsh[int(t.Month())-1])[:1])
644+
return monthNamesWelshAbbr[int(t.Month())-1][:1]
612645
}
613646

614647
// localMonthsNameVietnamese returns the Vietnamese name of the month.
615648
func localMonthsNameVietnamese(t time.Time, abbr int) string {
616649
if abbr == 3 {
617-
return "Thg " + strconv.Itoa(int(t.Month()))
650+
return monthNamesVietnameseAbbr3[int(t.Month()-1)]
618651
}
619652
if abbr == 5 {
620-
return "T " + strconv.Itoa(int(t.Month()))
653+
return monthNamesVietnameseAbbr5[int(t.Month()-1)]
621654
}
622-
return "Tháng " + strconv.Itoa(int(t.Month()))
655+
return monthNamesVietnamese[int(t.Month()-1)]
623656
}
624657

625658
// localMonthsNameWolof returns the Wolof name of the month.
@@ -647,23 +680,20 @@ func localMonthsNameXhosa(t time.Time, abbr int) string {
647680
// localMonthsNameYi returns the Yi name of the month.
648681
func localMonthsNameYi(t time.Time, abbr int) string {
649682
if abbr == 3 || abbr == 4 {
650-
return string(monthNamesYi[int(t.Month())-1]) + "\ua1aa"
683+
return monthNamesYiSuffix[int(t.Month()-1)]
651684
}
652685
return string([]rune(monthNamesYi[int(t.Month())-1])[:1])
653686
}
654687

655688
// localMonthsNameZulu returns the Zulu name of the month.
656689
func localMonthsNameZulu(t time.Time, abbr int) string {
657690
if abbr == 3 {
658-
if int(t.Month()) == 8 {
659-
return string([]rune(monthNamesZulu[int(t.Month())-1])[:4])
660-
}
661-
return string([]rune(monthNamesZulu[int(t.Month())-1])[:3])
691+
return monthNamesZuluAbbr[int(t.Month()-1)]
662692
}
663693
if abbr == 4 {
664694
return monthNamesZulu[int(t.Month())-1]
665695
}
666-
return string([]rune(monthNamesZulu[int(t.Month())-1])[:1])
696+
return monthNamesZuluAbbr[int(t.Month())-1][:1]
667697
}
668698

669699
// localMonthName return months name by supported language ID.

0 commit comments

Comments
 (0)