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\Loader ;
use Symfony\Component\Translation\Exception\InvalidResourceException ;
use Symfony\Component\Translation\Exception\NotFoundResourceException ;
use Symfony\Component\Config\Resource\FileResource ;
/**
* JsonFileLoader loads translations from an json file .
*
* @ author singles
*/
2015-08-27 12:03:05 -07:00
class JsonFileLoader extends ArrayLoader
2015-08-17 17:00:26 -07:00
{
/**
* { @ inheritdoc }
*/
public function load ( $resource , $locale , $domain = 'messages' )
{
if ( ! stream_is_local ( $resource )) {
throw new InvalidResourceException ( sprintf ( 'This is not a local file "%s".' , $resource ));
}
if ( ! file_exists ( $resource )) {
throw new NotFoundResourceException ( sprintf ( 'File "%s" not found.' , $resource ));
}
2015-08-27 12:03:05 -07:00
$messages = array ();
if ( $data = file_get_contents ( $resource )) {
$messages = json_decode ( $data , true );
2015-08-17 17:00:26 -07:00
2015-08-27 12:03:05 -07:00
if ( 0 < $errorCode = json_last_error ()) {
throw new InvalidResourceException ( sprintf ( 'Error parsing JSON - %s' , $this -> getJSONErrorMessage ( $errorCode )));
}
2015-08-17 17:00:26 -07:00
}
if ( null === $messages ) {
$messages = array ();
}
$catalogue = parent :: load ( $messages , $locale , $domain );
$catalogue -> addResource ( new FileResource ( $resource ));
return $catalogue ;
}
/**
* Translates JSON_ERROR_ * constant into meaningful message .
*
* @ param int $errorCode Error code returned by json_last_error () call
*
* @ return string Message string
*/
private function getJSONErrorMessage ( $errorCode )
{
switch ( $errorCode ) {
case JSON_ERROR_DEPTH :
return 'Maximum stack depth exceeded' ;
case JSON_ERROR_STATE_MISMATCH :
return 'Underflow or the modes mismatch' ;
case JSON_ERROR_CTRL_CHAR :
return 'Unexpected control character found' ;
case JSON_ERROR_SYNTAX :
return 'Syntax error, malformed JSON' ;
case JSON_ERROR_UTF8 :
return 'Malformed UTF-8 characters, possibly incorrectly encoded' ;
default :
return 'Unknown error' ;
}
}
}