aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/i18n/i18n.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/i18n/i18n.go')
-rw-r--r--src/i18n/i18n.go68
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:])
}