diff --git a/hugolib/hugo_sites_multihost_test.go b/hugolib/hugo_sites_multihost_test.go index a9aad67b22d..4b779ee9216 100644 --- a/hugolib/hugo_sites_multihost_test.go +++ b/hugolib/hugo_sites_multihost_test.go @@ -162,6 +162,52 @@ title: "Mybundle fr" b.AssertFileContent("public/fr/section/mybundle/styles.min.css", ".body{color:french}") } +func TestResourcePerLanguageIssue12163(t *testing.T) { + files := ` +-- hugo.toml -- +defaultContentLanguage = 'de' +disableKinds = ['rss','sitemap','taxonomy','term'] + +[languages.de] +baseURL = 'https://de.example.org/' +contentDir = 'content/de' +weight = 1 + +[languages.en] +baseURL = 'https://en.example.org/' +contentDir = 'content/en' +weight = 2 +-- content/de/mybundle/index.md -- +--- +title: mybundle-de +--- +-- content/de/mybundle/pixel.png -- +iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg== +-- content/en/mybundle/index.md -- +--- +title: mybundle-en +--- +-- layouts/_default/single.html -- +{{ with .Resources.Get "pixel.png" }} + {{ with .Resize "2x2" }} + {{ .RelPermalink }}| + {{ end }} +{{ end }} +` + + b := Test(t, files) + + b.AssertFileExists("public/de/mybundle/index.html", true) + b.AssertFileExists("public/en/mybundle/index.html", true) + + b.AssertFileExists("public/de/mybundle/pixel.png", true) + b.AssertFileExists("public/en/mybundle/pixel.png", true) + + b.AssertFileExists("public/de/mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_2x2_resize_box_3.png", true) + // failing test below + b.AssertFileExists("public/en/mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_2x2_resize_box_3.png", true) +} + func TestMultihostResourceOneBaseURLWithSuPath(t *testing.T) { files := ` -- hugo.toml -- diff --git a/resources/image_cache.go b/resources/image_cache.go index f9770ffc111..d824c5d1a06 100644 --- a/resources/image_cache.go +++ b/resources/image_cache.go @@ -39,7 +39,16 @@ func (c *ImageCache) getOrCreate( ) (*resourceAdapter, error) { relTarget := parent.relTargetPathFromConfig(conf) relTargetPath := relTarget.TargetPath() - memKey := dynacache.CleanKey(relTargetPath) + memKey := relTargetPath + + // For multihost sites, we duplicate language versions of the same resource, + // so we need to include the language in the key. + // Note that we don't need to include the language in the file cache key, + // as the hash will take care of any different content. + if c.pathSpec.Cfg.IsMultihost() { + memKey = c.pathSpec.Lang() + memKey + } + memKey = dynacache.CleanKey(memKey) v, err := c.mcache.GetOrCreate(memKey, func(key string) (*resourceAdapter, error) { var img *imageResource