annotate core/modules/language/src/LanguageServiceProvider.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\language;
Chris@0 4
Chris@0 5 use Drupal\Core\Config\BootstrapConfigStorageFactory;
Chris@0 6 use Drupal\Core\DependencyInjection\ContainerBuilder;
Chris@0 7 use Drupal\Core\DependencyInjection\ServiceProviderBase;
Chris@0 8 use Drupal\Core\Language\LanguageInterface;
Chris@0 9 use Symfony\Component\DependencyInjection\Reference;
Chris@0 10
Chris@0 11 /**
Chris@0 12 * Overrides the language_manager service to point to language's module one.
Chris@0 13 */
Chris@0 14 class LanguageServiceProvider extends ServiceProviderBase {
Chris@0 15
Chris@0 16 const CONFIG_PREFIX = 'language.entity.';
Chris@0 17
Chris@0 18 /**
Chris@0 19 * {@inheritdoc}
Chris@0 20 */
Chris@0 21 public function register(ContainerBuilder $container) {
Chris@0 22 // The following services are needed only on multilingual sites.
Chris@0 23 if ($this->isMultilingual()) {
Chris@0 24 $container->register('language_request_subscriber', 'Drupal\language\EventSubscriber\LanguageRequestSubscriber')
Chris@0 25 ->addTag('event_subscriber')
Chris@0 26 ->addArgument(new Reference('language_manager'))
Chris@0 27 ->addArgument(new Reference('language_negotiator'))
Chris@0 28 ->addArgument(new Reference('string_translation'))
Chris@0 29 ->addArgument(new Reference('current_user'));
Chris@0 30
Chris@0 31 $container->register('path_processor_language', 'Drupal\language\HttpKernel\PathProcessorLanguage')
Chris@0 32 ->addTag('path_processor_inbound', ['priority' => 300])
Chris@0 33 ->addTag('path_processor_outbound', ['priority' => 100])
Chris@0 34 ->addArgument(new Reference('config.factory'))
Chris@0 35 ->addArgument(new Reference('language_manager'))
Chris@0 36 ->addArgument(new Reference('language_negotiator'))
Chris@0 37 ->addArgument(new Reference('current_user'))
Chris@0 38 ->addArgument(new Reference('language.config_subscriber'))
Chris@0 39 ->addMethodCall('initConfigSubscriber');
Chris@0 40 }
Chris@0 41 }
Chris@0 42
Chris@0 43 /**
Chris@0 44 * {@inheritdoc}
Chris@0 45 */
Chris@0 46 public function alter(ContainerBuilder $container) {
Chris@0 47 $definition = $container->getDefinition('language_manager');
Chris@0 48 $definition->setClass('Drupal\language\ConfigurableLanguageManager')
Chris@0 49 ->addArgument(new Reference('config.factory'))
Chris@0 50 ->addArgument(new Reference('module_handler'))
Chris@0 51 ->addArgument(new Reference('language.config_factory_override'))
Chris@0 52 ->addArgument(new Reference('request_stack'));
Chris@0 53 if ($default_language_values = $this->getDefaultLanguageValues()) {
Chris@0 54 $container->setParameter('language.default_values', $default_language_values);
Chris@0 55 }
Chris@0 56
Chris@0 57 }
Chris@0 58
Chris@0 59 /**
Chris@0 60 * Checks whether the site is multilingual.
Chris@0 61 *
Chris@0 62 * @return bool
Chris@0 63 * TRUE if the site is multilingual, FALSE otherwise.
Chris@0 64 */
Chris@0 65 protected function isMultilingual() {
Chris@0 66 // Assign the prefix to a local variable so it can be used in an anonymous
Chris@0 67 // function.
Chris@0 68 $prefix = static::CONFIG_PREFIX;
Chris@0 69 // @todo Try to swap out for config.storage to take advantage of database
Chris@0 70 // and caching. This might prove difficult as this is called before the
Chris@0 71 // container has finished building.
Chris@0 72 $config_storage = BootstrapConfigStorageFactory::get();
Chris@0 73 $config_ids = array_filter($config_storage->listAll($prefix), function ($config_id) use ($prefix) {
Chris@0 74 return $config_id != $prefix . LanguageInterface::LANGCODE_NOT_SPECIFIED && $config_id != $prefix . LanguageInterface::LANGCODE_NOT_APPLICABLE;
Chris@0 75 });
Chris@0 76 return count($config_ids) > 1;
Chris@0 77 }
Chris@0 78
Chris@0 79 /**
Chris@0 80 * Gets the default language values.
Chris@0 81 *
Chris@0 82 * @return array|bool
Chris@0 83 * Returns the default language values for the language configured in
Chris@0 84 * system.site:default_langcode if the corresponding configuration entity
Chris@0 85 * exists, otherwise FALSE.
Chris@0 86 */
Chris@0 87 protected function getDefaultLanguageValues() {
Chris@0 88 $config_storage = BootstrapConfigStorageFactory::get();
Chris@0 89 $system = $config_storage->read('system.site');
Chris@0 90 $default_language = $config_storage->read(static::CONFIG_PREFIX . $system['default_langcode']);
Chris@0 91 if (is_array($default_language)) {
Chris@0 92 return $default_language;
Chris@0 93 }
Chris@0 94 return FALSE;
Chris@0 95 }
Chris@0 96
Chris@0 97 }