static public function create($params, LocatorInterface $locator = null) {
		if (! is_array($params) && ! $params instanceof Traversable) {
			throw new InvalidOptions('Options must be an array or a Traversable implementation');
		}
		
		if ($params instanceof Traversable) {
			$params = Std::iteratorToArray($params);
		}
		
		$translator = new Translator();
		
		foreach ($params as $param => $value) {
			if ($param === 'cacheStrategy') {
				$class = self::NAMESPACE_CACHE . '\Strategy' . ucfirst($value);
				
				$translator->setCache(new $class($locator));
				unset($params[$param]);
				continue;
			}
			
			if ($param === 'resources') {
				if (! is_array($value) && ! $value instanceof Traversable) {
					throw new InvalidOptions('Resources definition must be an array or a Traversable implementation');
				}
				
				$translator->setResources(self::createResources($value));
				unset($params[$param]);
				continue;
			}
			
			if ($param === 'bbcodes') {
				if ($value) {
					$bbcodes = new BBCodes();
					
					if (isset($params['paramsPattern'])) {
						$bbcodes->setParamsPattern($params['paramsPattern']);
					}
					
					$translator->addPlugin($bbcodes, 'bbcodes');
				}
				
				unset($params[$param]);
			}
		}
		
		$translator->setOptions($params, false, false);
		
		return $translator;
	}
static public function create($params, LocatorInterface $locator = null) {
		if (! is_array($params) && ! $params instanceof Traversable) {
			throw new InvalidOptions('Options must be an array or a Traversable implementation');
		}
		
		if ($params instanceof Traversable) {
			$params = Std::iteratorToArray($params);
		}
		
		$translator = new Translator();
		
		foreach ($params as $param => $value) {
			if ($param === 'cacheStrategy') {
				$class = self::NAMESPACE_CACHE . '\Strategy' . ucfirst($value);
				
				$translator->setCache(new $class($locator));
				unset($params[$param]);
				continue;
			}
			
			if ($param === 'resources') {
				if (! is_array($value) && ! $value instanceof Traversable) {
					throw new InvalidOptions('Resources definition must be an array or a Traversable implementation');
				}
				
				$translator->setResources(self::createResources($value));
				unset($params[$param]);
				continue;
			}
			
			if ($param === 'bbcodes') {
				if ($value) {
					$bbcodes = new BBCodes();
					
					if (isset($params['paramsPattern'])) {
						$bbcodes->setParamsPattern($params['paramsPattern']);
					}
					
					$translator->addPlugin($bbcodes, 'bbcodes');
				}
				
				unset($params[$param]);
			}
		}
		
		$translator->setOptions($params, false, false);
		
		return $translator;
	}
static public function create ( $ params , LocatorInterface $ locator = null ) { if ( ! is_array ( $ params ) && ! $ params instanceof Traversable ) { throw new InvalidOptions ( 'Options must be an array or a Traversable implementation' ) ; } if ( $ params instanceof Traversable ) { $ params = Std :: iteratorToArray ( $ params ) ; } $ translator = new Translator ( ) ; foreach ( $ params as $ param => $ value ) { if ( $ param === 'cacheStrategy' ) { $ class = self :: NAMESPACE_CACHE . '\Strategy' . ucfirst ( $ value ) ; $ translator -> setCache ( new $ class ( $ locator ) ) ; unset ( $ params [ $ param ] ) ; continue ; } if ( $ param === 'resources' ) { if ( ! is_array ( $ value ) && ! $ value instanceof Traversable ) { throw new InvalidOptions ( 'Resources definition must be an array or a Traversable implementation' ) ; } $ translator -> setResources ( self :: createResources ( $ value ) ) ; unset ( $ params [ $ param ] ) ; continue ; } if ( $ param === 'bbcodes' ) { if ( $ value ) { $ bbcodes = new BBCodes ( ) ; if ( isset ( $ params [ 'paramsPattern' ] ) ) { $ bbcodes -> setParamsPattern ( $ params [ 'paramsPattern' ] ) ; } $ translator -> addPlugin ( $ bbcodes , 'bbcodes' ) ; } unset ( $ params [ $ param ] ) ; } } $ translator -> setOptions ( $ params , false , false ) ; return $ translator ; }
Crteate the translator by the params

@param  Traversable | array $options
@param  LocatorInterface    $locator
@return Translator
@throws InvalidOptions
Crteate the translator by the params