mirror of
https://github.com/TecharoHQ/anubis.git
synced 2025-08-03 17:59:24 -04:00

* feat(localization): Add Filipino language * Add tests * remove duplicated string * Minor fixes in translation Signed-off-by: searingmoonlight <scripterrookie12@gmail.com> --------- Signed-off-by: searingmoonlight <scripterrookie12@gmail.com>
119 lines
2.6 KiB
Go
119 lines
2.6 KiB
Go
package localization
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/nicksnyder/go-i18n/v2/i18n"
|
|
)
|
|
|
|
func TestLocalizationService(t *testing.T) {
|
|
service := NewLocalizationService()
|
|
|
|
loadingStrMap := map[string]string{
|
|
"de": "Ladevorgang...",
|
|
"en": "Loading...",
|
|
"es": "Cargando...",
|
|
"et": "Laadin...",
|
|
"fil": "Naglo-load...",
|
|
"fr": "Chargement...",
|
|
"ja": "ロード中...",
|
|
"is": "Hleður...",
|
|
"pt-BR": "Carregando...",
|
|
"tr": "Yükleniyor...",
|
|
"zh-CN": "加载中...",
|
|
"zh-TW": "載入中...",
|
|
}
|
|
|
|
for lang, expected := range loadingStrMap {
|
|
t.Run(fmt.Sprintf("%s localization", lang), func(t *testing.T) {
|
|
localizer := service.GetLocalizer(lang)
|
|
result := localizer.MustLocalize(&i18n.LocalizeConfig{MessageID: "loading"})
|
|
if result != expected {
|
|
t.Errorf("Expected '%s', got '%s'", expected, result)
|
|
}
|
|
})
|
|
}
|
|
|
|
// Test for requiredKeys localization
|
|
requiredKeys := []string{
|
|
"loading", "why_am_i_seeing", "protected_by", "made_with",
|
|
"mascot_design", "try_again", "go_home", "javascript_required",
|
|
}
|
|
|
|
for lang := range loadingStrMap {
|
|
t.Run(fmt.Sprintf("All required keys exist in %s", lang), func(t *testing.T) {
|
|
loc := service.GetLocalizer(lang)
|
|
for _, key := range requiredKeys {
|
|
result := loc.MustLocalize(&i18n.LocalizeConfig{MessageID: key})
|
|
if result == "" {
|
|
t.Errorf("Key '%s' returned empty string", key)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
type manifest struct {
|
|
SupportedLanguages []string `json:"supported_languages"`
|
|
}
|
|
|
|
func loadManifest(t *testing.T) manifest {
|
|
t.Helper()
|
|
|
|
fin, err := localeFS.Open("locales/manifest.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer fin.Close()
|
|
|
|
var result manifest
|
|
if err := json.NewDecoder(fin).Decode(&result); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func TestComprehensiveTranslations(t *testing.T) {
|
|
service := NewLocalizationService()
|
|
|
|
var translations = map[string]any{}
|
|
fin, err := localeFS.Open("locales/en.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer fin.Close()
|
|
|
|
if err := json.NewDecoder(fin).Decode(&translations); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var keys []string
|
|
for k := range translations {
|
|
keys = append(keys, k)
|
|
}
|
|
|
|
sort.Strings(keys)
|
|
|
|
for _, lang := range loadManifest(t).SupportedLanguages {
|
|
t.Run(lang, func(t *testing.T) {
|
|
loc := service.GetLocalizer(lang)
|
|
sl := SimpleLocalizer{Localizer: loc}
|
|
service_lang := sl.GetLang()
|
|
if service_lang != lang {
|
|
t.Error("Localizer language not same as specified")
|
|
}
|
|
for _, key := range keys {
|
|
t.Run(key, func(t *testing.T) {
|
|
if result := sl.T(key); result == "" {
|
|
t.Error("key not defined")
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|