Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 46 |
LanguageServiceProvider | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
132 | |
0.00% |
0 / 46 |
register | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 18 |
|||
alter | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 14 |
|||
isMultilingual | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 2 |
|||
anonymous function | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 2 |
|||
getDefaultLanguageValues | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\language\LanguageServiceProvider. | |
*/ | |
namespace Drupal\language; | |
use Drupal\Core\Config\BootstrapConfigStorageFactory; | |
use Drupal\Core\DependencyInjection\ContainerBuilder; | |
use Drupal\Core\DependencyInjection\ServiceProviderBase; | |
use Drupal\Core\Language\LanguageInterface; | |
use Symfony\Component\DependencyInjection\Reference; | |
/** | |
* Overrides the language_manager service to point to language's module one. | |
*/ | |
class LanguageServiceProvider extends ServiceProviderBase { | |
const CONFIG_PREFIX = 'language.entity.'; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function register(ContainerBuilder $container) { | |
// The following services are needed only on multilingual sites. | |
if ($this->isMultilingual()) { | |
$container->register('language_request_subscriber', 'Drupal\language\EventSubscriber\LanguageRequestSubscriber') | |
->addTag('event_subscriber') | |
->addArgument(new Reference('language_manager')) | |
->addArgument(new Reference('language_negotiator')) | |
->addArgument(new Reference('string_translation')) | |
->addArgument(new Reference('current_user')); | |
$container->register('path_processor_language', 'Drupal\language\HttpKernel\PathProcessorLanguage') | |
->addTag('path_processor_inbound', array('priority' => 300)) | |
->addTag('path_processor_outbound', array('priority' => 100)) | |
->addArgument(new Reference('config.factory')) | |
->addArgument(new Reference('language_manager')) | |
->addArgument(new Reference('language_negotiator')) | |
->addArgument(new Reference('current_user')) | |
->addArgument(new Reference('language.config_subscriber')) | |
->addMethodCall('initConfigSubscriber'); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function alter(ContainerBuilder $container) { | |
$definition = $container->getDefinition('language_manager'); | |
$definition->setClass('Drupal\language\ConfigurableLanguageManager') | |
->addArgument(new Reference('config.factory')) | |
->addArgument(new Reference('module_handler')) | |
->addArgument(new Reference('language.config_factory_override')) | |
->addArgument(new Reference('request_stack')); | |
if ($default_language_values = $this->getDefaultLanguageValues()) { | |
$container->setParameter('language.default_values', $default_language_values); | |
} | |
// For monolingual sites, we explicitly set the default language for the | |
// language config override service as there is no language negotiation. | |
if (!$this->isMultilingual()) { | |
$container->getDefinition('language.config_factory_override') | |
->addMethodCall('setLanguageFromDefault', array(new Reference('language.default'))); | |
} | |
} | |
/** | |
* Checks whether the site is multilingual. | |
* | |
* @return bool | |
* TRUE if the site is multilingual, FALSE otherwise. | |
*/ | |
protected function isMultilingual() { | |
// Assign the prefix to a local variable so it can be used in an anonymous | |
// function. | |
$prefix = static::CONFIG_PREFIX; | |
// @todo Try to swap out for config.storage to take advantage of database | |
// and caching. This might prove difficult as this is called before the | |
// container has finished building. | |
$config_storage = BootstrapConfigStorageFactory::get(); | |
$config_ids = array_filter($config_storage->listAll($prefix), function($config_id) use ($prefix) { | |
return $config_id != $prefix . LanguageInterface::LANGCODE_NOT_SPECIFIED && $config_id != $prefix . LanguageInterface::LANGCODE_NOT_APPLICABLE; | |
}); | |
return count($config_ids) > 1; | |
} | |
/** | |
* Gets the default language values. | |
* | |
* @return array|bool | |
* Returns the default language values for the language configured in | |
* system.site:default_langcode if the corresponding configuration entity | |
* exists, otherwise FALSE. | |
*/ | |
protected function getDefaultLanguageValues() { | |
$config_storage = BootstrapConfigStorageFactory::get(); | |
$system = $config_storage->read('system.site'); | |
$default_language = $config_storage->read(static::CONFIG_PREFIX . $system['default_langcode']); | |
if (is_array($default_language)) { | |
return $default_language; | |
} | |
return FALSE; | |
} | |
} |