diff --git a/core/modules/language/config/schema/language.schema.yml b/core/modules/language/config/schema/language.schema.yml index 7b2ceb3..ccf7ef2 100644 --- a/core/modules/language/config/schema/language.schema.yml +++ b/core/modules/language/config/schema/language.schema.yml @@ -106,3 +106,32 @@ language.entity.*: langcode: type: string label: 'Default language' + +language.settings: + type: mapping + label: 'Language settings' + mapping: + entities: + type: sequence + label: 'Entity type' + sequence: + - type: sequence + label: 'Bundle' + sequence: + - type: mapping + label: 'Custom language settings' + mapping: + language: + type: mapping + label: 'Custom language settings' + mapping: + default_configuration: + type: mapping + label: 'Default language' + mapping: + langcode: + type: string + label: 'Default language' + language_show: + type: boolean + label: 'Show language selector on create and edit pages' diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 08cd8e0..cf24723 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -348,7 +348,7 @@ function language_get_default_configuration_settings_key($entity_type, $bundle) // Replace all the characters that are not letters, numbers or "_" with "_". $entity_type = preg_replace('/[^0-9a-zA-Z_]/', "_", $entity_type); $bundle = preg_replace('/[^0-9a-zA-Z_]/', "_", $bundle); - return $entity_type . '.' . $bundle . '.language.default_configuration'; + return 'entities.' . $entity_type . '.' . $bundle . '.language.default_configuration'; } /** diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageConfigSchemaTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageConfigSchemaTest.php new file mode 100644 index 0000000..2a5d8f5 --- /dev/null +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageConfigSchemaTest.php @@ -0,0 +1,69 @@ + 'Language config schema', + 'description' => 'Ensures the language config schema is correct.', + 'group' => 'Language', + ); + } + + /** + * {@inheritdoc} + */ + function setUp() { + parent::setUp(); + + // Create user. + $this->adminUser = $this->drupalCreateUser(array('administer languages')); + $this->drupalLogin($this->adminUser); + } + + /** + * Tests whether the language config schema is valid. + */ + function testValidLanguageConfigSchema() { + $settings_path = 'admin/config/regional/content-language'; + + // Enable translation for menu link. + $edit['entity_types[menu_link]'] = TRUE; + $edit['settings[menu_link][menu_link][settings][language][language_show]'] = TRUE; + + // Enable translation for user. + $edit['entity_types[user]'] = TRUE; + $edit['settings[user][user][settings][language][language_show]'] = TRUE; + $edit['settings[user][user][settings][language][langcode]'] = 'en'; + + $this->drupalPostForm($settings_path, $edit, t('Save')); + $this->assertConfigSchema(\Drupal::service('config.typed'), 'language.settings', \Drupal::config('language.settings')->get()); + } + +} diff --git a/core/modules/node/node.install b/core/modules/node/node.install index 36f8345..b075d93 100644 --- a/core/modules/node/node.install +++ b/core/modules/node/node.install @@ -460,7 +460,8 @@ function node_uninstall() { foreach ($types as $config_name) { $type = \Drupal::config($config_name)->get('type'); if (\Drupal::moduleHandler()->moduleExists('language')) { - \Drupal::config('language.settings')->clear('node. ' . $type . '.language.default_configuration')->save(); + $key = language_get_default_configuration_settings_key('node', $type); + \Drupal::config('language.settings')->clear($key)->save(); } }