TranslationTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * This file is part of the Carbon package.
  5. *
  6. * (c) Brian Nesbitt <brian@nesbot.com>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Tests\Jenssegers;
  12. use Carbon\Translator;
  13. use Symfony\Component\Translation\Loader\ArrayLoader;
  14. class TranslationTest extends TestCaseBase
  15. {
  16. public function testGetsAndSetsTranslator()
  17. {
  18. $translator = new Translator('nl');
  19. $translator->addLoader('array', new ArrayLoader());
  20. $this->assertNotEquals($translator, JenssegersDate::getTranslator());
  21. JenssegersDate::setTranslator($translator);
  22. $this->assertEquals($translator, JenssegersDate::getTranslator());
  23. }
  24. public function testFallback()
  25. {
  26. JenssegersDate::setLocale('xx');
  27. $date = JenssegersDate::parse('-5 years');
  28. $this->assertSame('5 years ago', $date->ago());
  29. }
  30. public function testFallbackWithRegion()
  31. {
  32. JenssegersDate::setFallbackLocale('en_US');
  33. JenssegersDate::setLocale('xx');
  34. $date = JenssegersDate::parse('-5 years');
  35. $this->assertSame('5 years ago', $date->ago());
  36. }
  37. public function testMultiplePluralForms()
  38. {
  39. JenssegersDate::setLocale('hr');
  40. $date = JenssegersDate::parse('-1 years');
  41. $this->assertSame('prije 1 godinu', $date->ago());
  42. $date = JenssegersDate::parse('-2 years');
  43. $this->assertSame('prije 2 godine', $date->ago());
  44. $date = JenssegersDate::parse('-3 years');
  45. $this->assertSame('prije 3 godine', $date->ago());
  46. $date = JenssegersDate::parse('-5 years');
  47. $this->assertSame('prije 5 godina', $date->ago());
  48. }
  49. public function testCustomSuffix()
  50. {
  51. JenssegersDate::setLocale('de');
  52. // If we use -1 month, we have the chance of it being converted to 4 weeks.
  53. $date = JenssegersDate::parse('-40 days');
  54. $this->assertSame('vor 1 Monat', $date->ago());
  55. $date = JenssegersDate::now()->subMonthsNoOverflow(5);
  56. $this->assertSame('vor 5 Monaten', $date->ago());
  57. $date = JenssegersDate::parse('-5 seconds');
  58. $this->assertSame('vor 5 Sekunden', $date->ago());
  59. }
  60. public function testTimespanTranslated()
  61. {
  62. JenssegersDate::setLocale('nl');
  63. $date = new JenssegersDate(1403619368);
  64. $date = $date->sub('-100 days -3 hours -20 minutes');
  65. $this->assertSame('3 maanden, 1 week, 1 dag, 3 uur, 20 minuten', $date->timespan(1403619368));
  66. }
  67. public function testParse()
  68. {
  69. JenssegersDate::setLocale('nl');
  70. $date = JenssegersDate::parse('1 januari 2015');
  71. $this->assertSame('2015-01-01', $date->format('Y-m-d'));
  72. JenssegersDate::setLocale('nl');
  73. $date = JenssegersDate::parse('zaterdag 21 maart 2015');
  74. $this->assertSame('2015-03-21', $date->format('Y-m-d'));
  75. }
  76. public function testCreateFromFormat()
  77. {
  78. JenssegersDate::setLocale('nl');
  79. $date = JenssegersDate::createFromFormat('d F Y', '1 januari 2015');
  80. $this->assertSame('2015-01-01', $date->format('Y-m-d'));
  81. JenssegersDate::setLocale('nl');
  82. $date = JenssegersDate::createFromFormat('D d F Y', 'zaterdag 21 maart 2015');
  83. $this->assertSame('2015-03-21', $date->format('Y-m-d'));
  84. }
  85. public function testAgoTranslated()
  86. {
  87. JenssegersDate::setLocale('nl');
  88. JenssegersDate::setTestNow(JenssegersDate::now());
  89. $date = JenssegersDate::parse('-5 years');
  90. $this->assertSame('5 jaar geleden', $date->ago());
  91. $date = JenssegersDate::now()->subMonthsNoOverflow(5);
  92. $this->assertSame('5 maanden geleden', $date->ago());
  93. $date = JenssegersDate::parse('-32 days');
  94. $this->assertSame('1 maand geleden', $date->ago());
  95. $date = JenssegersDate::parse('-4 days');
  96. $this->assertSame('4 dagen geleden', $date->ago());
  97. $date = JenssegersDate::parse('-1 day');
  98. $this->assertSame('1 dag geleden', $date->ago());
  99. $date = JenssegersDate::parse('-3 hours');
  100. $this->assertSame('3 uur geleden', $date->ago());
  101. $date = JenssegersDate::parse('-1 hour');
  102. $this->assertSame('1 uur geleden', $date->ago());
  103. $date = JenssegersDate::parse('-2 minutes');
  104. $this->assertSame('2 minuten geleden', $date->ago());
  105. $date = JenssegersDate::parse('-1 minute');
  106. $this->assertSame('1 minuut geleden', $date->ago());
  107. $date = JenssegersDate::parse('-50 second');
  108. $this->assertSame('50 seconden geleden', $date->ago());
  109. $date = JenssegersDate::parse('-1 second');
  110. $this->assertSame('1 seconde geleden', $date->ago());
  111. $date = JenssegersDate::parse('+5 days');
  112. $this->assertSame('over 5 dagen', $date->ago());
  113. $date = JenssegersDate::parse('+5 days');
  114. $this->assertSame('5 dagen later', $date->ago(JenssegersDate::now()));
  115. $date = JenssegersDate::parse('-5 days');
  116. $this->assertSame('5 dagen eerder', $date->ago(JenssegersDate::now()));
  117. JenssegersDate::setLocale('ru');
  118. $date = JenssegersDate::parse('-21 hours');
  119. $this->assertSame('21 час до', $date->ago(JenssegersDate::now()));
  120. $date = JenssegersDate::parse('-11 hours');
  121. $this->assertSame('11 часов до', $date->ago(JenssegersDate::now()));
  122. }
  123. public function testFormatTranslated()
  124. {
  125. JenssegersDate::setLocale('nl');
  126. $date = new JenssegersDate(1367186296);
  127. $this->assertSame('zondag 28 april 2013 21:58:16', $date->format('l j F Y H:i:s'));
  128. $date = new JenssegersDate(1367186296);
  129. $this->assertSame('l 28 F 2013 21:58:16', $date->format('\l j \F Y H:i:s'));
  130. $date = new JenssegersDate(1367186296);
  131. $this->assertSame('zo. 28 apr. 2013 21:58:16', $date->format('D j M Y H:i:s'));
  132. }
  133. public function testFormatDeclensions()
  134. {
  135. JenssegersDate::setLocale('ru');
  136. $date = new JenssegersDate('10 march 2015');
  137. $this->assertSame('март 2015', $date->format('F Y'));
  138. $date = new JenssegersDate('10 march 2015');
  139. $this->assertSame('10 марта 2015', $date->format('j F Y'));
  140. $date = new JenssegersDate('10 march 2015');
  141. $this->assertSame('10. марта 2015', $date->format('j. F Y'));
  142. }
  143. public function testTranslateTimeString()
  144. {
  145. JenssegersDate::setLocale('ru');
  146. $date = JenssegersDate::translateTimeString('понедельник 21 март 2015');
  147. $this->assertSame('monday 21 march 2015', mb_strtolower($date));
  148. JenssegersDate::setLocale('de');
  149. $date = JenssegersDate::translateTimeString('Montag 21 März 2015');
  150. $this->assertSame('monday 21 march 2015', mb_strtolower($date));
  151. }
  152. }