12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- /**
- *
- * Cube Framework $Id$ 8ayRqQn16Y9D2mRwM9m/NmlHqAWKvGZGjuwEFXObHjc=
- *
- * @link http://codecu.be/framework
- * @copyright Copyright (c) 2014 CodeCube SRL
- * @license http://codecu.be/framework/license Commercial License
- *
- * @version 1.0
- */
- /**
- * composite translate adapter
- * will combine the sentences from multiple adapters, based on the data inserted
- */
- namespace Ppb\Translate\Adapter;
- use Cube\Translate\Adapter,
- Cube\Config\AbstractConfig,
- Cube\Locale;
- class Composite extends Adapter\AbstractAdapter
- {
- public function addTranslation($options = array())
- {
- if (!is_array($options) && !($options instanceof AbstractConfig)) {
- throw new \InvalidArgumentException("The translation object requires an
- array or an object of type \Cube\ConfigAbstract.");
- }
- else {
- if ($options instanceof AbstractConfig) {
- $options = $options->getData();
- }
- if (!isset($options['path'])) {
- throw new \InvalidArgumentException("The 'path' key must be set.");
- }
- $locale = (isset($options['locale'])) ? $options['locale'] : null;
- if (Locale::isLocale($locale) === false) {
- throw new \InvalidArgumentException(
- sprintf("Add translation method error: '%s' is an invalid locale.", $locale));
- }
- if (!array_key_exists($locale, $this->_translate)) {
- $this->_translate[$locale] = array();
- }
- if (!empty($options['sources'])) {
- foreach ($options['sources'] as $source) {
- if (!isset($source['adapter'])) {
- throw new \InvalidArgumentException("The 'adapter' sub-key must be set.");
- }
- if (!isset($source['extension'])) {
- throw new \InvalidArgumentException("The 'extension' sub-key must be set.");
- }
- $translateAdapter = $source['adapter'];
- if (!class_exists($translateAdapter)) {
- throw new \InvalidArgumentException(
- sprintf("Class %s doesn't exist", $translateAdapter));
- }
- /** @var \Cube\Translate\Adapter\AbstractAdapter $adapter */
- $adapter = new $translateAdapter(array(
- 'file' => $options['path'] . '.' . $source['extension'],
- 'locale' => $locale,
- ));
- $translation = $adapter->getTranslate();
- foreach ($translation as $locale => $sentences) {
- $this->_translate[$locale] = array_merge($this->_translate[$locale], $sentences);
- }
- }
- }
- }
- return $this;
- }
- }
|