Issue #2684873 by alexpott, dawehner, Xano: ConfigurableLanguageManager::getConfigOverrideLanguage() returns NULL
							parent
							
								
									dd67ab2d90
								
							
						
					
					
						commit
						f8923c890b
					
				| 
						 | 
				
			
			@ -14,7 +14,7 @@ services:
 | 
			
		|||
      - { name: event_subscriber }
 | 
			
		||||
  language.config_factory_override:
 | 
			
		||||
    class: Drupal\language\Config\LanguageConfigFactoryOverride
 | 
			
		||||
    arguments: ['@config.storage', '@event_dispatcher', '@config.typed']
 | 
			
		||||
    arguments: ['@config.storage', '@event_dispatcher', '@config.typed', '@language.default']
 | 
			
		||||
    tags:
 | 
			
		||||
      - { name: config.factory.override, priority: -254 }
 | 
			
		||||
      - { name: event_subscriber }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,11 +68,16 @@ class LanguageConfigFactoryOverride extends ConfigFactoryOverrideBase implements
 | 
			
		|||
   *   An event dispatcher instance to use for configuration events.
 | 
			
		||||
   * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config
 | 
			
		||||
   *   The typed configuration manager.
 | 
			
		||||
   * @param \Drupal\Core\Language\LanguageDefault $default_language
 | 
			
		||||
   *   The default language.
 | 
			
		||||
   */
 | 
			
		||||
  public function __construct(StorageInterface $storage, EventDispatcherInterface $event_dispatcher, TypedConfigManagerInterface $typed_config) {
 | 
			
		||||
  public function __construct(StorageInterface $storage, EventDispatcherInterface $event_dispatcher, TypedConfigManagerInterface $typed_config, LanguageDefault $default_language) {
 | 
			
		||||
    $this->baseStorage = $storage;
 | 
			
		||||
    $this->eventDispatcher = $event_dispatcher;
 | 
			
		||||
    $this->typedConfigManager = $typed_config;
 | 
			
		||||
    // Prior to negiotiation the override language should be the default
 | 
			
		||||
    // language.
 | 
			
		||||
    $this->language = $default_language->get();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,10 @@ interface LanguageConfigFactoryOverrideInterface extends ConfigFactoryOverrideIn
 | 
			
		|||
   *   The default language.
 | 
			
		||||
   *
 | 
			
		||||
   * @return $this
 | 
			
		||||
   *
 | 
			
		||||
   * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.0. This
 | 
			
		||||
   *   method has been replaced by injecting the default language into the
 | 
			
		||||
   *   constructor.
 | 
			
		||||
   */
 | 
			
		||||
  public function setLanguageFromDefault(LanguageDefault $language_default = NULL);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,13 +54,6 @@ class LanguageServiceProvider extends ServiceProviderBase {
 | 
			
		|||
      $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')));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Drupal\Tests\language\Kernel;
 | 
			
		||||
 | 
			
		||||
use Drupal\language\Entity\ConfigurableLanguage;
 | 
			
		||||
use Drupal\KernelTests\KernelTestBase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests \Drupal\language\Config\LanguageConfigFactoryOverride.
 | 
			
		||||
 *
 | 
			
		||||
 * @group language
 | 
			
		||||
 */
 | 
			
		||||
class LanguageConfigFactoryOverrideTest extends KernelTestBase {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Modules to enable.
 | 
			
		||||
   *
 | 
			
		||||
   * @var array
 | 
			
		||||
   */
 | 
			
		||||
  public static $modules = array('system', 'language');
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests language.config_factory_override service has the default language.
 | 
			
		||||
   */
 | 
			
		||||
  public function testLanguageConfigFactoryOverride() {
 | 
			
		||||
    $this->installConfig('system');
 | 
			
		||||
    $this->installConfig('language');
 | 
			
		||||
 | 
			
		||||
    /** @var \Drupal\language\Config\LanguageConfigFactoryOverride $config_factory_override */
 | 
			
		||||
    $config_factory_override = \Drupal::service('language.config_factory_override');
 | 
			
		||||
    $this->assertEquals('en', $config_factory_override->getLanguage()->getId());
 | 
			
		||||
 | 
			
		||||
    ConfigurableLanguage::createFromLangcode('de')->save();
 | 
			
		||||
 | 
			
		||||
    // Invalidate the container.
 | 
			
		||||
    $this->config('system.site')->set('default_langcode', 'de')->save();
 | 
			
		||||
    drupal_flush_all_caches();
 | 
			
		||||
 | 
			
		||||
    $config_factory_override = \Drupal::service('language.config_factory_override');
 | 
			
		||||
    $this->assertEquals('de', $config_factory_override->getLanguage()->getId());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue