2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Translation\DataCollector ;
use Symfony\Component\HttpFoundation\Request ;
use Symfony\Component\HttpFoundation\Response ;
use Symfony\Component\HttpKernel\DataCollector\DataCollector ;
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface ;
use Symfony\Component\Translation\DataCollectorTranslator ;
/**
* @ author Abdellatif Ait boudad < a . aitboudad @ gmail . com >
*/
class TranslationDataCollector extends DataCollector implements LateDataCollectorInterface
{
private $translator ;
public function __construct ( DataCollectorTranslator $translator )
{
$this -> translator = $translator ;
}
/**
* { @ inheritdoc }
*/
public function lateCollect ()
{
$messages = $this -> sanitizeCollectedMessages ( $this -> translator -> getCollectedMessages ());
$this -> data = $this -> computeCount ( $messages );
$this -> data [ 'messages' ] = $messages ;
2018-11-23 12:29:20 +00:00
$this -> data [ 'locale' ] = $this -> translator -> getLocale ();
$this -> data [ 'fallback_locales' ] = $this -> translator -> getFallbackLocales ();
$this -> data = $this -> cloneVar ( $this -> data );
2015-08-17 17:00:26 -07:00
}
/**
* { @ inheritdoc }
*/
public function collect ( Request $request , Response $response , \Exception $exception = null )
{
}
2018-11-23 12:29:20 +00:00
/**
* { @ inheritdoc }
*/
public function reset ()
{
$this -> data = array ();
}
2015-08-17 17:00:26 -07:00
/**
* @ return array
*/
public function getMessages ()
{
return isset ( $this -> data [ 'messages' ]) ? $this -> data [ 'messages' ] : array ();
}
/**
* @ return int
*/
public function getCountMissings ()
{
return isset ( $this -> data [ DataCollectorTranslator :: MESSAGE_MISSING ]) ? $this -> data [ DataCollectorTranslator :: MESSAGE_MISSING ] : 0 ;
}
/**
* @ return int
*/
public function getCountFallbacks ()
{
return isset ( $this -> data [ DataCollectorTranslator :: MESSAGE_EQUALS_FALLBACK ]) ? $this -> data [ DataCollectorTranslator :: MESSAGE_EQUALS_FALLBACK ] : 0 ;
}
/**
* @ return int
*/
public function getCountDefines ()
{
return isset ( $this -> data [ DataCollectorTranslator :: MESSAGE_DEFINED ]) ? $this -> data [ DataCollectorTranslator :: MESSAGE_DEFINED ] : 0 ;
}
2018-11-23 12:29:20 +00:00
public function getLocale ()
{
return ! empty ( $this -> data [ 'locale' ]) ? $this -> data [ 'locale' ] : null ;
}
public function getFallbackLocales ()
{
return ( isset ( $this -> data [ 'fallback_locales' ]) && \count ( $this -> data [ 'fallback_locales' ]) > 0 ) ? $this -> data [ 'fallback_locales' ] : array ();
}
2015-08-17 17:00:26 -07:00
/**
* { @ inheritdoc }
*/
public function getName ()
{
return 'translation' ;
}
private function sanitizeCollectedMessages ( $messages )
{
$result = array ();
foreach ( $messages as $key => $message ) {
$messageId = $message [ 'locale' ] . $message [ 'domain' ] . $message [ 'id' ];
if ( ! isset ( $result [ $messageId ])) {
$message [ 'count' ] = 1 ;
2016-04-20 09:56:34 -07:00
$message [ 'parameters' ] = ! empty ( $message [ 'parameters' ]) ? array ( $message [ 'parameters' ]) : array ();
2015-08-17 17:00:26 -07:00
$messages [ $key ][ 'translation' ] = $this -> sanitizeString ( $message [ 'translation' ]);
$result [ $messageId ] = $message ;
} else {
2016-04-20 09:56:34 -07:00
if ( ! empty ( $message [ 'parameters' ])) {
$result [ $messageId ][ 'parameters' ][] = $message [ 'parameters' ];
}
2015-10-08 11:40:12 -07:00
++ $result [ $messageId ][ 'count' ];
2015-08-17 17:00:26 -07:00
}
unset ( $messages [ $key ]);
}
return $result ;
}
private function computeCount ( $messages )
{
$count = array (
DataCollectorTranslator :: MESSAGE_DEFINED => 0 ,
DataCollectorTranslator :: MESSAGE_MISSING => 0 ,
DataCollectorTranslator :: MESSAGE_EQUALS_FALLBACK => 0 ,
);
foreach ( $messages as $message ) {
++ $count [ $message [ 'state' ]];
}
return $count ;
}
private function sanitizeString ( $string , $length = 80 )
{
$string = trim ( preg_replace ( '/\s+/' , ' ' , $string ));
2016-04-20 09:56:34 -07:00
if ( false !== $encoding = mb_detect_encoding ( $string , null , true )) {
2015-08-17 17:00:26 -07:00
if ( mb_strlen ( $string , $encoding ) > $length ) {
return mb_substr ( $string , 0 , $length - 3 , $encoding ) . '...' ;
}
2018-11-23 12:29:20 +00:00
} elseif ( \strlen ( $string ) > $length ) {
2015-08-17 17:00:26 -07:00
return substr ( $string , 0 , $length - 3 ) . '...' ;
}
return $string ;
}
}