44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
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")
|
|
}
|