langs/i18n: Add workaround for known language, but missing plural rule error
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 8 Oct 2020 08:21:23 +0000 (10:21 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 8 Oct 2020 12:20:18 +0000 (14:20 +0200)
Closes #7798

langs/i18n/i18n_test.go
langs/i18n/translationProvider.go

index baf16d4a64f1adfa790bc7c742c9e7bec1a52d4b..10570a4e34a77ea007c1fec624bd9ee243212f06 100644 (file)
@@ -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)
                        })
                }
index e478609c20cc94b3d94c34a7721accf2f775ce3d..07bd9219abc70ddcc24e9d29c90fd70016dce5a6 100644 (file)
@@ -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)
        }