Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
20.00% |
1 / 5 |
CRAP | |
37.50% |
9 / 24 |
LocaleTranslation | |
0.00% |
0 / 1 |
|
20.00% |
1 / 5 |
61.85 | |
37.50% |
9 / 24 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
7 / 7 |
|||
getStringTranslation | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 6 |
|||
canTranslateEnglish | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
reset | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
destruct | |
0.00% |
0 / 1 |
7.46 | |
40.00% |
2 / 5 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\locale\LocaleTranslation. | |
*/ | |
namespace Drupal\locale; | |
use Drupal\Core\Cache\CacheBackendInterface; | |
use Drupal\Core\Config\ConfigFactoryInterface; | |
use Drupal\Core\DestructableInterface; | |
use Drupal\Core\Language\LanguageInterface; | |
use Drupal\Core\Language\LanguageManagerInterface; | |
use Drupal\Core\Lock\LockBackendInterface; | |
use Drupal\Core\StringTranslation\Translator\TranslatorInterface; | |
use Symfony\Component\HttpFoundation\RequestStack; | |
/** | |
* String translator using the locale module. | |
* | |
* Full featured translation system using locale's string storage and | |
* database caching. | |
*/ | |
class LocaleTranslation implements TranslatorInterface, DestructableInterface { | |
/** | |
* Storage for strings. | |
* | |
* @var \Drupal\locale\StringStorageInterface | |
*/ | |
protected $storage; | |
/** | |
* The configuration factory. | |
* | |
* @var \Drupal\Core\Config\ConfigFactoryInterface | |
*/ | |
protected $configFactory; | |
/** | |
* Cached translations. | |
* | |
* @var array | |
* Array of \Drupal\locale\LocaleLookup objects indexed by language code | |
* and context. | |
*/ | |
protected $translations = array(); | |
/** | |
* The cache backend that should be used. | |
* | |
* @var \Drupal\Core\Cache\CacheBackendInterface | |
*/ | |
protected $cache; | |
/** | |
* The lock backend that should be used. | |
* | |
* @var \Drupal\Core\Lock\LockBackendInterface | |
*/ | |
protected $lock; | |
/** | |
* The translate english configuration value. | |
* | |
* @var bool | |
*/ | |
protected $translateEnglish; | |
/** | |
* The language manager. | |
* | |
* @var \Drupal\Core\Language\LanguageManagerInterface | |
*/ | |
protected $languageManager; | |
/** | |
* The request stack. | |
* | |
* @var \Symfony\Component\HttpFoundation\RequestStack | |
*/ | |
protected $requestStack; | |
/** | |
* Constructs a translator using a string storage. | |
* | |
* @param \Drupal\locale\StringStorageInterface $storage | |
* Storage to use when looking for new translations. | |
* @param \Drupal\Core\Cache\CacheBackendInterface $cache | |
* The cache backend. | |
* @param \Drupal\Core\Lock\LockBackendInterface $lock | |
* The lock backend. | |
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
* The config factory. | |
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
* The language manager. | |
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack | |
* The request stack. | |
*/ | |
public function __construct(StringStorageInterface $storage, CacheBackendInterface $cache, LockBackendInterface $lock, ConfigFactoryInterface $config_factory, LanguageManagerInterface $language_manager, RequestStack $request_stack) { | |
$this->storage = $storage; | |
$this->cache = $cache; | |
$this->lock = $lock; | |
$this->configFactory = $config_factory; | |
$this->languageManager = $language_manager; | |
$this->requestStack = $request_stack; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getStringTranslation($langcode, $string, $context) { | |
// If the language is not suitable for locale module, just return. | |
if ($langcode == LanguageInterface::LANGCODE_SYSTEM || ($langcode == 'en' && !$this->canTranslateEnglish())) { | |
return FALSE; | |
} | |
// Strings are cached by langcode, context and roles, using instances of the | |
// LocaleLookup class to handle string lookup and caching. | |
if (!isset($this->translations[$langcode][$context])) { | |
$this->translations[$langcode][$context] = new LocaleLookup($langcode, $context, $this->storage, $this->cache, $this->lock, $this->configFactory, $this->languageManager, $this->requestStack); | |
} | |
$translation = $this->translations[$langcode][$context]->get($string); | |
return $translation === TRUE ? FALSE : $translation; | |
} | |
/** | |
* Gets translate english configuration value. | |
* | |
* @return bool | |
* TRUE if english should be translated, FALSE if not. | |
*/ | |
protected function canTranslateEnglish() { | |
if (!isset($this->translateEnglish)) { | |
$this->translateEnglish = $this->configFactory->get('locale.settings')->get('translate_english'); | |
} | |
return $this->translateEnglish; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function reset() { | |
unset($this->translateEnglish); | |
$this->translations = array(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function destruct() { | |
foreach ($this->translations as $context) { | |
foreach ($context as $lookup) { | |
if ($lookup instanceof DestructableInterface) { | |
$lookup->destruct(); | |
} | |
} | |
} | |
} | |
} |