2010-09-27 08:45:29 +01:00
< ? php
/*
* This file is part of the Symfony package .
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-09-27 08:45:29 +01:00
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2012-03-28 14:43:52 +01:00
namespace Symfony\Component\Translation\Tests ;
2010-09-27 08:45:29 +01:00
use Symfony\Component\Translation\Translator ;
2014-07-15 15:22:28 +01:00
use Symfony\Component\Translation\MessageSelector ;
2010-09-27 08:45:29 +01:00
use Symfony\Component\Translation\Loader\ArrayLoader ;
2014-05-10 23:14:12 +01:00
use Symfony\Component\Translation\MessageCatalogue ;
2010-09-27 08:45:29 +01:00
class TranslatorTest extends \PHPUnit_Framework_TestCase
{
2014-07-04 18:20:43 +01:00
/**
* @ dataProvider getInvalidLocalesTests
* @ expectedException \InvalidArgumentException
*/
public function testConstructorInvalidLocale ( $locale )
{
$translator = new Translator ( $locale , new MessageSelector ());
}
/**
* @ dataProvider getValidLocalesTests
*/
public function testConstructorValidLocale ( $locale )
{
$translator = new Translator ( $locale , new MessageSelector ());
$this -> assertEquals ( $locale , $translator -> getLocale ());
}
public function testConstructorWithoutLocale ()
{
$translator = new Translator ( null , new MessageSelector ());
$this -> assertNull ( $translator -> getLocale ());
}
2010-10-31 21:33:08 +00:00
public function testSetGetLocale ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2010-10-31 21:33:08 +00:00
$this -> assertEquals ( 'en' , $translator -> getLocale ());
$translator -> setLocale ( 'fr' );
$this -> assertEquals ( 'fr' , $translator -> getLocale ());
}
2014-07-04 18:20:43 +01:00
/**
* @ dataProvider getInvalidLocalesTests
* @ expectedException \InvalidArgumentException
*/
public function testSetInvalidLocale ( $locale )
{
$translator = new Translator ( 'fr' , new MessageSelector ());
$translator -> setLocale ( $locale );
}
/**
* @ dataProvider getValidLocalesTests
*/
public function testSetValidLocale ( $locale )
{
$translator = new Translator ( $locale , new MessageSelector ());
$translator -> setLocale ( $locale );
$this -> assertEquals ( $locale , $translator -> getLocale ());
}
2014-05-10 23:14:12 +01:00
public function testGetCatalogue ()
{
$translator = new Translator ( 'en' );
$this -> assertEquals ( new MessageCatalogue ( 'en' ), $translator -> getCatalogue ());
$translator -> setLocale ( 'fr' );
$this -> assertEquals ( new MessageCatalogue ( 'fr' ), $translator -> getCatalogue ( 'fr' ));
}
2015-04-22 07:26:28 +01:00
public function testGetCatalogueReturnsConsolidatedCatalogue ()
{
/*
* This will be useful once we refactor so that different domains will be loaded lazily ( on - demand ) .
* In that case , getCatalogue () will probably have to load all missing domains in order to return
* one complete catalogue .
*/
$locale = 'whatever' ;
$translator = new Translator ( $locale );
$translator -> addLoader ( 'loader-a' , new ArrayLoader ());
$translator -> addLoader ( 'loader-b' , new ArrayLoader ());
$translator -> addResource ( 'loader-a' , array ( 'foo' => 'foofoo' ), $locale , 'domain-a' );
$translator -> addResource ( 'loader-b' , array ( 'bar' => 'foobar' ), $locale , 'domain-b' );
/*
* Test that we get a single catalogue comprising messages
* from different loaders and different domains
*/
$catalogue = $translator -> getCatalogue ( $locale );
$this -> assertTrue ( $catalogue -> defines ( 'foo' , 'domain-a' ));
$this -> assertTrue ( $catalogue -> defines ( 'bar' , 'domain-b' ));
}
2013-02-17 17:30:02 +00:00
public function testSetFallbackLocales ()
2010-10-31 21:33:08 +00:00
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2010-10-31 21:33:08 +00:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), 'en' );
$translator -> addResource ( 'array' , array ( 'bar' => 'foobar' ), 'fr' );
// force catalogue loading
$translator -> trans ( 'bar' );
2013-02-17 17:30:02 +00:00
$translator -> setFallbackLocales ( array ( 'fr' ));
2010-10-31 21:33:08 +00:00
$this -> assertEquals ( 'foobar' , $translator -> trans ( 'bar' ));
}
2013-02-17 17:30:02 +00:00
public function testSetFallbackLocalesMultiple ()
2011-09-15 07:19:52 +01:00
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2011-09-15 07:19:52 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foo (en)' ), 'en' );
$translator -> addResource ( 'array' , array ( 'bar' => 'bar (fr)' ), 'fr' );
// force catalogue loading
$translator -> trans ( 'bar' );
2013-02-17 17:30:02 +00:00
$translator -> setFallbackLocales ( array ( 'fr_FR' , 'fr' ));
2011-09-15 07:19:52 +01:00
$this -> assertEquals ( 'bar (fr)' , $translator -> trans ( 'bar' ));
}
2014-07-04 18:20:43 +01:00
/**
* @ dataProvider getInvalidLocalesTests
* @ expectedException \InvalidArgumentException
*/
public function testSetFallbackInvalidLocales ( $locale )
{
$translator = new Translator ( 'fr' , new MessageSelector ());
$translator -> setFallbackLocales ( array ( 'fr' , $locale ));
}
/**
* @ dataProvider getValidLocalesTests
*/
public function testSetFallbackValidLocales ( $locale )
{
$translator = new Translator ( $locale , new MessageSelector ());
$translator -> setFallbackLocales ( array ( 'fr' , $locale ));
// no assertion. this method just asserts that no exception is thrown
}
2010-10-31 21:33:08 +00:00
public function testTransWithFallbackLocale ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'fr_FR' );
2015-04-22 07:26:28 +01:00
$translator -> setFallbackLocales ( array ( 'en' ));
2010-10-31 21:33:08 +00:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'bar' => 'foobar' ), 'en' );
$this -> assertEquals ( 'foobar' , $translator -> trans ( 'bar' ));
}
2014-07-04 18:20:43 +01:00
/**
* @ dataProvider getInvalidLocalesTests
* @ expectedException \InvalidArgumentException
*/
public function testAddResourceInvalidLocales ( $locale )
{
$translator = new Translator ( 'fr' , new MessageSelector ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), $locale );
}
/**
* @ dataProvider getValidLocalesTests
*/
public function testAddResourceValidLocales ( $locale )
{
$translator = new Translator ( 'fr' , new MessageSelector ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), $locale );
// no assertion. this method just asserts that no exception is thrown
}
2013-04-23 15:03:00 +01:00
public function testAddResourceAfterTrans ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'fr' );
2013-04-23 15:03:00 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
2015-01-02 16:09:32 +00:00
$translator -> setFallbackLocales ( array ( 'en' ));
2013-04-23 15:03:00 +01:00
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), 'en' );
$this -> assertEquals ( 'foofoo' , $translator -> trans ( 'foo' ));
$translator -> addResource ( 'array' , array ( 'bar' => 'foobar' ), 'en' );
$this -> assertEquals ( 'foobar' , $translator -> trans ( 'bar' ));
}
2012-12-13 17:37:08 +00:00
/**
* @ dataProvider getTransFileTests
2013-01-05 17:52:40 +00:00
* @ expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
2012-12-13 17:37:08 +00:00
*/
public function testTransWithoutFallbackLocaleFile ( $format , $loader )
{
$loaderClass = 'Symfony\\Component\\Translation\\Loader\\' . $loader ;
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2012-12-13 17:37:08 +00:00
$translator -> addLoader ( $format , new $loaderClass ());
$translator -> addResource ( $format , __DIR__ . '/fixtures/non-existing' , 'en' );
$translator -> addResource ( $format , __DIR__ . '/fixtures/resources.' . $format , 'en' );
// force catalogue loading
$translator -> trans ( 'foo' );
}
/**
* @ dataProvider getTransFileTests
*/
public function testTransWithFallbackLocaleFile ( $format , $loader )
{
$loaderClass = 'Symfony\\Component\\Translation\\Loader\\' . $loader ;
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en_GB' );
2012-12-13 17:37:08 +00:00
$translator -> addLoader ( $format , new $loaderClass ());
$translator -> addResource ( $format , __DIR__ . '/fixtures/non-existing' , 'en_GB' );
2012-12-13 18:47:04 +00:00
$translator -> addResource ( $format , __DIR__ . '/fixtures/resources.' . $format , 'en' , 'resources' );
2012-12-13 17:37:08 +00:00
2012-12-13 18:47:04 +00:00
$this -> assertEquals ( 'bar' , $translator -> trans ( 'foo' , array (), 'resources' ));
2012-12-13 17:37:08 +00:00
}
2011-02-27 21:18:34 +00:00
public function testTransWithFallbackLocaleBis ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en_US' );
2011-02-27 21:18:34 +00:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), 'en_US' );
$translator -> addResource ( 'array' , array ( 'bar' => 'foobar' ), 'en' );
$this -> assertEquals ( 'foobar' , $translator -> trans ( 'bar' ));
}
2011-09-15 07:19:52 +01:00
public function testTransWithFallbackLocaleTer ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'fr_FR' );
2011-09-15 07:19:52 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foo (en_US)' ), 'en_US' );
$translator -> addResource ( 'array' , array ( 'bar' => 'bar (en)' ), 'en' );
2013-02-17 17:30:02 +00:00
$translator -> setFallbackLocales ( array ( 'en_US' , 'en' ));
2011-09-15 07:19:52 +01:00
$this -> assertEquals ( 'foo (en_US)' , $translator -> trans ( 'foo' ));
$this -> assertEquals ( 'bar (en)' , $translator -> trans ( 'bar' ));
}
2011-09-21 16:23:52 +01:00
public function testTransNonExistentWithFallback ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'fr' );
2013-02-17 17:30:02 +00:00
$translator -> setFallbackLocales ( array ( 'en' ));
2011-09-21 16:23:52 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$this -> assertEquals ( 'non-existent' , $translator -> trans ( 'non-existent' ));
}
2010-10-31 21:33:08 +00:00
/**
2013-11-25 08:44:14 +00:00
* @ expectedException \RuntimeException
2010-10-31 21:33:08 +00:00
*/
public function testWhenAResourceHasNoRegisteredLoader ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2010-10-31 21:33:08 +00:00
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), 'en' );
$translator -> trans ( 'foo' );
}
2016-01-28 22:27:35 +00:00
public function testFallbackCatalogueResources ()
{
$translator = new Translator ( 'en_GB' , new MessageSelector ());
$translator -> addLoader ( 'yml' , new \Symfony\Component\Translation\Loader\YamlFileLoader ());
$translator -> addResource ( 'yml' , __DIR__ . '/fixtures/empty.yml' , 'en_GB' );
$translator -> addResource ( 'yml' , __DIR__ . '/fixtures/resources.yml' , 'en' );
// force catalogue loading
$this -> assertEquals ( 'bar' , $translator -> trans ( 'foo' , array ()));
$cataloguesProperty = new \ReflectionProperty ( $translator , 'catalogues' );
$cataloguesProperty -> setAccessible ( true );
$catalogues = $cataloguesProperty -> getValue ( $translator );
$resources = $catalogues [ 'en' ] -> getResources ();
$this -> assertCount ( 1 , $resources );
$this -> assertContains ( __DIR__ . '/fixtures/resources.yml' , $resources );
$resources = $catalogues [ 'en_GB' ] -> getResources ();
$this -> assertCount ( 2 , $resources );
$this -> assertContains ( __DIR__ . '/fixtures/empty.yml' , $resources );
$this -> assertContains ( __DIR__ . '/fixtures/resources.yml' , $resources );
}
2010-09-27 08:45:29 +01:00
/**
* @ dataProvider getTransTests
*/
public function testTrans ( $expected , $id , $translation , $parameters , $locale , $domain )
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2010-09-27 08:45:29 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
2011-04-24 08:39:28 +01:00
$translator -> addResource ( 'array' , array (( string ) $id => $translation ), $locale , $domain );
2010-09-27 08:45:29 +01:00
$this -> assertEquals ( $expected , $translator -> trans ( $id , $parameters , $domain , $locale ));
}
2014-07-04 18:20:43 +01:00
/**
* @ dataProvider getInvalidLocalesTests
* @ expectedException \InvalidArgumentException
*/
public function testTransInvalidLocale ( $locale )
{
$translator = new Translator ( 'en' , new MessageSelector ());
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), 'en' );
$translator -> trans ( 'foo' , array (), '' , $locale );
}
/**
* @ dataProvider getValidLocalesTests
*/
public function testTransValidLocale ( $locale )
{
2015-04-22 07:26:28 +01:00
$translator = new Translator ( $locale , new MessageSelector ());
2014-07-04 18:20:43 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
2015-04-22 07:26:28 +01:00
$translator -> addResource ( 'array' , array ( 'test' => 'OK' ), $locale );
2014-07-04 18:20:43 +01:00
2015-04-22 07:26:28 +01:00
$this -> assertEquals ( 'OK' , $translator -> trans ( 'test' ));
$this -> assertEquals ( 'OK' , $translator -> trans ( 'test' , array (), null , $locale ));
2014-07-04 18:20:43 +01:00
}
2010-11-14 19:31:11 +00:00
/**
* @ dataProvider getFlattenedTransTests
*/
public function testFlattenedTrans ( $expected , $messages , $id )
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2010-11-14 19:31:11 +00:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , $messages , 'fr' , '' );
$this -> assertEquals ( $expected , $translator -> trans ( $id , array (), '' , 'fr' ));
}
2010-09-27 08:45:29 +01:00
/**
* @ dataProvider getTransChoiceTests
*/
public function testTransChoice ( $expected , $id , $translation , $number , $parameters , $locale , $domain )
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'en' );
2010-09-27 08:45:29 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
2011-04-24 08:39:28 +01:00
$translator -> addResource ( 'array' , array (( string ) $id => $translation ), $locale , $domain );
2010-09-27 08:45:29 +01:00
$this -> assertEquals ( $expected , $translator -> transChoice ( $id , $number , $parameters , $domain , $locale ));
}
2014-07-04 18:20:43 +01:00
/**
* @ dataProvider getInvalidLocalesTests
* @ expectedException \InvalidArgumentException
*/
public function testTransChoiceInvalidLocale ( $locale )
{
$translator = new Translator ( 'en' , new MessageSelector ());
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), 'en' );
$translator -> transChoice ( 'foo' , 1 , array (), '' , $locale );
}
/**
* @ dataProvider getValidLocalesTests
*/
public function testTransChoiceValidLocale ( $locale )
{
$translator = new Translator ( 'en' , new MessageSelector ());
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'foo' => 'foofoo' ), 'en' );
$translator -> transChoice ( 'foo' , 1 , array (), '' , $locale );
// no assertion. this method just asserts that no exception is thrown
}
2012-12-13 17:37:08 +00:00
public function getTransFileTests ()
{
return array (
array ( 'csv' , 'CsvFileLoader' ),
array ( 'ini' , 'IniFileLoader' ),
array ( 'mo' , 'MoFileLoader' ),
array ( 'po' , 'PoFileLoader' ),
array ( 'php' , 'PhpFileLoader' ),
2012-12-13 20:23:16 +00:00
array ( 'ts' , 'QtFileLoader' ),
2012-12-13 17:37:08 +00:00
array ( 'xlf' , 'XliffFileLoader' ),
array ( 'yml' , 'YamlFileLoader' ),
2013-07-20 22:07:45 +01:00
array ( 'json' , 'JsonFileLoader' ),
2012-12-13 17:37:08 +00:00
);
}
2010-09-27 08:45:29 +01:00
public function getTransTests ()
{
return array (
2014-11-24 12:25:40 +00:00
array ( 'Symfony est super !' , 'Symfony is great!' , 'Symfony est super !' , array (), 'fr' , '' ),
array ( 'Symfony est awesome !' , 'Symfony is %what%!' , 'Symfony est %what% !' , array ( '%what%' => 'awesome' ), 'fr' , '' ),
2015-03-27 18:29:16 +00:00
array ( 'Symfony est super !' , new StringClass ( 'Symfony is great!' ), 'Symfony est super !' , array (), 'fr' , '' ),
2010-09-27 08:45:29 +01:00
);
}
2010-11-14 19:31:11 +00:00
public function getFlattenedTransTests ()
{
$messages = array (
2014-11-24 12:25:40 +00:00
'symfony' => array (
2010-11-14 19:31:11 +00:00
'is' => array (
2014-11-24 12:25:40 +00:00
'great' => 'Symfony est super!' ,
2014-09-21 19:53:12 +01:00
),
2010-11-14 19:31:11 +00:00
),
'foo' => array (
'bar' => array (
2014-09-21 19:53:12 +01:00
'baz' => 'Foo Bar Baz' ,
2010-11-14 19:31:11 +00:00
),
'baz' => 'Foo Baz' ,
),
);
return array (
2014-11-24 12:25:40 +00:00
array ( 'Symfony est super!' , $messages , 'symfony.is.great' ),
2010-11-14 19:31:11 +00:00
array ( 'Foo Bar Baz' , $messages , 'foo.bar.baz' ),
array ( 'Foo Baz' , $messages , 'foo.baz' ),
);
}
2010-09-27 08:45:29 +01:00
public function getTransChoiceTests ()
{
return array (
2013-08-24 13:29:44 +01:00
array ( 'Il y a 0 pomme' , '{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples' , '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes' , 0 , array ( '%count%' => 0 ), 'fr' , '' ),
array ( 'Il y a 1 pomme' , '{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples' , '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes' , 1 , array ( '%count%' => 1 ), 'fr' , '' ),
array ( 'Il y a 10 pommes' , '{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples' , '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes' , 10 , array ( '%count%' => 10 ), 'fr' , '' ),
2010-09-27 08:45:29 +01:00
array ( 'Il y a 0 pomme' , 'There is one apple|There is %count% apples' , 'Il y a %count% pomme|Il y a %count% pommes' , 0 , array ( '%count%' => 0 ), 'fr' , '' ),
array ( 'Il y a 1 pomme' , 'There is one apple|There is %count% apples' , 'Il y a %count% pomme|Il y a %count% pommes' , 1 , array ( '%count%' => 1 ), 'fr' , '' ),
array ( 'Il y a 10 pommes' , 'There is one apple|There is %count% apples' , 'Il y a %count% pomme|Il y a %count% pommes' , 10 , array ( '%count%' => 10 ), 'fr' , '' ),
array ( 'Il y a 0 pomme' , 'one: There is one apple|more: There is %count% apples' , 'one: Il y a %count% pomme|more: Il y a %count% pommes' , 0 , array ( '%count%' => 0 ), 'fr' , '' ),
array ( 'Il y a 1 pomme' , 'one: There is one apple|more: There is %count% apples' , 'one: Il y a %count% pomme|more: Il y a %count% pommes' , 1 , array ( '%count%' => 1 ), 'fr' , '' ),
array ( 'Il y a 10 pommes' , 'one: There is one apple|more: There is %count% apples' , 'one: Il y a %count% pomme|more: Il y a %count% pommes' , 10 , array ( '%count%' => 10 ), 'fr' , '' ),
2013-08-24 13:29:44 +01:00
array ( 'Il n\'y a aucune pomme' , '{0} There are no apples|one: There is one apple|more: There is %count% apples' , '{0} Il n\'y a aucune pomme|one: Il y a %count% pomme|more: Il y a %count% pommes' , 0 , array ( '%count%' => 0 ), 'fr' , '' ),
array ( 'Il y a 1 pomme' , '{0} There are no apples|one: There is one apple|more: There is %count% apples' , '{0} Il n\'y a aucune pomme|one: Il y a %count% pomme|more: Il y a %count% pommes' , 1 , array ( '%count%' => 1 ), 'fr' , '' ),
array ( 'Il y a 10 pommes' , '{0} There are no apples|one: There is one apple|more: There is %count% apples' , '{0} Il n\'y a aucune pomme|one: Il y a %count% pomme|more: Il y a %count% pommes' , 10 , array ( '%count%' => 10 ), 'fr' , '' ),
2011-04-24 08:39:28 +01:00
2015-03-27 18:29:16 +00:00
array ( 'Il y a 0 pomme' , new StringClass ( '{0} There are no appless|{1} There is one apple|]1,Inf] There is %count% apples' ), '[0,1] Il y a %count% pomme|]1,Inf] Il y a %count% pommes' , 0 , array ( '%count%' => 0 ), 'fr' , '' ),
2010-09-27 08:45:29 +01:00
);
}
2011-08-22 15:07:39 +01:00
2014-07-04 18:20:43 +01:00
public function getInvalidLocalesTests ()
{
return array (
array ( 'fr FR' ),
array ( 'français' ),
array ( 'fr+en' ),
array ( 'utf#8' ),
array ( 'fr&en' ),
array ( 'fr~FR' ),
array ( ' fr' ),
array ( 'fr ' ),
array ( 'fr*' ),
array ( 'fr/FR' ),
array ( 'fr\\FR' ),
);
}
public function getValidLocalesTests ()
{
return array (
array ( '' ),
array ( null ),
array ( 'fr' ),
array ( 'francais' ),
array ( 'FR' ),
array ( 'frFR' ),
array ( 'fr-FR' ),
array ( 'fr_FR' ),
array ( 'fr.FR' ),
array ( 'fr-FR.UTF8' ),
2014-07-16 20:26:05 +01:00
array ( 'sr@latin' ),
2014-07-04 18:20:43 +01:00
);
}
2011-08-22 15:07:39 +01:00
public function testTransChoiceFallback ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'ru' );
2013-02-17 17:30:02 +00:00
$translator -> setFallbackLocales ( array ( 'en' ));
2011-08-22 15:07:39 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'some_message2' => 'one thing|%count% things' ), 'en' );
$this -> assertEquals ( '10 things' , $translator -> transChoice ( 'some_message2' , 10 , array ( '%count%' => 10 )));
}
2011-09-15 07:19:52 +01:00
public function testTransChoiceFallbackBis ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'ru' );
2013-02-17 17:30:02 +00:00
$translator -> setFallbackLocales ( array ( 'en_US' , 'en' ));
2011-09-15 07:19:52 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
$translator -> addResource ( 'array' , array ( 'some_message2' => 'one thing|%count% things' ), 'en_US' );
$this -> assertEquals ( '10 things' , $translator -> transChoice ( 'some_message2' , 10 , array ( '%count%' => 10 )));
}
public function testTransChoiceFallbackWithNoTranslation ()
{
2013-11-20 02:25:44 +00:00
$translator = new Translator ( 'ru' );
2013-02-17 17:30:02 +00:00
$translator -> setFallbackLocales ( array ( 'en' ));
2011-09-15 07:19:52 +01:00
$translator -> addLoader ( 'array' , new ArrayLoader ());
2013-08-23 16:24:14 +01:00
// consistent behavior with Translator::trans(), which returns the string
// unchanged if it can't be found
$this -> assertEquals ( 'some_message2' , $translator -> transChoice ( 'some_message2' , 10 , array ( '%count%' => 10 )));
2011-09-15 07:19:52 +01:00
}
2013-07-26 10:16:23 +01:00
/**
* @ dataProvider dataProviderGetMessages
*/
public function testGetMessages ( $resources , $locale , $expected )
{
$locales = array_keys ( $resources );
2015-07-07 20:01:23 +01:00
$_locale = null !== $locale ? $locale : reset ( $locales );
2013-07-26 10:16:23 +01:00
$locales = array_slice ( $locales , 0 , array_search ( $_locale , $locales ));
$translator = new Translator ( $_locale , new MessageSelector ());
$translator -> setFallbackLocales ( array_reverse ( $locales ));
$translator -> addLoader ( 'array' , new ArrayLoader ());
foreach ( $resources as $_locale => $domainMessages ) {
foreach ( $domainMessages as $domain => $messages ) {
$translator -> addResource ( 'array' , $messages , $_locale , $domain );
}
}
$result = $translator -> getMessages ( $locale );
$this -> assertEquals ( $expected , $result );
}
public function dataProviderGetMessages ()
{
$resources = array (
'en' => array (
'jsmessages' => array (
'foo' => 'foo (EN)' ,
'bar' => 'bar (EN)' ,
),
'messages' => array (
'foo' => 'foo messages (EN)' ,
),
'validators' => array (
'int' => 'integer (EN)' ,
),
),
'pt-PT' => array (
'messages' => array (
'foo' => 'foo messages (PT)' ,
),
'validators' => array (
'str' => 'integer (PT)' ,
),
),
'pt_BR' => array (
'validators' => array (
'int' => 'integer (BR)' ,
),
),
);
return array (
array ( $resources , null ,
array (
'jsmessages' => array (
'foo' => 'foo (EN)' ,
'bar' => 'bar (EN)' ,
),
'messages' => array (
'foo' => 'foo messages (EN)' ,
),
'validators' => array (
'int' => 'integer (EN)' ,
),
),
),
array ( $resources , 'en' ,
array (
'jsmessages' => array (
'foo' => 'foo (EN)' ,
'bar' => 'bar (EN)' ,
),
'messages' => array (
'foo' => 'foo messages (EN)' ,
),
'validators' => array (
'int' => 'integer (EN)' ,
),
),
),
array ( $resources , 'pt-PT' ,
array (
'jsmessages' => array (
'foo' => 'foo (EN)' ,
'bar' => 'bar (EN)' ,
),
'messages' => array (
'foo' => 'foo messages (PT)' ,
),
'validators' => array (
'int' => 'integer (EN)' ,
'str' => 'integer (PT)' ,
),
),
),
array ( $resources , 'pt_BR' ,
array (
'jsmessages' => array (
'foo' => 'foo (EN)' ,
'bar' => 'bar (EN)' ,
),
'messages' => array (
'foo' => 'foo messages (PT)' ,
),
'validators' => array (
'int' => 'integer (BR)' ,
'str' => 'integer (PT)' ,
),
),
),
);
}
2010-09-27 08:45:29 +01:00
}
2011-04-24 08:39:28 +01:00
2015-03-27 18:29:16 +00:00
class StringClass
2011-04-24 08:39:28 +01:00
{
protected $str ;
public function __construct ( $str )
{
$this -> str = $str ;
}
public function __toString ()
{
return $this -> str ;
}
}