gohugoio/hugo · error

language name cannot be empty

Error message

language name cannot be empty

What it means

Raised in LanguagesInternal.init (langs/config.go:155) when a key in the languages config map is the empty string. Language keys become path segments, filesystem identifiers, and lookup keys throughout Hugo, so an empty language name is unusable and rejected outright during config compilation.

Source

Thrown at langs/config.go:155

		if defaultContentLanguage == "" {
			defaultContentLanguage = en
		}
		ls.LanguageConfigs[defaultContentLanguage] = LanguageConfig{}
	}

	var (
		defaultSeen bool
		enIdx       int = -1
	)
	for k, v := range ls.LanguageConfigs {
		if !v.Disabled && slices.Contains(disabledLanguages, k) {
			// This language is disabled.
			v.Disabled = true
			ls.LanguageConfigs[k] = v
		}

		if k == "" {
			return "", errors.New("language name cannot be empty")
		}

		if err := paths.ValidateIdentifier(k); err != nil {
			return "", fmt.Errorf("language name %q is invalid: %s", k, err)
		}

		var isDefault bool
		if k == defaultContentLanguage {
			isDefault = true
			defaultSeen = true
		}

		if isDefault && v.Disabled {
			return "", fmt.Errorf("default language %q is disabled", k)
		}

		if !v.Disabled {
			ls.Sorted = append(ls.Sorted, LanguageInternal{Name: k, Default: isDefault, LanguageConfig: v})

View on GitHub ↗ (pinned to 8a468df065)

Solutions

  1. Find and remove or rename the empty key in the `languages` section of your config.
  2. If the config is generated, guard the generator so the language key variable is non-empty before writing.
  3. Validate merged config with `hugo config | grep -A5 languages` after fixing.

Example fix

# before (hugo.yaml)
languages:
  "": 
    label: English
# after
languages:
  en:
    label: English
Defensive patterns

Strategy: validation

Validate before calling

// Reject empty language keys before passing config to Hugo
for lang := range cfg.GetStringMap("languages") {
    if strings.TrimSpace(lang) == "" {
        return errors.New("empty language key in [languages]")
    }
}

Prevention

When it happens

Trigger: A `languages` config map containing an empty-string key — e.g. YAML `languages: { "": {...} }`, a templated/generated config emitting an empty key, or programmatic config (config.Provider.Set) inserting an empty language name.

Common situations: Generated or scripted configs (environment substitution producing an empty value for the language key), YAML quirks where a key resolves to empty, or accidental stray entries when restructuring a multilingual config.

Related errors


AI-assisted analysis of gohugoio/hugo@8a468df065 (2026-07-31). Data as JSON: /data/errors/ee3ced071a4fb2c1.json. Report an issue: GitHub ↗.