1<?php 2 3/* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Symfony\Component\Translation\Loader; 13 14use Symfony\Component\Config\Resource\FileResource; 15use Symfony\Component\Translation\Exception\InvalidResourceException; 16use Symfony\Component\Translation\Exception\NotFoundResourceException; 17use Symfony\Component\Translation\MessageCatalogue; 18 19/** 20 * IcuResFileLoader loads translations from a resource bundle. 21 * 22 * @author stealth35 23 */ 24class IcuDatFileLoader extends IcuResFileLoader 25{ 26 /** 27 * {@inheritdoc} 28 */ 29 public function load($resource, $locale, $domain = 'messages') 30 { 31 if (!stream_is_local($resource.'.dat')) { 32 throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); 33 } 34 35 if (!file_exists($resource.'.dat')) { 36 throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); 37 } 38 39 try { 40 $rb = new \ResourceBundle($locale, $resource); 41 } catch (\Exception $e) { 42 $rb = null; 43 } 44 45 if (!$rb) { 46 throw new InvalidResourceException(sprintf('Cannot load resource "%s".', $resource)); 47 } elseif (intl_is_failure($rb->getErrorCode())) { 48 throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode()); 49 } 50 51 $messages = $this->flatten($rb); 52 $catalogue = new MessageCatalogue($locale); 53 $catalogue->add($messages, $domain); 54 55 if (class_exists(FileResource::class)) { 56 $catalogue->addResource(new FileResource($resource.'.dat')); 57 } 58 59 return $catalogue; 60 } 61} 62