gohugoio/hugo · error
invalid language configuration for
Error message
invalid language configuration for %q
What it means
Returned by Configs.Init when iterating over c.Base.Languages.Config.Sorted and a language name is not found in LanguageConfigMap. The sorted list is the source of truth for declared languages; a missing entry means the language was declared in one structure but never materialized in the per-language config map, leaving Init unable to construct a langs.Language.
Solutions
- Ensure every entry under `languages` has a matching per-language config block.
- Re-check environment overrides (--environment) for partial language removal.
- Disable the language cleanly via `disableLanguages` rather than deleting its block.
- Run `hugo config --format toml` to dump and inspect the merged languages map.
Example fix
// before [languages.en] weight = 1 # (no [languages.fr] block but fr referenced elsewhere) // after [languages.en] weight = 1 [languages.fr] weight = 2
Defensive patterns
Strategy: validation
Validate before calling
func languagesConsistent(sorted []langSorted, m map[string]*langConfig) error {
for _, f := range sorted { if _, ok := m[f.Name]; !ok { return fmt.Errorf("language %q declared but not configured", f.Name) } }
return nil
} Prevention
- Keep every `languages.<code>` block paired with its config entry.
- Disable languages via disableLanguages instead of deleting blocks.
- After merging overlays, run `hugo config` to verify the languages map.
When it happens
Trigger: An inconsistency between the languages sorted list (typically populated from the `languages` config block) and LanguageConfigMap (built during config decode). Caused by partial config overrides, a custom config loader that mutates one structure but not the other, or a bug in a Hugo module that reorders languages.
Common situations: Multi-language sites with environment-specific config overlays that drop a language definition; theme+project config merges where the theme declares a language the project does not; experimental Hugo versions where the matrix/roles feature reshapes language config.
Related errors
- failed to decode config for language
- failed to decode languages config
- language name cannot be empty
- failed to compile ignoreFiles pattern
- failed to create config
AI-assisted analysis of gohugoio/hugo@52c9bd7908 (2026-08-09).
Data as JSON: /api/errors/03528e5b371e92e3.
Report an issue: GitHub.
Appendix: source
Thrown at config/allconfig/allconfig.go:877
if l.C.transientErr != nil {
return l.C.transientErr
}
}
return nil
}
func (c *Configs) IsZero() bool {
// A config always has at least one language.
return c == nil || len(c.Languages) == 0
}
func (c *Configs) Init(sourceFs afero.Fs, logger loggers.Logger) error {
var languages langs.Languages
for _, f := range c.Base.Languages.Config.Sorted {
v, found := c.LanguageConfigMap[f.Name]
if !found {
return fmt.Errorf("invalid language configuration for %q", f.Name)
}
language, err := langs.NewLanguage(f.Name, c.Base.DefaultContentLanguage, v.TimeZone, f.LanguageConfig, logger)
if err != nil {
return err
}
languages = append(languages, language)
}
// Filter out disabled languages.
var n int
for _, l := range languages {
if !l.Disabled {
languages[n] = l
n++
}
}
languages = languages[:n]
View on GitHub (pinned to 52c9bd7908)