tools: align locale diagnostics and generate native language names
Validate / Validate (push) Successful in 2m46s

This commit is contained in:
KenanZhu committed 2026-10-14 00:01:40 +08:00
1 parent b8089e8a7e
commit d99c5d1dc5
13 files changed
+170 -46

No files matched your search

+43
View File
@@ -0,0 +1,43 @@
package logging
import (
"fmt"
"sort"
"strings"
)
// WarnMissingTranslations groups missing keys without wrapping long key lists.
func WarnMissingTranslations(missing map[string][]string) {
if message := missingTranslations(missing); message != "" {
Warn("Locale", "%s", message)
}
}
func missingTranslations(missing map[string][]string) string {
languages := make([]string, 0, len(missing))
width := len("Language")
for lang, keys := range missing {
if len(keys) > 0 {
languages = append(languages, lang)
width = max(width, len(lang))
}
}
if len(languages) == 0 {
return ""
}
sort.Strings(languages)
var message strings.Builder
fmt.Fprintf(&message, "Missing translation keys:\n%-*s %-8s %s\n", width, "Language", "Fallback", "Key")
for _, lang := range languages {
keys := append([]string(nil), missing[lang]...)
sort.Strings(keys)
for i, key := range keys {
label, fallback := "", ""
if i == 0 {
label, fallback = lang, "en-US"
}
fmt.Fprintf(&message, "%-*s %-8s %s\n", width, label, fallback, key)
}
}
return strings.TrimSuffix(message.String(), "\n")
}