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") }