Browse Source

Add PrintPluralRules function to Translator

* PrintPluralRules allows for you to print the Plural rules for a locale so when Adding translations you know which ones you have to deal with, especially for plural translations.
joeybloggs 10 years ago
parent
commit
5a5f329a42
2 changed files with 62 additions and 0 deletions
  1. 48 0
      plurals.go
  2. 14 0
      translator.go

+ 48 - 0
plurals.go

@@ -15,6 +15,25 @@ const (
 	PluralRuleOther                   // other - required—general plural form—also used if the language only has a single form
 )
 
+func (p PluralRule) String() string {
+	switch p {
+	case PluralRuleZero:
+		return "PluralRuleZero"
+	case PluralRuleOne:
+		return "PluralRuleOne"
+	case PluralRuleTwo:
+		return "PluralRuleTwo"
+	case PluralRuleFew:
+		return "PluralRuleFew"
+	case PluralRuleMany:
+		return "PluralRuleMany"
+	case PluralRuleOther:
+		return "PluralRuleOther"
+	default:
+		return "Unknown PluralRule"
+	}
+}
+
 // NumberValue should be one of these types:
 // int, float
 type NumberValue interface{}
@@ -53,6 +72,35 @@ var pluralRules = map[string]PluralRuler{
 	"6B": PluralRulerFunc(pluralRule6B),
 }
 
+var pluralPluralRules = map[string][]PluralRule{
+	"1":  {PluralRuleOther},
+	"2A": {PluralRuleOne, PluralRuleOther},
+	"2B": {PluralRuleOne, PluralRuleOther},
+	"2C": {PluralRuleOne, PluralRuleOther},
+	"2D": {PluralRuleOne, PluralRuleOther},
+	"2E": {PluralRuleOne, PluralRuleOther},
+	"2F": {PluralRuleOne, PluralRuleOther},
+	"3A": {PluralRuleZero, PluralRuleOne, PluralRuleOther},
+	"3B": {PluralRuleOne, PluralRuleTwo, PluralRuleOther},
+	"3C": {PluralRuleOne, PluralRuleFew, PluralRuleOther},
+	"3D": {PluralRuleOne, PluralRuleFew, PluralRuleOther},
+	"3E": {PluralRuleOne, PluralRuleFew, PluralRuleOther},
+	"3F": {PluralRuleZero, PluralRuleOne, PluralRuleOther},
+	"3G": {PluralRuleOne, PluralRuleFew, PluralRuleOther},
+	"3H": {PluralRuleZero, PluralRuleOne, PluralRuleOther},
+	"3I": {PluralRuleOne, PluralRuleFew, PluralRuleOther},
+	"4A": {PluralRuleOne, PluralRuleTwo, PluralRuleMany, PluralRuleOther},
+	"4B": {PluralRuleOne, PluralRuleFew, PluralRuleMany, PluralRuleOther},
+	"4C": {PluralRuleOne, PluralRuleFew, PluralRuleMany, PluralRuleOther},
+	"4D": {PluralRuleOne, PluralRuleTwo, PluralRuleFew, PluralRuleOther},
+	"4E": {PluralRuleOne, PluralRuleFew, PluralRuleMany, PluralRuleOther},
+	"4F": {PluralRuleOne, PluralRuleTwo, PluralRuleFew, PluralRuleOther},
+	"5A": {PluralRuleOne, PluralRuleTwo, PluralRuleFew, PluralRuleMany, PluralRuleOther},
+	"5B": {PluralRuleOne, PluralRuleTwo, PluralRuleFew, PluralRuleMany, PluralRuleOther},
+	"6A": {PluralRuleZero, PluralRuleOne, PluralRuleTwo, PluralRuleFew, PluralRuleMany, PluralRuleOther},
+	"6B": {PluralRuleZero, PluralRuleOne, PluralRuleTwo, PluralRuleFew, PluralRuleMany, PluralRuleOther},
+}
+
 // func GetPluralInt(code string) int {
 // 	switch code {
 // 	case "":

+ 14 - 0
translator.go

@@ -62,6 +62,20 @@ func (t *Translator) Add(rule PluralRule, group string, key string, text string)
 	t.groups[group] = append(t.groups[group], trans)
 }
 
+// PrintPluralRules prints the supported rules for the
+// given translators locale
+func (t *Translator) PrintPluralRules() {
+	rules := pluralPluralRules[t.locale.PluralRule]
+
+	fmt.Println("Translator locale '" + t.locale.Locale + "' supported rules:")
+
+	for _, rule := range rules {
+		fmt.Println("- " + rule.String())
+	}
+
+	fmt.Println("")
+}
+
 func (t *Translator) pluralRule(count NumberValue) (rule PluralRule) {
 	return t.ruler.FindRule(count)
 }