diff --git a/core/modules/language/config/language.negotiation.yml b/core/modules/language/config/language.negotiation.yml new file mode 100644 index 0000000..2289761 --- /dev/null +++ b/core/modules/language/config/language.negotiation.yml @@ -0,0 +1,9 @@ +# @todo Consider to split negotiation settings into language-specific objects. +session: + parameter: language +url: + determination_part: '0' + prefixes: + en: '' + domains: + en: '' diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc index b365937..101876f 100644 --- a/core/modules/language/language.admin.inc +++ b/core/modules/language/language.admin.inc @@ -631,6 +631,9 @@ function language_negotiation_configure_form_submit($form, &$form_state) { /** * Builds the URL language negotiation method configuration form. + * + * @see language_negotiation_configure_url_form_validate() + * @see language_negotiation_configure_url_form_submit() */ function language_negotiation_configure_url_form($form, &$form_state) { global $base_url; @@ -643,7 +646,7 @@ function language_negotiation_configure_url_form($form, &$form_state) { LANGUAGE_NEGOTIATION_URL_PREFIX => t('Path prefix'), LANGUAGE_NEGOTIATION_URL_DOMAIN => t('Domain'), ), - '#default_value' => variable_get('language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_PREFIX), + '#default_value' => config('language.negotiation')->get('url.determination_part'), ); $form['prefix'] = array( @@ -695,12 +698,7 @@ function language_negotiation_configure_url_form($form, &$form_state) { $form_state['redirect'] = 'admin/config/regional/language/detection'; - $form['actions']['#type'] = 'actions'; - $form['actions']['submit'] = array( - '#type' => 'submit', - '#value' => t('Save configuration'), - ); - return $form; + return system_config_form($form, $form_state); } /** @@ -769,33 +767,44 @@ function language_negotiation_configure_url_form_validate($form, &$form_state) { } /** - * Saves the URL language negotiation method settings. + * Form submission handler for language_negotiation_configure_url_form(). */ function language_negotiation_configure_url_form_submit($form, &$form_state) { // Save selected format (prefix or domain). - variable_set('language_negotiation_url_part', $form_state['values']['language_negotiation_url_part']); + config('language.negotiation') + ->set('url.determination_part', $form_state['values']['language_negotiation_url_part']) + ->save(); // Save new domain and prefix values. language_negotiation_url_prefixes_save($form_state['values']['prefix']); language_negotiation_url_domains_save($form_state['values']['domain']); - - drupal_set_message(t('Configuration saved.')); } /** * Builds the session language negotiation method configuration form. + * + * @see language_negotiation_configure_session_form_submit() */ function language_negotiation_configure_session_form($form, &$form_state) { $form['language_negotiation_session_param'] = array( '#title' => t('Request/session parameter'), '#type' => 'textfield', - '#default_value' => variable_get('language_negotiation_session_param', 'language'), + '#default_value' => config('language.negotiation')->get('session.parameter'), '#description' => t('Name of the request/session parameter used to determine the desired language.'), ); $form_state['redirect'] = 'admin/config/regional/language/detection'; - return system_settings_form($form); + return system_config_form($form, $form_state); +} + +/** + * Form submission handler for language_negotiation_configure_session_form(). + */ +function language_negotiation_configure_session_form_submit($form, &$form_state) { + config('language.negotiation') + ->set('session.parameter', $form_state['values']['language_negotiation_session_param']) + ->save(); } /** diff --git a/core/modules/language/language.install b/core/modules/language/language.install index 2884d4b..b891ed0 100644 --- a/core/modules/language/language.install +++ b/core/modules/language/language.install @@ -37,10 +37,6 @@ function language_uninstall() { // Clear variables. variable_del('language_types'); - variable_del('language_negotiation_url_part'); - variable_del('language_negotiation_url_prefixes'); - variable_del('language_negotiation_url_domains'); - variable_del('language_negotiation_session_param'); variable_del('language_content_type_default'); variable_del('language_content_type_negotiation'); @@ -49,6 +45,10 @@ function language_uninstall() { variable_del("language_negotiation_methods_weight_$type"); } + config('language.negotiation') + ->clear('session.parameter') + ->clear('url.determination_part'); + // Re-initialize the language system so successive calls to t() and other // functions will not expect languages to be present. drupal_language_initialize(); diff --git a/core/modules/language/language.negotiation.inc b/core/modules/language/language.negotiation.inc index fa6a517..0191d17 100644 --- a/core/modules/language/language.negotiation.inc +++ b/core/modules/language/language.negotiation.inc @@ -231,7 +231,7 @@ function language_from_user_admin($languages) { * A valid language code on success, FALSE otherwise. */ function language_from_session($languages) { - $param = variable_get('language_negotiation_session_param', 'language'); + $param = config('language.negotiation')->get('session.parameter'); // Request parameter: we need to update the session parameter only if we have // an authenticated user. @@ -270,7 +270,7 @@ function language_from_url($languages, $request) { return $language_url; } - switch (variable_get('language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_PREFIX)) { + switch (config('language.negotiation')->get('url.determination_part')) { case LANGUAGE_NEGOTIATION_URL_PREFIX: $current_path = $request->attributes->get('system_path'); @@ -353,7 +353,7 @@ function language_from_url($languages, $request) { */ function language_url_fallback($language = NULL, $request = NULL, $language_type = LANGUAGE_TYPE_INTERFACE) { $default = language_default(); - $prefix = (variable_get('language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_PREFIX) == LANGUAGE_NEGOTIATION_URL_PREFIX); + $prefix = (config('language.negotiation')->get('url.determination_part') == LANGUAGE_NEGOTIATION_URL_PREFIX); // If the default language is not configured to convey language information, // a missing URL language information indicates that URL language should be @@ -394,7 +394,7 @@ function language_switcher_url($type, $path) { * Return the session language switcher block. */ function language_switcher_session($type, $path) { - $param = variable_get('language_negotiation_session_param', 'language'); + $param = config('language.negotiation')->get('session.parameter'); $language_query = isset($_SESSION[$param]) ? $_SESSION[$param] : language($type)->langcode; $languages = language_list(); @@ -448,7 +448,7 @@ function language_url_rewrite_url(&$path, &$options) { } if (isset($options['language'])) { - switch (variable_get('language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_PREFIX)) { + switch (config('language.negotiation')->get('url.determination_part')) { case LANGUAGE_NEGOTIATION_URL_DOMAIN: $domains = language_negotiation_url_domains(); if (is_object($options['language']) && !empty($domains[$options['language']->langcode])) { @@ -504,7 +504,7 @@ function language_url_rewrite_url(&$path, &$options) { * Reads language prefixes and uses the langcode if no prefix is set. */ function language_negotiation_url_prefixes() { - return variable_get('language_negotiation_url_prefixes', array()); + return config('language.negotiation')->get('url.prefixes'); } /** @@ -529,21 +529,25 @@ function language_negotiation_url_prefixes_update() { * Saves language prefix settings. */ function language_negotiation_url_prefixes_save(array $prefixes) { - variable_set('language_negotiation_url_prefixes', $prefixes); + config('language.negotiation') + ->set('url.prefixes', $prefixes) + ->save(); } /** * Reads language domains. */ function language_negotiation_url_domains() { - return variable_get('language_negotiation_url_domains', array()); + return config('language.negotiation')->get('url.domains'); } /** * Saves the language domain settings. */ function language_negotiation_url_domains_save(array $domains) { - variable_set('language_negotiation_url_domains', $domains); + config('language.negotiation') + ->set('url.domains', $domains) + ->save(); } /** @@ -558,7 +562,7 @@ function language_url_rewrite_session(&$path, &$options) { global $user; if (!$user->uid) { $languages = language_list(); - $query_param = check_plain(variable_get('language_negotiation_session_param', 'language')); + $query_param = check_plain(config('language.negotiation')->get('session.parameter')); $query_value = isset($_GET[$query_param]) ? check_plain($_GET[$query_param]) : NULL; $query_rewrite = isset($languages[$query_value]) && language_negotiation_method_enabled(LANGUAGE_NEGOTIATION_SESSION); } diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php index f04cced..0478097 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php @@ -377,7 +377,9 @@ protected function runTest($test) { language_negotiation_set(LANGUAGE_TYPE_INTERFACE, $method_weights); } if (!empty($test['language_negotiation_url_part'])) { - variable_set('language_negotiation_url_part', $test['language_negotiation_url_part']); + config('language.negotiation') + ->set('url.determination_part', $test['language_negotiation_url_part']) + ->save(); } if (!empty($test['language_test_domain'])) { variable_set('language_test_domain', $test['language_test_domain']); diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageUrlRewritingTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageUrlRewritingTest.php index 9db5011..57576be 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageUrlRewritingTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageUrlRewritingTest.php @@ -107,7 +107,9 @@ function testDomainNameNegotiationPort() { $this->drupalPost('admin/config/regional/language/detection/url', $edit, t('Save configuration')); // Enable domain configuration. - variable_set('language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_DOMAIN); + config('language.negotiation') + ->set('url.determination_part', LANGUAGE_NEGOTIATION_URL_DOMAIN) + ->save(); // Reset static caching. drupal_static_reset('language_list'); diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php index 3476db7..c101941 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php @@ -93,8 +93,10 @@ function testUninstallProcess() { variable_set('language_negotiation_' . LANGUAGE_TYPE_URL, language_language_negotiation_info()); // Change language negotiation settings. - variable_set('language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_PREFIX); - variable_set('language_negotiation_session_param', TRUE); + config('language.negotiation') + ->set('url.determination_part', LANGUAGE_NEGOTIATION_URL_PREFIX) + ->set('session.parameter', TRUE) + ->save(); // Uninstall Locale. module_disable($locale_module); @@ -126,8 +128,8 @@ function testUninstallProcess() { $this->assertTrue($language_negotiation, t('URL language negotiation: %setting', array('%setting' => t($language_negotiation ? 'none' : 'set')))); // Check language negotiation method settings. - $this->assertFalse(variable_get('language_negotiation_url_part', FALSE), t('URL language negotiation method indicator settings cleared.')); - $this->assertFalse(variable_get('language_negotiation_session_param', FALSE), t('Visit language negotiation method settings cleared.')); + $this->assertFalse(config('language.negotiation')->get('url.determination_part'), t('URL language negotiation method indicator settings cleared.')); + $this->assertFalse(config('language.negotiation')->get('session.parameter'), t('Visit language negotiation method settings cleared.')); // Check JavaScript parsed. $javascript_parsed_count = count(state()->get('system.javascript_parsed') ?: array()); diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install index b470963..a6400d6 100644 --- a/core/modules/locale/locale.install +++ b/core/modules/locale/locale.install @@ -607,6 +607,12 @@ function locale_update_8008() { update_variable_del($deprecated_variable_name); } } + update_variables_to_config('language.negotiation', array( + 'locale_language_negotiation_session_param' => 'session.parameter', + 'language_negotiation_url_part' => 'url.determination_part', + 'language_negotiation_url_prefixes' => 'url.prefixes', + 'language_negotiation_url_domains' => 'url.domains', + )); } /** diff --git a/core/modules/overlay/overlay.module b/core/modules/overlay/overlay.module index 6d78e43..256563c 100644 --- a/core/modules/overlay/overlay.module +++ b/core/modules/overlay/overlay.module @@ -696,7 +696,7 @@ function overlay_overlay_parent_initialize() { $path_prefixes = array(); if (module_exists('language')) { language_negotiation_include(); - if (variable_get('language_negotiation_url_part', LANGUAGE_NEGOTIATION_URL_PREFIX) == LANGUAGE_NEGOTIATION_URL_PREFIX) { + if (config('language.negotiation')->get('url.determination_part') == LANGUAGE_NEGOTIATION_URL_PREFIX) { // Skip the empty string indicating the default language. We always accept // paths without a prefix. $path_prefixes = language_negotiation_url_prefixes();