hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 85d31f7bfb7a13c9ab7655829a315a820dc1b403
parent 22055176d23417ac9039f14efdc668ed6cc6a7b9
Author: Paul Gottschling <paul.gottschling@gmail.com>
Date:   Fri, 14 Jan 2022 16:08:11 -0500

Fix .RenderString issue in .Translations

Fixes #9383

Diffstat:
Mhugolib/page.go | 14+++++++++++++-
Mhugolib/page_test.go | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mresources/page/page_lazy_contentprovider.go | 5+++++
3 files changed, 81 insertions(+), 1 deletion(-)
diff --git a/hugolib/page.go b/hugolib/page.go
@@ -635,7 +635,19 @@ func (p *pageState) RenderString(args ...interface{}) (template.HTML, error) {
 		}
 	}
 
-	c, err := p.pageOutput.cp.renderContentWithConverter(conv, []byte(s), false)
+	var cp *pageContentOutput
+
+	// If the current content provider is not yet initialized, do so now.
+	if lcp, ok := p.pageOutput.ContentProvider.(*page.LazyContentProvider); ok {
+		c := lcp.Init()
+		if pco, ok := c.(*pageContentOutput); ok {
+			cp = pco
+		}
+	} else {
+		cp = p.pageOutput.cp
+	}
+
+	c, err := cp.renderContentWithConverter(conv, []byte(s), false)
 	if err != nil {
 		return "", p.wrapError(err)
 	}
diff --git a/hugolib/page_test.go b/hugolib/page_test.go
@@ -768,6 +768,69 @@ Here is the last report for commits in the year 2016. It covers hrev50718-hrev50
 `)
 }
 
+// Issue 9383
+func TestRenderStringForRegularPageTranslations(t *testing.T) {
+	c := qt.New(t)
+	b := newTestSitesBuilder(t)
+	b.WithLogger(loggers.NewBasicLoggerForWriter(jwalterweatherman.LevelDebug, os.Stderr))
+
+	b.WithConfigFile("toml",
+		`baseurl = "https://example.org/"
+title = "My Site"
+
+defaultContentLanguage = "ru"
+defaultContentLanguageInSubdir = true
+
+[languages.ru]
+contentDir = 'content/ru'
+weight = 1
+
+[languages.en]
+weight = 2
+contentDir = 'content/en'
+
+[outputs]
+home = ["HTML", "JSON"]`)
+
+	b.WithTemplates("index.html", `
+{{- range .Site.Home.Translations -}}
+	<p>{{- .RenderString "foo" -}}</p>
+{{- end -}}
+{{- range .Site.Home.AllTranslations -}}
+	<p>{{- .RenderString "bar" -}}</p>
+{{- end -}}
+`, "_default/single.html",
+		`{{ .Content }}`,
+		"index.json",
+		`{"Title": "My Site"}`,
+	)
+
+	b.WithContent(
+		"ru/a.md",
+		"",
+		"en/a.md",
+		"",
+	)
+
+	err := b.BuildE(BuildCfg{})
+	c.Assert(err, qt.Equals, nil)
+
+	b.AssertFileContent("public/ru/index.html", `
+<p>foo</p>
+<p>foo</p>
+<p>bar</p>
+<p>bar</p>
+`)
+
+	b.AssertFileContent("public/en/index.html", `
+<p>foo</p>
+<p>foo</p>
+<p>bar</p>
+<p>bar</p>
+`)
+
+}
+
 // Issue 8919
 func TestContentProviderWithCustomOutputFormat(t *testing.T) {
 	b := newTestSitesBuilder(t)
diff --git a/resources/page/page_lazy_contentprovider.go b/resources/page/page_lazy_contentprovider.go
@@ -49,6 +49,11 @@ func NewLazyContentProvider(f func() (ContentProvider, error)) *LazyContentProvi
 	return &lcp
 }
 
+func (lcp *LazyContentProvider) Init() ContentProvider {
+	lcp.init.Do()
+	return lcp.cp
+}
+
 func (lcp *LazyContentProvider) Reset() {
 	lcp.init.Reset()
 }