diff options
Diffstat (limited to 'src/i18n/i18n.go')
-rw-r--r-- | src/i18n/i18n.go | 68 |
1 files changed, 41 insertions, 27 deletions
diff --git a/src/i18n/i18n.go b/src/i18n/i18n.go index b996681..cf82630 100644 --- a/src/i18n/i18n.go +++ b/src/i18n/i18n.go @@ -72,7 +72,7 @@ var ( Name: "Ελληνικά", DateFormat: "2/1/2006", Eurozone: true, - Enabled: true, + Enabled: false, GroupSeparator: '.', DecimalSeparator: ',', MonetaryPre: [2]string{"", "-"}, @@ -212,7 +212,7 @@ var ( Name: "Nederlands", DateFormat: "2-1-2006", Eurozone: true, - Enabled: true, + Enabled: false, GroupSeparator: '.', DecimalSeparator: ',', MonetaryPre: [2]string{"€ ", "€ -"}, @@ -254,7 +254,7 @@ var ( Name: "Svenska", DateFormat: "2006-01-02", Eurozone: true, - Enabled: false, + Enabled: true, GroupSeparator: ' ', DecimalSeparator: ',', MonetaryPre: [2]string{"", "-"}, @@ -266,23 +266,13 @@ var ( Name: "Български", DateFormat: "2.01.2006 г.", Eurozone: false, /* TODO(2026): Set to true */ - Enabled: true, + Enabled: false, GroupSeparator: ' ', DecimalSeparator: ',', MonetaryPre: [2]string{"", "-"}, MonetaryPost: " €", }, { - Bcp: "en-US", - Name: "English (US)", - DateFormat: "1/2/2006", - Eurozone: false, - Enabled: false, - GroupSeparator: ',', - DecimalSeparator: '.', - MonetaryPre: [2]string{"€", "-€"}, - }, - { Bcp: "ro", Name: "Română", DateFormat: "02.01.2006", @@ -305,9 +295,6 @@ var ( MonetaryPost: " €", }, } - /* Map of language codes to printers. We do this instead of just - using language.MustParse() directly so that we can easily see if a - language is supported or not. */ Printers map[string]Printer = make(map[string]Printer, len(locales)) DefaultPrinter Printer ) @@ -317,7 +304,9 @@ func Init() { if !li.Enabled { continue } - Printers[li.Bcp] = Printer{li, gotext.NewLocale("po", li.Bcp)} + gl := gotext.NewLocale("po", li.Bcp) + gl.AddDomain("messages") + Printers[li.Bcp] = Printer{li, gl} } DefaultPrinter = Printers["en"] @@ -340,10 +329,35 @@ func (l LocaleInfo) Language() string { return l.Bcp[:2] } +func (p Printer) Itoa(n int) string { + var bob strings.Builder + writeInt(&bob, n, p.LocaleInfo) + return bob.String() +} + +func (p Printer) Ftoa(n float64) string { + var bob strings.Builder + writeFloat(&bob, n, p.LocaleInfo) + return bob.String() +} + +func (p Printer) Mitoa(n int) string { + var bob strings.Builder + sprintfm(p.LocaleInfo, &bob, n) + return bob.String() +} + +func (p Printer) Mftoa(n float64) string { + var bob strings.Builder + sprintfm(p.LocaleInfo, &bob, n) + return bob.String() +} + func (p Printer) Sprintf(format string, args ...map[string]any) string { var bob strings.Builder vars := map[string]any{ "-": "a", + "Null": "", } for _, arg := range args { maps.Copy(vars, arg) @@ -410,9 +424,9 @@ func sprintfGeneric(li LocaleInfo, bob *strings.Builder, v any) error { case time.Time: htmlesc(bob, v.(time.Time).Format(li.DateFormat)) case int: - writeInt(bob, v.(int), li.GroupSeparator) + writeInt(bob, v.(int), li) case float64: - writeFloat(bob, v.(float64), li.GroupSeparator, li.DecimalSeparator) + writeFloat(bob, v.(float64), li) case string: htmlesc(bob, v.(string)) default: @@ -474,12 +488,12 @@ func sprintfm(li LocaleInfo, bob *strings.Builder, v any) error { case int: n := v.(int) htmlesc(bob, li.MonetaryPre[btoi(n >= 0)]) - writeInt(bob, abs(n), li.GroupSeparator) + writeInt(bob, abs(n), li) htmlesc(bob, li.MonetaryPost) case float64: n := v.(float64) htmlesc(bob, li.MonetaryPre[btoi(n >= 0)]) - writeFloat(bob, abs(n), li.GroupSeparator, li.DecimalSeparator) + writeFloat(bob, abs(n), li) htmlesc(bob, li.MonetaryPost) default: return errors.New("TODO") @@ -496,7 +510,7 @@ func sprintfr(li LocaleInfo, bob *strings.Builder, v any) error { return nil } -func writeInt(bob *strings.Builder, num int, sep rune) { +func writeInt(bob *strings.Builder, num int, li LocaleInfo) { s := fmt.Sprintf("%d", num) if s[0] == '-' { bob.WriteByte('-') @@ -511,13 +525,13 @@ func writeInt(bob *strings.Builder, num int, sep rune) { c++ bob.WriteByte(s[i]) if c == 3 && i+1 < n { - bob.WriteRune(sep) + bob.WriteRune(li.GroupSeparator) c = 0 } } } -func writeFloat(bob *strings.Builder, num float64, tsep, dsep rune) { +func writeFloat(bob *strings.Builder, num float64, li LocaleInfo) { s := fmt.Sprintf("%.2f", num) if s[0] == '-' { bob.WriteByte('-') @@ -533,12 +547,12 @@ func writeFloat(bob *strings.Builder, num float64, tsep, dsep rune) { c++ bob.WriteByte(s[i]) if c == 3 && i+1 < n { - bob.WriteRune(tsep) + bob.WriteRune(li.GroupSeparator) c = 0 } } - bob.WriteRune(dsep) + bob.WriteRune(li.DecimalSeparator) bob.WriteString(s[n+1:]) } |