diff --git a/locale.go b/locale.go index 923bf8d..c9575c8 100644 --- a/locale.go +++ b/locale.go @@ -200,7 +200,10 @@ func (l *Locale) GetND(dom, str, plural string, n int, vars ...interface{}) stri } } - // Return the same we received by default + // Use western default rule (plural > 1) to handle missing domain default result. + if n == 1 { + return Printf(str, vars...) + } return Printf(plural, vars...) } @@ -237,7 +240,10 @@ func (l *Locale) GetNDC(dom, str, plural string, n int, ctx string, vars ...inte } } - // Return the same we received by default + // Use western default rule (plural > 1) to handle missing domain default result. + if n == 1 { + return Printf(str, vars...) + } return Printf(plural, vars...) } diff --git a/locale_test.go b/locale_test.go index 11b6350..7e0addb 100644 --- a/locale_test.go +++ b/locale_test.go @@ -255,6 +255,11 @@ msgstr "More Translation" } tr = l.GetN("This is a test", "This are tests", 1) + if tr != "This is a test" { + t.Errorf("Expected 'This is a test' but got '%s'", tr) + } + + tr = l.GetN("This is a test", "This are tests", 7) if tr != "This are tests" { t.Errorf("Expected 'This are tests' but got '%s'", tr) } @@ -266,8 +271,12 @@ msgstr "More Translation" } tr = l.GetN("This one has invalid syntax translations", "This are tests", 1) + if tr != "This one has invalid syntax translations" { + t.Errorf("Expected 'This one has invalid syntax translations' but got '%s'", tr) + } + tr = l.GetN("This one has invalid syntax translations", "This are tests", 2) if tr != "This are tests" { - t.Errorf("Expected 'Plural index' but got '%s'", tr) + t.Errorf("Expected 'This are tests' but got '%s'", tr) } // Create Locale with full language code @@ -292,8 +301,12 @@ msgstr "More Translation" } tr = l.GetN("This one has invalid syntax translations", "This are tests", 1) + if tr != "This one has invalid syntax translations" { + t.Errorf("Expected 'This one has invalid syntax translations' but got '%s'", tr) + } + tr = l.GetN("This one has invalid syntax translations", "This are tests", 111) if tr != "This are tests" { - t.Errorf("Expected 'Plural index' but got '%s'", tr) + t.Errorf("Expected 'This are tests' but got '%s'", tr) } // Create Locale with full language code @@ -318,8 +331,12 @@ msgstr "More Translation" } tr = l.GetN("This one has invalid syntax translations", "This are tests", 1) + if tr != "This one has invalid syntax translations" { + t.Errorf("Expected 'This one has invalid syntax translations' but got '%s'", tr) + } + tr = l.GetN("This one has invalid syntax translations", "This are tests", 21) if tr != "This are tests" { - t.Errorf("Expected 'Plural index' but got '%s'", tr) + t.Errorf("Expected 'This are tests' but got '%s'", tr) } // Create Locale with full language code @@ -344,8 +361,12 @@ msgstr "More Translation" } tr = l.GetN("This one has invalid syntax translations", "This are tests", 1) + if tr != "This one has invalid syntax translations" { + t.Errorf("Expected 'This one has invalid syntax translations' but got '%s'", tr) + } + tr = l.GetN("This one has invalid syntax translations", "This are tests", 2) if tr != "This are tests" { - t.Errorf("Expected 'Plural index' but got '%s'", tr) + t.Errorf("Expected 'This are tests' but got '%s'", tr) } // Create Locale with full language code @@ -376,8 +397,12 @@ msgstr "More Translation" } tr = l.GetN("This one has invalid syntax translations", "This are tests", 1) + if tr != "This one has invalid syntax translations" { + t.Errorf("Expected 'This one has invalid syntax translations' but got '%s'", tr) + } + tr = l.GetN("This one has invalid syntax translations", "This are tests", 14) if tr != "This are tests" { - t.Errorf("Expected 'Plural index' but got '%s'", tr) + t.Errorf("Expected 'This are tests' but got '%s'", tr) } } diff --git a/po.go b/po.go index 4754924..368672a 100644 --- a/po.go +++ b/po.go @@ -365,7 +365,7 @@ func (po *Po) pluralForm(n int) int { // Failure fallback if po.pluralforms == nil { - /* Use the Germanic plural rule. */ + /* Use Western plural rule. */ if n == 1 { return 0 } @@ -404,7 +404,8 @@ func (po *Po) GetN(str, plural string, n int, vars ...interface{}) string { } } - if n == 1 { + // Parse plural forms to distinguish between plural and singular + if po.pluralForm(n) == 0 { return Printf(str, vars...) } return Printf(plural, vars...) @@ -448,7 +449,8 @@ func (po *Po) GetNC(str, plural string, n int, ctx string, vars ...interface{}) } } - if n == 1 { + // Parse plural forms to distinguish between plural and singular + if po.pluralForm(n) == 0 { return Printf(str, vars...) } return Printf(plural, vars...)