p2 project
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.

207 lines
6.8 KiB

2 months ago
<?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));
}
}