瀏覽代碼

Made Error messages more explicit

- now each error message denotes the locale, key and text where the error occured.
joeybloggs 8 年之前
父節點
當前提交
1e10e4febb
共有 4 個文件被更改,包括 63 次插入55 次删除
  1. 18 10
      errors.go
  2. 13 13
      import_export_test.go
  3. 16 16
      translator.go
  4. 16 16
      translator_test.go

+ 18 - 10
errors.go

@@ -31,19 +31,20 @@ func (e *ErrExistingTranslator) Error() string {
 
 // ErrConflictingTranslation is the error representing a conflicting translation
 type ErrConflictingTranslation struct {
-	key  interface{}
-	rule locales.PluralRule
-	text string
+	locale string
+	key    interface{}
+	rule   locales.PluralRule
+	text   string
 }
 
 // Error returns ErrConflictingTranslation's internal error text
 func (e *ErrConflictingTranslation) Error() string {
 
 	if _, ok := e.key.(string); !ok {
-		return fmt.Sprintf("error: conflicting key '%#v' rule '%s' with text '%s', value being ignored", e.key, e.rule, e.text)
+		return fmt.Sprintf("error: conflicting key '%#v' rule '%s' with text '%s' for locale '%s', value being ignored", e.key, e.rule, e.text, e.locale)
 	}
 
-	return fmt.Sprintf("error: conflicting key '%s' rule '%s' with text '%s', value being ignored", e.key, e.rule, e.text)
+	return fmt.Sprintf("error: conflicting key '%s' rule '%s' with text '%s' for locale '%s', value being ignored", e.key, e.rule, e.text, e.locale)
 }
 
 // ErrRangeTranslation is the error representing a range translation error
@@ -79,6 +80,7 @@ func (e *ErrCardinalTranslation) Error() string {
 // ErrMissingPluralTranslation is the error signifying a missing translation given
 // the locales plural rules.
 type ErrMissingPluralTranslation struct {
+	locale          string
 	key             interface{}
 	rule            locales.PluralRule
 	translationType string
@@ -88,31 +90,37 @@ type ErrMissingPluralTranslation struct {
 func (e *ErrMissingPluralTranslation) Error() string {
 
 	if _, ok := e.key.(string); !ok {
-		return fmt.Sprintf("error: missing '%s' plural rule '%s' for translation with key '%#v'", e.translationType, e.rule, e.key)
+		return fmt.Sprintf("error: missing '%s' plural rule '%s' for translation with key '%#v' and locale '%s'", e.translationType, e.rule, e.key, e.locale)
 	}
 
-	return fmt.Sprintf("error: missing '%s' plural rule '%s' for translation with key '%s'", e.translationType, e.rule, e.key)
+	return fmt.Sprintf("error: missing '%s' plural rule '%s' for translation with key '%s' and locale '%s'", e.translationType, e.rule, e.key, e.locale)
 }
 
 // ErrMissingBracket is the error representing a missing bracket in a translation
 // eg. This is a {0 <-- missing ending '}'
 type ErrMissingBracket struct {
+	locale string
+	key    interface{}
+	text   string
 }
 
 // Error returns ErrMissingBracket error message
 func (e *ErrMissingBracket) Error() string {
-	return fmt.Sprint("error: missing bracket, '{' or '}', in translation")
+	return fmt.Sprintf("error: missing bracket '{}', in translation. locale: '%s' key: '%v' text: '%s'", e.locale, e.key, e.text)
 }
 
 // ErrBadParamSyntax is the error representing a bad parameter definition in a translation
 // eg. This is a {must-be-int}
 type ErrBadParamSyntax struct {
-	param string
+	locale string
+	param  string
+	key    interface{}
+	text   string
 }
 
 // Error returns ErrBadParamSyntax error message
 func (e *ErrBadParamSyntax) Error() string {
-	return fmt.Sprintf("error: bad parameter syntax, missing parameter '%s'", e.param)
+	return fmt.Sprintf("error: bad parameter syntax, missing parameter '%s' in translation. locale: '%s' key: '%v' text: '%s'", e.param, e.locale, e.key, e.text)
 }
 
 // import/export errors

+ 13 - 13
import_export_test.go

@@ -66,13 +66,13 @@ func TestExportImportBasic(t *testing.T) {
 		{
 			key:           "test_trans",
 			trans:         "{0}{1}",
-			expected:      &ErrConflictingTranslation{key: "test_trans", text: "{0}{1}"},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: "test_trans", text: "{0}{1}"},
 			expectedError: true,
 		},
 		{
 			key:           -1,
 			trans:         "{0}{1}",
-			expected:      &ErrConflictingTranslation{key: -1, text: "{0}{1}"},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: -1, text: "{0}{1}"},
 			expectedError: true,
 		},
 		{
@@ -181,7 +181,7 @@ func TestExportImportCardinal(t *testing.T) {
 			key:           "cardinal_test",
 			trans:         "You have a day left.",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrCardinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddCardinal'", paramZero)},
+			expected:      &ErrCardinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddCardinal'. locale: '%s' key: '%v' text: '%s'", paramZero, en.Locale(), "cardinal_test", "You have a day left.")},
 			expectedError: true,
 		},
 		{
@@ -200,7 +200,7 @@ func TestExportImportCardinal(t *testing.T) {
 			key:           "cardinal_test",
 			trans:         "You have {0} days left.",
 			rule:          locales.PluralRuleOther,
-			expected:      &ErrConflictingTranslation{key: "cardinal_test", rule: locales.PluralRuleOther, text: "You have {0} days left."},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: "cardinal_test", rule: locales.PluralRuleOther, text: "You have {0} days left."},
 			expectedError: true,
 		},
 		{
@@ -217,7 +217,7 @@ func TestExportImportCardinal(t *testing.T) {
 		err := en.AddCardinal(tt.key, tt.trans, tt.rule, tt.override)
 		if err != tt.expected {
 			if !tt.expectedError || err.Error() != tt.expected.Error() {
-				t.Errorf("Expected '<nil>' Got '%s'", err)
+				t.Errorf("Expected '%s' Got '%s'", tt.expected, err)
 			}
 		}
 	}
@@ -301,7 +301,7 @@ func TestExportImportOrdinal(t *testing.T) {
 			key:           "day",
 			trans:         "st",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrOrdinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddOrdinal'", paramZero)},
+			expected:      &ErrOrdinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddOrdinal'. locale: '%s' key: '%v' text: '%s'", paramZero, en.Locale(), "day", "st")},
 			expectedError: true,
 		},
 		{
@@ -333,7 +333,7 @@ func TestExportImportOrdinal(t *testing.T) {
 			key:           "day",
 			trans:         "{0}th",
 			rule:          locales.PluralRuleOther,
-			expected:      &ErrConflictingTranslation{key: "day", rule: locales.PluralRuleOther, text: "{0}th"},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: "day", rule: locales.PluralRuleOther, text: "{0}th"},
 			expectedError: true,
 		},
 		{
@@ -464,7 +464,7 @@ func TestExportImportRange(t *testing.T) {
 			key:           "day",
 			trans:         "er -{1} dag vertrokken",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, are you sure you're adding a Range Translation?", paramZero)},
+			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, are you sure you're adding a Range Translation? locale: '%s' key: '%s' text: '%s'", paramZero, nl.Locale(), "day", "er -{1} dag vertrokken")},
 			expectedError: true,
 		},
 		// bad translation
@@ -472,7 +472,7 @@ func TestExportImportRange(t *testing.T) {
 			key:           "day",
 			trans:         "er {0}- dag vertrokken",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, a Range Translation requires two parameters", paramOne)},
+			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, a Range Translation requires two parameters. locale: '%s' key: '%s' text: '%s'", paramOne, nl.Locale(), "day", "er {0}- dag vertrokken")},
 			expectedError: true,
 		},
 		{
@@ -492,7 +492,7 @@ func TestExportImportRange(t *testing.T) {
 			key:           "day",
 			trans:         "er zijn {0}-{1} dagen over",
 			rule:          locales.PluralRuleOther,
-			expected:      &ErrConflictingTranslation{key: "day", rule: locales.PluralRuleOther, text: "er zijn {0}-{1} dagen over"},
+			expected:      &ErrConflictingTranslation{locale: nl.Locale(), key: "day", rule: locales.PluralRuleOther, text: "er zijn {0}-{1} dagen over"},
 			expectedError: true,
 		},
 		{
@@ -677,7 +677,7 @@ func TestBadImport(t *testing.T) {
 
 	// test bad parameter basic translation
 	filename = "testdata/bad-translation1.json"
-	expected = "error: bad parameter syntax, missing parameter '{0}'"
+	expected = "error: bad parameter syntax, missing parameter '{0}' in translation. locale: 'en' key: 'test_trans3' text: 'Welcome {lettersnotpermitted} to the {1}'"
 	err = uni.Import(JSON, filename)
 	if err == nil || err.Error() != expected {
 		t.Fatalf("Expected '%s' Got '%s'", expected, err)
@@ -685,7 +685,7 @@ func TestBadImport(t *testing.T) {
 
 	// test missing bracket basic translation
 	filename = "testdata/bad-translation2.json"
-	expected = "error: missing bracket, '{' or '}', in translation"
+	expected = "error: missing bracket '{}', in translation. locale: 'en' key: 'test_trans3' text: 'Welcome {0 to the {1}'"
 	err = uni.Import(JSON, filename)
 	if err == nil || err.Error() != expected {
 		t.Fatalf("Expected '%s' Got '%s'", expected, err)
@@ -709,7 +709,7 @@ func TestBadImport(t *testing.T) {
 
 	// test bad plural rule for locale
 	filename = "testdata/bad-translation5.json"
-	expected = "error: cardinal plural rule 'Many' does not exist for locale 'en'"
+	expected = "error: cardinal plural rule 'Many' does not exist for locale 'en' key: 'cardinal_test' text: 'You have {0} day left.'"
 	err = uni.Import(JSON, filename)
 	if err == nil || err.Error() != expected {
 		t.Fatalf("Expected '%s' Got '%s'", expected, err)

+ 16 - 16
translator.go

@@ -98,14 +98,14 @@ func newTranslator(trans locales.Translator) Translator {
 func (t *translator) Add(key interface{}, text string, override bool) error {
 
 	if _, ok := t.translations[key]; ok && !override {
-		return &ErrConflictingTranslation{key: key, text: text}
+		return &ErrConflictingTranslation{locale: t.Locale(), key: key, text: text}
 	}
 
 	lb := strings.Count(text, "{")
 	rb := strings.Count(text, "}")
 
 	if lb != rb {
-		return &ErrMissingBracket{}
+		return &ErrMissingBracket{locale: t.Locale(), key: key, text: text}
 	}
 
 	trans := &transText{
@@ -118,7 +118,7 @@ func (t *translator) Add(key interface{}, text string, override bool) error {
 		s := "{" + strconv.Itoa(i) + "}"
 		idx = strings.Index(text, s)
 		if idx == -1 {
-			return &ErrBadParamSyntax{param: s}
+			return &ErrBadParamSyntax{locale: t.Locale(), param: s, key: key, text: text}
 		}
 
 		trans.indexes = append(trans.indexes, idx)
@@ -148,14 +148,14 @@ func (t *translator) AddCardinal(key interface{}, text string, rule locales.Plur
 	}
 
 	if !verified {
-		return &ErrCardinalTranslation{text: fmt.Sprintf("error: cardinal plural rule '%s' does not exist for locale '%s'", rule, t.Locale())}
+		return &ErrCardinalTranslation{text: fmt.Sprintf("error: cardinal plural rule '%s' does not exist for locale '%s' key: '%v' text: '%s'", rule, t.Locale(), key, text)}
 	}
 
 	tarr, ok := t.cardinalTanslations[key]
 	if ok {
 		// verify not adding a conflicting record
 		if len(tarr) > 0 && tarr[rule] != nil && !override {
-			return &ErrConflictingTranslation{key: key, rule: rule, text: text}
+			return &ErrConflictingTranslation{locale: t.Locale(), key: key, rule: rule, text: text}
 		}
 
 	} else {
@@ -173,7 +173,7 @@ func (t *translator) AddCardinal(key interface{}, text string, rule locales.Plur
 	idx := strings.Index(text, paramZero)
 	if idx == -1 {
 		tarr[rule] = nil
-		return &ErrCardinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddCardinal'", paramZero)}
+		return &ErrCardinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddCardinal'. locale: '%s' key: '%v' text: '%s'", paramZero, t.Locale(), key, text)}
 	}
 
 	trans.indexes[0] = idx
@@ -200,14 +200,14 @@ func (t *translator) AddOrdinal(key interface{}, text string, rule locales.Plura
 	}
 
 	if !verified {
-		return &ErrOrdinalTranslation{text: fmt.Sprintf("error: ordinal plural rule '%s' does not exist for locale '%s'", rule, t.Locale())}
+		return &ErrOrdinalTranslation{text: fmt.Sprintf("error: ordinal plural rule '%s' does not exist for locale '%s' key: '%v' text: '%s'", rule, t.Locale(), key, text)}
 	}
 
 	tarr, ok := t.ordinalTanslations[key]
 	if ok {
 		// verify not adding a conflicting record
 		if len(tarr) > 0 && tarr[rule] != nil && !override {
-			return &ErrConflictingTranslation{key: key, rule: rule, text: text}
+			return &ErrConflictingTranslation{locale: t.Locale(), key: key, rule: rule, text: text}
 		}
 
 	} else {
@@ -225,7 +225,7 @@ func (t *translator) AddOrdinal(key interface{}, text string, rule locales.Plura
 	idx := strings.Index(text, paramZero)
 	if idx == -1 {
 		tarr[rule] = nil
-		return &ErrOrdinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddOrdinal'", paramZero)}
+		return &ErrOrdinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddOrdinal'. locale: '%s' key: '%v' text: '%s'", paramZero, t.Locale(), key, text)}
 	}
 
 	trans.indexes[0] = idx
@@ -250,14 +250,14 @@ func (t *translator) AddRange(key interface{}, text string, rule locales.PluralR
 	}
 
 	if !verified {
-		return &ErrRangeTranslation{text: fmt.Sprintf("error: range plural rule '%s' does not exist for locale '%s'", rule, t.Locale())}
+		return &ErrRangeTranslation{text: fmt.Sprintf("error: range plural rule '%s' does not exist for locale '%s' key: '%v' text: '%s'", rule, t.Locale(), key, text)}
 	}
 
 	tarr, ok := t.rangeTanslations[key]
 	if ok {
 		// verify not adding a conflicting record
 		if len(tarr) > 0 && tarr[rule] != nil && !override {
-			return &ErrConflictingTranslation{key: key, rule: rule, text: text}
+			return &ErrConflictingTranslation{locale: t.Locale(), key: key, rule: rule, text: text}
 		}
 
 	} else {
@@ -275,7 +275,7 @@ func (t *translator) AddRange(key interface{}, text string, rule locales.PluralR
 	idx := strings.Index(text, paramZero)
 	if idx == -1 {
 		tarr[rule] = nil
-		return &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, are you sure you're adding a Range Translation?", paramZero)}
+		return &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, are you sure you're adding a Range Translation? locale: '%s' key: '%v' text: '%s'", paramZero, t.Locale(), key, text)}
 	}
 
 	trans.indexes[0] = idx
@@ -284,7 +284,7 @@ func (t *translator) AddRange(key interface{}, text string, rule locales.PluralR
 	idx = strings.Index(text, paramOne)
 	if idx == -1 {
 		tarr[rule] = nil
-		return &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, a Range Translation requires two parameters", paramOne)}
+		return &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, a Range Translation requires two parameters. locale: '%s' key: '%v' text: '%s'", paramOne, t.Locale(), key, text)}
 	}
 
 	trans.indexes[2] = idx
@@ -391,7 +391,7 @@ func (t *translator) VerifyTranslations() error {
 		for _, rule := range t.PluralsCardinal() {
 
 			if v[rule] == nil {
-				return &ErrMissingPluralTranslation{translationType: "plural", rule: rule, key: k}
+				return &ErrMissingPluralTranslation{locale: t.Locale(), translationType: "plural", rule: rule, key: k}
 			}
 		}
 	}
@@ -401,7 +401,7 @@ func (t *translator) VerifyTranslations() error {
 		for _, rule := range t.PluralsOrdinal() {
 
 			if v[rule] == nil {
-				return &ErrMissingPluralTranslation{translationType: "ordinal", rule: rule, key: k}
+				return &ErrMissingPluralTranslation{locale: t.Locale(), translationType: "ordinal", rule: rule, key: k}
 			}
 		}
 	}
@@ -411,7 +411,7 @@ func (t *translator) VerifyTranslations() error {
 		for _, rule := range t.PluralsRange() {
 
 			if v[rule] == nil {
-				return &ErrMissingPluralTranslation{translationType: "range", rule: rule, key: k}
+				return &ErrMissingPluralTranslation{locale: t.Locale(), translationType: "range", rule: rule, key: k}
 			}
 		}
 	}

+ 16 - 16
translator_test.go

@@ -65,13 +65,13 @@ func TestBasicTranslation(t *testing.T) {
 		{
 			key:           "test_trans",
 			trans:         "{0}{1}",
-			expected:      &ErrConflictingTranslation{key: "test_trans", text: "{0}{1}"},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: "test_trans", text: "{0}{1}"},
 			expectedError: true,
 		},
 		{
 			key:           -1,
 			trans:         "{0}{1}",
-			expected:      &ErrConflictingTranslation{key: -1, text: "{0}{1}"},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: -1, text: "{0}{1}"},
 			expectedError: true,
 		},
 		{
@@ -163,7 +163,7 @@ func TestCardinalTranslation(t *testing.T) {
 			key:           "cardinal_test",
 			trans:         "You have a day left.",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrCardinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddCardinal'", paramZero)},
+			expected:      &ErrCardinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddCardinal'. locale: '%s' key: '%v' text: '%s'", paramZero, en.Locale(), "cardinal_test", "You have a day left.")},
 			expectedError: true,
 		},
 		// bad translation
@@ -171,7 +171,7 @@ func TestCardinalTranslation(t *testing.T) {
 			key:           "cardinal_test",
 			trans:         "You have a day left few.",
 			rule:          locales.PluralRuleFew,
-			expected:      &ErrCardinalTranslation{text: fmt.Sprintf("error: cardinal plural rule '%s' does not exist for locale '%s'", locales.PluralRuleFew, en.Locale())},
+			expected:      &ErrCardinalTranslation{text: fmt.Sprintf("error: cardinal plural rule '%s' does not exist for locale '%s' key: '%s' text: '%s'", locales.PluralRuleFew, en.Locale(), "cardinal_test", "You have a day left few.")},
 			expectedError: true,
 		},
 		{
@@ -190,7 +190,7 @@ func TestCardinalTranslation(t *testing.T) {
 			key:           "cardinal_test",
 			trans:         "You have {0} days left.",
 			rule:          locales.PluralRuleOther,
-			expected:      &ErrConflictingTranslation{key: "cardinal_test", rule: locales.PluralRuleOther, text: "You have {0} days left."},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: "cardinal_test", rule: locales.PluralRuleOther, text: "You have {0} days left."},
 			expectedError: true,
 		},
 		{
@@ -275,7 +275,7 @@ func TestOrdinalTranslation(t *testing.T) {
 			key:           "day",
 			trans:         "st",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrOrdinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddOrdinal'", paramZero)},
+			expected:      &ErrOrdinalTranslation{text: fmt.Sprintf("error: parameter '%s' not found, may want to use 'Add' instead of 'AddOrdinal'. locale: '%s' key: '%v' text: '%s'", paramZero, en.Locale(), "day", "st")},
 			expectedError: true,
 		},
 		// bad translation
@@ -283,7 +283,7 @@ func TestOrdinalTranslation(t *testing.T) {
 			key:           "day",
 			trans:         "st",
 			rule:          locales.PluralRuleMany,
-			expected:      &ErrOrdinalTranslation{text: fmt.Sprintf("error: ordinal plural rule '%s' does not exist for locale '%s'", locales.PluralRuleMany, en.Locale())},
+			expected:      &ErrOrdinalTranslation{text: fmt.Sprintf("error: ordinal plural rule '%s' does not exist for locale '%s' key: '%s' text: '%s'", locales.PluralRuleMany, en.Locale(), "day", "st")},
 			expectedError: true,
 		},
 		{
@@ -315,7 +315,7 @@ func TestOrdinalTranslation(t *testing.T) {
 			key:           "day",
 			trans:         "{0}th",
 			rule:          locales.PluralRuleOther,
-			expected:      &ErrConflictingTranslation{key: "day", rule: locales.PluralRuleOther, text: "{0}th"},
+			expected:      &ErrConflictingTranslation{locale: en.Locale(), key: "day", rule: locales.PluralRuleOther, text: "{0}th"},
 			expectedError: true,
 		},
 		{
@@ -430,7 +430,7 @@ func TestRangeTranslation(t *testing.T) {
 			key:           "day",
 			trans:         "er -{1} dag vertrokken",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, are you sure you're adding a Range Translation?", paramZero)},
+			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, are you sure you're adding a Range Translation? locale: '%s' key: '%s' text: '%s'", paramZero, nl.Locale(), "day", "er -{1} dag vertrokken")},
 			expectedError: true,
 		},
 		// bad translation
@@ -438,7 +438,7 @@ func TestRangeTranslation(t *testing.T) {
 			key:           "day",
 			trans:         "er {0}- dag vertrokken",
 			rule:          locales.PluralRuleMany,
-			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: range plural rule '%s' does not exist for locale '%s'", locales.PluralRuleMany, nl.Locale())},
+			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: range plural rule '%s' does not exist for locale '%s' key: '%s' text: '%s'", locales.PluralRuleMany, nl.Locale(), "day", "er {0}- dag vertrokken")},
 			expectedError: true,
 		},
 		// bad translation
@@ -446,7 +446,7 @@ func TestRangeTranslation(t *testing.T) {
 			key:           "day",
 			trans:         "er {0}- dag vertrokken",
 			rule:          locales.PluralRuleOne,
-			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, a Range Translation requires two parameters", paramOne)},
+			expected:      &ErrRangeTranslation{text: fmt.Sprintf("error: parameter '%s' not found, a Range Translation requires two parameters. locale: '%s' key: '%s' text: '%s'", paramOne, nl.Locale(), "day", "er {0}- dag vertrokken")},
 			expectedError: true,
 		},
 		{
@@ -466,7 +466,7 @@ func TestRangeTranslation(t *testing.T) {
 			key:           "day",
 			trans:         "er zijn {0}-{1} dagen over",
 			rule:          locales.PluralRuleOther,
-			expected:      &ErrConflictingTranslation{key: "day", rule: locales.PluralRuleOther, text: "er zijn {0}-{1} dagen over"},
+			expected:      &ErrConflictingTranslation{locale: nl.Locale(), key: "day", rule: locales.PluralRuleOther, text: "er zijn {0}-{1} dagen over"},
 			expectedError: true,
 		},
 		{
@@ -653,7 +653,7 @@ func TestVerifyTranslations(t *testing.T) {
 	}
 
 	// fail cardinal rules
-	expected := &ErrMissingPluralTranslation{translationType: "plural", rule: locales.PluralRuleOther, key: "day"}
+	expected := &ErrMissingPluralTranslation{locale: loc.Locale(), translationType: "plural", rule: locales.PluralRuleOther, key: "day"}
 	err = loc.VerifyTranslations()
 	if err == nil || err.Error() != expected.Error() {
 		t.Errorf("Expected '%s' Got '%s'", expected, err)
@@ -677,7 +677,7 @@ func TestVerifyTranslations(t *testing.T) {
 	}
 
 	// fail range rules
-	expected = &ErrMissingPluralTranslation{translationType: "range", rule: locales.PluralRuleOne, key: "day"}
+	expected = &ErrMissingPluralTranslation{locale: loc.Locale(), translationType: "range", rule: locales.PluralRuleOne, key: "day"}
 	err = loc.VerifyTranslations()
 	if err == nil || err.Error() != expected.Error() {
 		t.Errorf("Expected '%s' Got '%s'", expected, err)
@@ -724,7 +724,7 @@ func TestVerifyTranslations(t *testing.T) {
 	}
 
 	// fail ordinal rules
-	expected = &ErrMissingPluralTranslation{translationType: "ordinal", rule: locales.PluralRuleTwo, key: "day"}
+	expected = &ErrMissingPluralTranslation{locale: loc.Locale(), translationType: "ordinal", rule: locales.PluralRuleTwo, key: "day"}
 	err = loc.VerifyTranslations()
 	if err == nil || err.Error() != expected.Error() {
 		t.Errorf("Expected '%s' Got '%s'", expected, err)
@@ -762,7 +762,7 @@ func TestVerifyTranslationsWithNonStringKeys(t *testing.T) {
 	}
 
 	// fail cardinal rules
-	expected := &ErrMissingPluralTranslation{translationType: "plural", rule: locales.PluralRuleOther, key: -1}
+	expected := &ErrMissingPluralTranslation{locale: loc.Locale(), translationType: "plural", rule: locales.PluralRuleOther, key: -1}
 	err = loc.VerifyTranslations()
 	if err == nil || err.Error() != expected.Error() {
 		t.Errorf("Expected '%s' Got '%s'", expected, err)