You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
6.8 KiB
206 lines
6.8 KiB
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* This file is part of the Carbon package.
|
|
*
|
|
* (c) Brian Nesbitt <brian@nesbot.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Tests\Jenssegers;
|
|
|
|
use Carbon\Translator;
|
|
use Symfony\Component\Translation\Loader\ArrayLoader;
|
|
|
|
class TranslationTest extends TestCaseBase
|
|
{
|
|
public function testGetsAndSetsTranslator()
|
|
{
|
|
$translator = new Translator('nl');
|
|
$translator->addLoader('array', new ArrayLoader());
|
|
$this->assertNotEquals($translator, JenssegersDate::getTranslator());
|
|
|
|
JenssegersDate::setTranslator($translator);
|
|
$this->assertEquals($translator, JenssegersDate::getTranslator());
|
|
}
|
|
|
|
public function testFallback()
|
|
{
|
|
JenssegersDate::setLocale('xx');
|
|
|
|
$date = JenssegersDate::parse('-5 years');
|
|
$this->assertSame('5 years ago', $date->ago());
|
|
}
|
|
|
|
public function testFallbackWithRegion()
|
|
{
|
|
JenssegersDate::setFallbackLocale('en_US');
|
|
JenssegersDate::setLocale('xx');
|
|
|
|
$date = JenssegersDate::parse('-5 years');
|
|
$this->assertSame('5 years ago', $date->ago());
|
|
}
|
|
|
|
public function testMultiplePluralForms()
|
|
{
|
|
JenssegersDate::setLocale('hr');
|
|
|
|
$date = JenssegersDate::parse('-1 years');
|
|
$this->assertSame('prije 1 godinu', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-2 years');
|
|
$this->assertSame('prije 2 godine', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-3 years');
|
|
$this->assertSame('prije 3 godine', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-5 years');
|
|
$this->assertSame('prije 5 godina', $date->ago());
|
|
}
|
|
|
|
public function testCustomSuffix()
|
|
{
|
|
JenssegersDate::setLocale('de');
|
|
|
|
// If we use -1 month, we have the chance of it being converted to 4 weeks.
|
|
$date = JenssegersDate::parse('-40 days');
|
|
$this->assertSame('vor 1 Monat', $date->ago());
|
|
|
|
$date = JenssegersDate::now()->subMonthsNoOverflow(5);
|
|
$this->assertSame('vor 5 Monaten', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-5 seconds');
|
|
$this->assertSame('vor 5 Sekunden', $date->ago());
|
|
}
|
|
|
|
public function testTimespanTranslated()
|
|
{
|
|
JenssegersDate::setLocale('nl');
|
|
|
|
$date = new JenssegersDate('@1403619368');
|
|
$date = $date->sub('-100 days -3 hours -20 minutes');
|
|
|
|
$this->assertSame('3 maanden, 1 week, 1 dag, 3 uur, 20 minuten', $date->timespan('@1403619368'));
|
|
}
|
|
|
|
public function testParse()
|
|
{
|
|
JenssegersDate::setLocale('nl');
|
|
$date = JenssegersDate::parse('1 januari 2015');
|
|
$this->assertSame('2015-01-01', $date->format('Y-m-d'));
|
|
|
|
JenssegersDate::setLocale('nl');
|
|
$date = JenssegersDate::parse('zaterdag 21 maart 2015');
|
|
$this->assertSame('2015-03-21', $date->format('Y-m-d'));
|
|
}
|
|
|
|
public function testCreateFromFormat()
|
|
{
|
|
JenssegersDate::setLocale('nl');
|
|
$date = JenssegersDate::createFromFormat('d F Y', '1 januari 2015');
|
|
$this->assertSame('2015-01-01', $date->format('Y-m-d'));
|
|
|
|
JenssegersDate::setLocale('nl');
|
|
$date = JenssegersDate::createFromFormat('D d F Y', 'zaterdag 21 maart 2015');
|
|
$this->assertSame('2015-03-21', $date->format('Y-m-d'));
|
|
}
|
|
|
|
public function testAgoTranslated()
|
|
{
|
|
JenssegersDate::setLocale('nl');
|
|
JenssegersDate::setTestNow(JenssegersDate::now());
|
|
|
|
$date = JenssegersDate::parse('-5 years');
|
|
$this->assertSame('5 jaar geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::now()->subMonthsNoOverflow(5);
|
|
$this->assertSame('5 maanden geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-32 days');
|
|
$this->assertSame('1 maand geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-4 days');
|
|
$this->assertSame('4 dagen geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-1 day');
|
|
$this->assertSame('1 dag geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-3 hours');
|
|
$this->assertSame('3 uur geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-1 hour');
|
|
$this->assertSame('1 uur geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-2 minutes');
|
|
$this->assertSame('2 minuten geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-1 minute');
|
|
$this->assertSame('1 minuut geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-50 second');
|
|
$this->assertSame('50 seconden geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('-1 second');
|
|
$this->assertSame('1 seconde geleden', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('+5 days');
|
|
$this->assertSame('over 5 dagen', $date->ago());
|
|
|
|
$date = JenssegersDate::parse('+5 days');
|
|
$this->assertSame('5 dagen later', $date->ago(JenssegersDate::now()));
|
|
|
|
$date = JenssegersDate::parse('-5 days');
|
|
$this->assertSame('5 dagen eerder', $date->ago(JenssegersDate::now()));
|
|
|
|
JenssegersDate::setLocale('ru');
|
|
|
|
$date = JenssegersDate::parse('-21 hours');
|
|
$this->assertSame('21 час до', $date->ago(JenssegersDate::now()));
|
|
|
|
$date = JenssegersDate::parse('-11 hours');
|
|
$this->assertSame('11 часов до', $date->ago(JenssegersDate::now()));
|
|
}
|
|
|
|
public function testFormatTranslated()
|
|
{
|
|
JenssegersDate::setLocale('nl');
|
|
|
|
$date = new JenssegersDate('@1367186296');
|
|
$this->assertSame('zondag 28 april 2013 21:58:16', $date->format('l j F Y H:i:s'));
|
|
|
|
$date = new JenssegersDate('@1367186296');
|
|
$this->assertSame('l 28 F 2013 21:58:16', $date->format('\l j \F Y H:i:s'));
|
|
|
|
$date = new JenssegersDate('@1367186296');
|
|
$this->assertSame('zo. 28 apr. 2013 21:58:16', $date->format('D j M Y H:i:s'));
|
|
}
|
|
|
|
public function testFormatDeclensions()
|
|
{
|
|
JenssegersDate::setLocale('ru');
|
|
|
|
$date = new JenssegersDate('10 march 2015');
|
|
$this->assertSame('март 2015', $date->format('F Y'));
|
|
|
|
$date = new JenssegersDate('10 march 2015');
|
|
$this->assertSame('10 марта 2015', $date->format('j F Y'));
|
|
|
|
$date = new JenssegersDate('10 march 2015');
|
|
$this->assertSame('10. марта 2015', $date->format('j. F Y'));
|
|
}
|
|
|
|
public function testTranslateTimeString()
|
|
{
|
|
JenssegersDate::setLocale('ru');
|
|
$date = JenssegersDate::translateTimeString('понедельник 21 март 2015');
|
|
$this->assertSame('monday 21 march 2015', mb_strtolower($date));
|
|
|
|
JenssegersDate::setLocale('de');
|
|
$date = JenssegersDate::translateTimeString('Montag 21 März 2015');
|
|
$this->assertSame('monday 21 march 2015', mb_strtolower($date));
|
|
}
|
|
}
|
|
|