Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/go-i18n.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Snyder <nickdsnyder@gmail.com>2019-05-08 06:51:17 +0300
committerGitHub <noreply@github.com>2019-05-08 06:51:17 +0300
commit245a3132e77e8984f279e686139247773553a283 (patch)
tree747ccfd76456d71cb0f62c38f31b270737c4de85
parent8ad1b00335557ad06f9167b73a74f37f4f6ddaeb (diff)
support artificial languages (#171)
-rw-r--r--v2/i18n/bundle.go6
-rw-r--r--v2/i18n/bundle_test.go45
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) {