From 33e9d79b78b32d0cc19693ab3c29ba9941d80f8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 8 Oct 2020 10:21:23 +0200 Subject: [PATCH] langs/i18n: Add workaround for known language, but missing plural rule error Closes #7798 --- langs/i18n/i18n_test.go | 15 ++++++++++++++- langs/i18n/translationProvider.go | 9 +++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/langs/i18n/i18n_test.go b/langs/i18n/i18n_test.go index baf16d4a6..10570a4e3 100644 --- a/langs/i18n/i18n_test.go +++ b/langs/i18n/i18n_test.go @@ -199,6 +199,19 @@ other = "{{ .Count }} minuttar lesing"`), expected: "3 minuttar lesing", expectedFlag: "3 minuttar lesing", }, + // https://github.com/gohugoio/hugo/issues/7798 + { + name: "known-language-missing-plural", + data: map[string][]byte{ + "oc.toml": []byte(`[oc] +one = "abc"`), + }, + args: 1, + lang: "oc", + id: "oc", + expected: "abc", + expectedFlag: "abc", + }, // https://github.com/gohugoio/hugo/issues/7794 { name: "dotted-bare-key", @@ -292,7 +305,7 @@ func TestI18nTranslate(t *testing.T) { } else { expected = test.expected } - actual = doTestI18nTranslate(t, test, v) + actual = doTestI18nTranslate(c, test, v) c.Assert(actual, qt.Equals, expected) }) } diff --git a/langs/i18n/translationProvider.go b/langs/i18n/translationProvider.go index e478609c2..07bd9219a 100644 --- a/langs/i18n/translationProvider.go +++ b/langs/i18n/translationProvider.go @@ -15,6 +15,7 @@ package i18n import ( "encoding/json" + "strings" "github.com/gohugoio/hugo/common/herrors" "golang.org/x/text/language" @@ -95,6 +96,14 @@ func addTranslationFile(bundle *i18n.Bundle, r source.File) error { _, err = bundle.ParseMessageFileBytes(b, name) if err != nil { + if strings.Contains(err.Error(), "no plural rule") { + // https://github.com/gohugoio/hugo/issues/7798 + name = artificialLangTagPrefix + name + _, err = bundle.ParseMessageFileBytes(b, name) + if err == nil { + return nil + } + } return errWithFileContext(_errors.Wrapf(err, "failed to load translations"), r) }