{"record":{"id":"8781e61cdd7ae5a5","repo":"gohugoio/hugo","slug":"language-merge-not-supported-for-t","errorCode":null,"errorMessage":"language merge not supported for %T","messagePattern":"language merge not supported for %T","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"tpl/lang/lang.go","lineNumber":246,"sourceCode":"\n\treturn string(b), nil\n}\n\ntype pagesLanguageMerger interface {\n\tMergeByLanguageInterface(other any) (any, error)\n}\n\n// Merge creates a union of pages from two languages.\nfunc (ns *Namespace) Merge(p2, p1 any) (any, error) {\n\tif !hreflect.IsTruthful(p1) {\n\t\treturn p2, nil\n\t}\n\tif !hreflect.IsTruthful(p2) {\n\t\treturn p1, nil\n\t}\n\tmerger, ok := p1.(pagesLanguageMerger)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"language merge not supported for %T\", p1)\n\t}\n\treturn merger.MergeByLanguageInterface(p2)\n}\n","sourceCodeStart":228,"sourceCodeEnd":250,"githubUrl":"https://github.com/gohugoio/hugo/blob/52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2/tpl/lang/lang.go#L228-L250","documentation":"lang.Merge requires the second argument (p1) to implement the pagesLanguageMerger interface (a Hugo Pages method, MergeByLanguageInterface). Any type that does not satisfy that interface is rejected. See lang.go:244-247.","triggerScenarios":"{{ lang.Merge $sliceA $sliceB }} where the second value is a plain slice, map, or custom collection rather than a Hugo Pages object.","commonSituations":"Attempting to merge arbitrary slices or maps; passing a regular page instead of a Pages collection; refactoring that changed the value type.","solutions":["Only call lang.Merge on Hugo Pages collections.","For custom slices or maps, build the union manually in the template or Go code.","Ensure the second argument is the Pages object returned by a page lookup (.Pages, .RegularPages, etc.)."],"exampleFix":"// before\n{{ lang.Merge $mySlice $otherSlice }}\n\n// after\n{{ lang.Merge .Pages $defaultPages }}","handlingStrategy":"type-guard","validationCode":"// Verify the value can be merged before calling lang.Merge.\ntype pagesLanguageMerger interface { MergeByLanguageInterface(other any) (any, error) }\nif _, ok := p1.(pagesLanguageMerger); !ok {\n    return fmt.Errorf(\"type %T cannot be language-merged\", p1)\n}","typeGuard":"func isPagesLanguageMerger(v any) bool {\n    _, ok := v.(interface{ MergeByLanguageInterface(any) (any, error) })\n    return ok\n}","tryCatchPattern":null,"preventionTips":["Only merge Hugo Pages collections, not arbitrary slices or maps.","Build custom unions manually for non-Pages data."],"tags":["hugo","lang","i18n","pages","merge","type-error"],"backgroundTag":null,"analyzedSha":"52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2","analyzedAt":"2026-08-09T21:49:36.660Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}