diff options
author | Nick Snyder <nickdsnyder@gmail.com> | 2019-05-08 06:51:17 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-08 06:51:17 +0300 |
commit | 245a3132e77e8984f279e686139247773553a283 (patch) | |
tree | 747ccfd76456d71cb0f62c38f31b270737c4de85 | |
parent | 8ad1b00335557ad06f9167b73a74f37f4f6ddaeb (diff) |
support artificial languages (#171)
-rw-r--r-- | v2/i18n/bundle.go | 6 | ||||
-rw-r--r-- | v2/i18n/bundle_test.go | 45 |
2 files changed, 21 insertions, 30 deletions
diff --git a/v2/i18n/bundle.go b/v2/i18n/bundle.go index 9977cde..62bcd43 100644 --- a/v2/i18n/bundle.go +++ b/v2/i18n/bundle.go @@ -26,11 +26,17 @@ type Bundle struct { matcher language.Matcher } +// artTag is the language tag used for artifical languages +// https://en.wikipedia.org/wiki/Codes_for_constructed_languages +var artTag = language.MustParse("art") + +// NewBundle returns a bundle with a default language and a default set of plural rules. func NewBundle(defaultLanguage language.Tag) *Bundle { b := &Bundle{ defaultLanguage: defaultLanguage, pluralRules: plural.DefaultRules(), } + b.pluralRules[artTag] = b.pluralRules.Rule(language.English) b.addTag(defaultLanguage) return b } diff --git a/v2/i18n/bundle_test.go b/v2/i18n/bundle_test.go index 327cc08..da8a697 100644 --- a/v2/i18n/bundle_test.go +++ b/v2/i18n/bundle_test.go @@ -34,37 +34,13 @@ var everythingMessage = MustNewMessage(map[string]string{ func TestPseudoLanguage(t *testing.T) { bundle := NewBundle(language.English) bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal) - expected := "simple simple" + expected := "nuqneH" bundle.MustParseMessageFileBytes([]byte(` # Comment -simple = "simple simple" -`), "en-double.toml") - localizer := NewLocalizer(bundle, "en-double") - localized, err := localizer.Localize(&LocalizeConfig{MessageID: "simple"}) - if err != nil { - t.Fatal(err) - } - if localized != expected { - t.Fatalf("expected %q\ngot %q", expected, localized) - } -} - -func TestPseudoLanguagePlural(t *testing.T) { - bundle := NewBundle(language.English) - bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal) - bundle.MustParseMessageFileBytes([]byte(` -[everything] -few = "few translation" -many = "many translation" -one = "one translation" -other = "other translation" -two = "two translation" -zero = "zero translation" -`), "en-double.toml") - localizer := NewLocalizer(bundle, "en-double") +hello = "`+expected+`" +`), "art-x-klingon.toml") { - expected := "other translation" - localized, err := localizer.Localize(&LocalizeConfig{MessageID: "everything", PluralCount: 2}) + localized, err := NewLocalizer(bundle, "art-x-klingon").Localize(&LocalizeConfig{MessageID: "hello"}) if err != nil { t.Fatal(err) } @@ -73,8 +49,7 @@ zero = "zero translation" } } { - expected := "one translation" - localized, err := localizer.Localize(&LocalizeConfig{MessageID: "everything", PluralCount: 1}) + localized, err := NewLocalizer(bundle, "art").Localize(&LocalizeConfig{MessageID: "hello"}) if err != nil { t.Fatal(err) } @@ -82,6 +57,16 @@ zero = "zero translation" t.Fatalf("expected %q\ngot %q", expected, localized) } } + { + expected := "" + localized, err := NewLocalizer(bundle, "en").Localize(&LocalizeConfig{MessageID: "hello"}) + if err == nil { + t.Fatal(err) + } + if localized != expected { + t.Fatalf("expected %q\ngot %q", expected, localized) + } + } } func TestJSON(t *testing.T) { |