locale_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package locale
  5. import "testing"
  6. func TestTranslateWithMissingLanguage(t *testing.T) {
  7. translator := NewTranslator()
  8. translation := translator.GetLanguage("en_US").Get("auth.username")
  9. if translation != "auth.username" {
  10. t.Errorf("Wrong translation, got %s", translation)
  11. }
  12. }
  13. func TestTranslateWithExistingKey(t *testing.T) {
  14. data := `{"auth.username": "Username"}`
  15. translator := NewTranslator()
  16. translator.AddLanguage("en_US", data)
  17. translation := translator.GetLanguage("en_US").Get("auth.username")
  18. if translation != "Username" {
  19. t.Errorf("Wrong translation, got %s", translation)
  20. }
  21. }
  22. func TestTranslateWithMissingKey(t *testing.T) {
  23. data := `{"auth.username": "Username"}`
  24. translator := NewTranslator()
  25. translator.AddLanguage("en_US", data)
  26. translation := translator.GetLanguage("en_US").Get("auth.password")
  27. if translation != "auth.password" {
  28. t.Errorf("Wrong translation, got %s", translation)
  29. }
  30. }
  31. func TestTranslateWithMissingKeyAndPlaceholder(t *testing.T) {
  32. translator := NewTranslator()
  33. translator.AddLanguage("fr_FR", "")
  34. translation := translator.GetLanguage("fr_FR").Get("Status: %s", "ok")
  35. if translation != "Status: ok" {
  36. t.Errorf("Wrong translation, got %s", translation)
  37. }
  38. }
  39. func TestTranslatePluralWithDefaultRule(t *testing.T) {
  40. data := `{"number_of_users": ["Il y a %d utilisateur (%s)", "Il y a %d utilisateurs (%s)"]}`
  41. translator := NewTranslator()
  42. translator.AddLanguage("fr_FR", data)
  43. language := translator.GetLanguage("fr_FR")
  44. translation := language.Plural("number_of_users", 1, 1, "some text")
  45. expected := "Il y a 1 utilisateur (some text)"
  46. if translation != expected {
  47. t.Errorf(`Wrong translation, got "%s" instead of "%s"`, translation, expected)
  48. }
  49. translation = language.Plural("number_of_users", 2, 2, "some text")
  50. expected = "Il y a 2 utilisateurs (some text)"
  51. if translation != expected {
  52. t.Errorf(`Wrong translation, got "%s" instead of "%s"`, translation, expected)
  53. }
  54. }
  55. func TestTranslatePluralWithRussianRule(t *testing.T) {
  56. data := `{"key": ["из %d книги за %d день", "из %d книг за %d дня", "из %d книг за %d дней"]}`
  57. translator := NewTranslator()
  58. translator.AddLanguage("ru_RU", data)
  59. language := translator.GetLanguage("ru_RU")
  60. translation := language.Plural("key", 1, 1, 1)
  61. expected := "из 1 книги за 1 день"
  62. if translation != expected {
  63. t.Errorf(`Wrong translation, got "%s" instead of "%s"`, translation, expected)
  64. }
  65. translation = language.Plural("key", 2, 2, 2)
  66. expected = "из 2 книг за 2 дня"
  67. if translation != expected {
  68. t.Errorf(`Wrong translation, got "%s" instead of "%s"`, translation, expected)
  69. }
  70. translation = language.Plural("key", 5, 5, 5)
  71. expected = "из 5 книг за 5 дней"
  72. if translation != expected {
  73. t.Errorf(`Wrong translation, got "%s" instead of "%s"`, translation, expected)
  74. }
  75. }
  76. func TestTranslatePluralWithMissingTranslation(t *testing.T) {
  77. translator := NewTranslator()
  78. translator.AddLanguage("fr_FR", "")
  79. language := translator.GetLanguage("fr_FR")
  80. translation := language.Plural("number_of_users", 2)
  81. expected := "number_of_users"
  82. if translation != expected {
  83. t.Errorf(`Wrong translation, got "%s" instead of "%s"`, translation, expected)
  84. }
  85. }