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\Translation\Exception\NotFoundResourceException; 15 16/** 17 * CsvFileLoader loads translations from CSV files. 18 * 19 * @author Saša Stamenković <umpirsky@gmail.com> 20 */ 21class CsvFileLoader extends FileLoader 22{ 23 private $delimiter = ';'; 24 private $enclosure = '"'; 25 private $escape = '\\'; 26 27 /** 28 * {@inheritdoc} 29 */ 30 protected function loadResource($resource) 31 { 32 $messages = []; 33 34 try { 35 $file = new \SplFileObject($resource, 'rb'); 36 } catch (\RuntimeException $e) { 37 throw new NotFoundResourceException(sprintf('Error opening file "%s".', $resource), 0, $e); 38 } 39 40 $file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::SKIP_EMPTY); 41 $file->setCsvControl($this->delimiter, $this->enclosure, $this->escape); 42 43 foreach ($file as $data) { 44 if (false === $data) { 45 continue; 46 } 47 48 if ('#' !== substr($data[0], 0, 1) && isset($data[1]) && 2 === \count($data)) { 49 $messages[$data[0]] = $data[1]; 50 } 51 } 52 53 return $messages; 54 } 55 56 /** 57 * Sets the delimiter, enclosure, and escape character for CSV. 58 * 59 * @param string $delimiter Delimiter character 60 * @param string $enclosure Enclosure character 61 * @param string $escape Escape character 62 */ 63 public function setCsvControl($delimiter = ';', $enclosure = '"', $escape = '\\') 64 { 65 $this->delimiter = $delimiter; 66 $this->enclosure = $enclosure; 67 $this->escape = $escape; 68 } 69} 70