Issue #2684873 by alexpott, dawehner, Xano: ConfigurableLanguageManager::getConfigOverrideLanguage() returns NULL

8.3.x
Nathaniel Catchpole 2016-09-02 13:26:11 +01:00
parent dd67ab2d90
commit f8923c890b
5 changed files with 54 additions and 9 deletions

View File

@ -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 }

View File

@ -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();
}
/**

View File

@ -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);

View File

@ -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')));
}
}
/**

View File

@ -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());
}
}