Skip to content

Commit

Permalink
Update translations; add Chinese
Browse files Browse the repository at this point in the history
  • Loading branch information
arp242 committed Apr 9, 2024
1 parent 75a4241 commit db129ea
Show file tree
Hide file tree
Showing 11 changed files with 2,515 additions and 36 deletions.
47 changes: 47 additions & 0 deletions handlers/i18n.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"fmt"
"io/fs"
"net/http"
"slices"
"strings"
"time"

Expand All @@ -17,10 +18,13 @@ import (
"zgo.at/goatcounter/v2"
"zgo.at/guru"
"zgo.at/z18n/msgfile"
"zgo.at/zdb"
"zgo.at/zhttp"
"zgo.at/zhttp/mware"
"zgo.at/zlog"
"zgo.at/zstd/zfilepath"
"zgo.at/zstd/zfs"
"zgo.at/zstd/ztest"
)

type i18n struct {
Expand All @@ -42,6 +46,49 @@ func (h i18n) mount(r chi.Router) {
r.Post("/i18n", zhttp.Wrap(h.new))
r.Post("/i18n/set/{file}", zhttp.Wrap(h.set))
r.Post("/i18n/submit/{file}", zhttp.Wrap(h.submit))

a := r.With(mware.RequestLog(nil), requireAccess(goatcounter.AccessSuperuser))
a.Get("/i18n/manage", zhttp.Wrap(h.manage))
}

func (h i18n) manage(w http.ResponseWriter, r *http.Request) error {
var str []string
err := zdb.Select(r.Context(), &str, `select value from store where key like 'i18n-%'`)
if err != nil {
return err
}

all := make(goatcounter.OverrideTranslations, 0, len(str))
for _, a := range str {
var aa goatcounter.OverrideTranslations
err := aa.Decode(a)
if err != nil {
return err
}

for i, d := range aa {
t, err := d.File.TOML()
if err != nil {
return err
}
file, err := fs.ReadFile(goatcounter.Translations(r.Context()), d.Name)
aa[i].Diff = ztest.Diff(string(file), t)
if err != nil {
aa[i].Diff = fmt.Sprintf("%q doesn't exist", "i18n/"+d.Name)
}
aa[i].Diff = strings.ReplaceAll(aa[i].Diff, "-have ", "-cur ")
aa[i].Diff = strings.ReplaceAll(aa[i].Diff, "+want ", "+new ")
}

all = append(all, aa...)
}
slices.SortFunc(all, func(a, b goatcounter.OverrideTranslation) int { return strings.Compare(b.Updated, a.Updated) })
slices.SortFunc(all, func(a, b goatcounter.OverrideTranslation) int { return strings.Compare(a.Name, b.Name) })

return zhttp.Template(w, "i18n_manage.gohtml", struct {
Globals
Files goatcounter.OverrideTranslations
}{newGlobals(w, r), all})
}

func (h i18n) list(w http.ResponseWriter, r *http.Request) error {
Expand Down
6 changes: 3 additions & 3 deletions i18n.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ type OverrideTranslation struct {
Name string `json:"name"`
Updated string `json:"updated"`
File msgfile.File `json:"file"`
Diff string `json:"diff"`
}

type OverrideTranslations []OverrideTranslation
Expand Down Expand Up @@ -122,7 +123,7 @@ func (o OverrideTranslations) encode() (string, error) {
return string(j), err
}

func (o *OverrideTranslations) decode(data string) error {
func (o *OverrideTranslations) Decode(data string) error {
var w wrap
err := json.Unmarshal([]byte(data), &w)
if err != nil {
Expand All @@ -148,7 +149,6 @@ func (o *OverrideTranslations) decode(data string) error {
return nil
}

// Insert new.
func (o *OverrideTranslations) Insert(ctx context.Context) error {
t, err := o.encode()
if err != nil {
Expand Down Expand Up @@ -195,7 +195,7 @@ func (o *OverrideTranslations) Get(ctx context.Context, insert bool) error {
return errors.Wrap(err, "OverrideTranslations.Get")
}

err = o.decode(string(data))
err = o.Decode(string(data))
if err != nil {
return errors.Wrap(err, "OverrideTranslations.List")
}
Expand Down
2 changes: 1 addition & 1 deletion i18n/de-DE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
default = "löschen"

["button/delete-account"]
default = "Konto, alle Websites, alle Daten löschen"
default = "Konto, alle Websites und alle Daten löschen"

["button/delete-all"]
default = "Ja, wirklich alles löschen!"
Expand Down
15 changes: 10 additions & 5 deletions i18n/fr-FR.toml
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,9 @@
["data-collect/help/size"]
default = "Taille écran"

["data-collect/help/user-agent"]
default = 'En-tête "User-Agent" pour obtenir le nom et la version du navigateur et du système.'

["data-collect/label/country"]
default = "Pays"

Expand Down Expand Up @@ -393,6 +396,7 @@ Martin
default = "Pays"

["header/locations-for"]
default = "Emplacements pour: %(country)"

["header/mfa"]
default = "Authentification multi-facteur"
Expand All @@ -407,6 +411,7 @@ Martin
default = "Nouveau"

["header/pagination-cursor"]
default = "Curseur de pagination"

["header/passwd-mfa"]
default = "Mot de passe & MFA"
Expand Down Expand Up @@ -459,7 +464,7 @@ Martin
default = "Token"

["header/toprefs"]
default = "Principaux referrers"
default = "Principaux referers"

["header/tracking"]
default = "Suivi"
Expand Down Expand Up @@ -811,7 +816,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\
default = "Code source"

["nav-dash/back"]
default = "avant"
default = "reculer"

["nav-dash/by-day"]
default = "Vue par jour"
Expand All @@ -835,7 +840,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\
default = "Impossible d'utiliser la vue horaire pour une période de plus de 90 jours"

["nav-dash/forward"]
default = "après"
default = "avancer"

["nav-dash/half-year"]
default = "semestre"
Expand Down Expand Up @@ -934,7 +939,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\
default = "Site ‘%(url)’ supprimé."

["notify/started-background-process"]
default = "Démarrage en arrière-plan ; le traitement complet peut prendre de 10 à 20 secondes."
default = "Démarré en arrière-plan. Le traitement peut prendre 10-20 secondes avant de terminer."

["notify/user-added"]
default = "Utilisateur ‘%(email)’ ajouté."
Expand All @@ -956,7 +961,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\
default = "Autres erreurs"

["p/api-intro"]
default = "GoatCounter est livré avec une API limitée ; actuellement, vous pouvez compter les pages vues à partir de l'API, créer, supprimer et modifier des sites, et créer des exportations."
default = "GoatCounter inclut un API limité. Présentement, vous pouvez l'utiliser pour compter les pages vues, pour créer, supprimer et éditer vos sites, et pour exporter des données."

["p/change-code-request"]

Expand Down
15 changes: 9 additions & 6 deletions i18n/pl-PL.toml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@
default = "Zatwierdź"

["confirm/delete-user"]
default = "Usuń %(email)?"
default = "Usunąć %(email)?"

["dashboard/day-ago"]
default = "%(n) dni temu"
Expand Down Expand Up @@ -170,14 +170,17 @@
default = "Nagłówek Referer i parametr kampanii"

["data-collect/help/region"]
default = "Region, na przykład Texas, Bali, itd. Szczegóły różnią się w zależności od kraju."
default = "Region, na przykład Texas, Bali, itd. Poziom szczegółowości różnią się w zależności od kraju."

["data-collect/help/sessions"]
default = "Śledź pojedynczych odwiedzających do 8 godzin; jeśli wyłączysz tę funkcję, to ktoś wciskając np. F5, aby ponownie załadować stronę, zostanie policzony jako 2 odsłony zamiast 1"
default = "Grupuj odsłony pojedynczego odwiedzającego na przestrzeni 8 godzin; jeśli wyłączysz tę funkcję, to ktoś wciskając np. F5, aby ponownie załadować stronę, zostanie policzony jako 2 odsłony zamiast 1"

["data-collect/help/size"]
default = "Rozmiar ekranu."

["data-collect/help/user-agent"]
default = "Nagłówek User-Agent do zapisywania nazwy i wersji przeglądarki oraz systemu."

["data-collect/label/country"]
default = "Kraj"

Expand Down Expand Up @@ -342,7 +345,7 @@ Martin
default = "Pulpit"

["header/data-collection"]
default = "Zbieranie danych"
default = "Zbierane dane"

["header/delete-account"]
default = "Usuń konto"
Expand Down Expand Up @@ -393,7 +396,7 @@ Martin
default = "Kraje"

["header/locations-for"]
default = "Lokalizacje dla %(country)"
default = "%(country), regiony:"

["header/mfa"]
default = "Uwierzytelnianie wieloskładnikowe"
Expand Down Expand Up @@ -791,7 +794,7 @@ Weryfikacja odbywa się co 2 godziny.
default = "Ustaw z przeglądarki"

["link/settings"]
default = "ustawienia"
default = "Ustawienia"

["link/show-more"]
default = "Pokaż więcej"
Expand Down
Loading

0 comments on commit db129ea

Please sign in to comment.