diff --git a/tpl/strings/strings.go b/tpl/strings/strings.go index b2f02d8f5..ac2defed5 100644 --- a/tpl/strings/strings.go +++ b/tpl/strings/strings.go @@ -17,6 +17,7 @@ package strings import ( "errors" "html/template" + "regexp" "strings" "unicode/utf8" @@ -75,6 +76,15 @@ func (ns *Namespace) CountWords(s interface{}) (int, error) { return 0, _errors.Wrap(err, "Failed to convert content to string") } + isCJKLanguage, err := regexp.MatchString(`\p{Han}|\p{Hangul}|\p{Hiragana}|\p{Katakana}`, ss) + if err != nil { + return 0, _errors.Wrap(err, "Failed to match regex pattern against string") + } + + if !isCJKLanguage { + return len(strings.Fields(helpers.StripHTML((ss)))), nil + } + counter := 0 for _, word := range strings.Fields(helpers.StripHTML(ss)) { runeCount := utf8.RuneCountInString(word) diff --git a/tpl/strings/strings_test.go b/tpl/strings/strings_test.go index f3bb82c63..6e14a408c 100644 --- a/tpl/strings/strings_test.go +++ b/tpl/strings/strings_test.go @@ -210,6 +210,9 @@ func TestCountWords(t *testing.T) { {"Do Be Do Be Do", 5}, {"旁边", 2}, {`
旁边
`, 2}, + {"Here's to you...", 3}, + {"Here’s to you...", 3}, + {"Here’s to you…", 3}, // errors {tstNoStringer{}, false}, } {