diff --git a/includes/form.inc b/includes/form.inc index decca00..4cfe5f6 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -2533,6 +2533,51 @@ function form_process_select($element) { } /** + * Processes a language select list form element. + * + * @param $element + * The form element to process. + */ +function form_process_language_select($element) { + // If #only_enabled => TRUE, show only the enabled + // languages in the select. + $only_enabled = isset($element['#only_enabled']) ? $element['#only_enabled'] : FALSE; + // Locale has a list of predefined languages. Use that if this option is true. + $use_predefined_languages = isset($element['#use_predefined_languages']) ? $element['#use_predefined_languages'] : FALSE; + if (!$only_enabled) { + if (module_exists('locale') && $use_predefined_languages) { + $options = _locale_prepare_predefined_list(); + $element['#default_value'] = key($options); + } + else { + include_once DRUPAL_ROOT . '/includes/standard.inc'; + $standard_languages = standard_language_list(); + $get_first = function($value) { + return $value[0]; + }; + $options = array_map($get_first, $standard_languages); + $element['#empty_value'] = LANGUAGE_NONE; + $element['#empty_option'] = t('Language neutral'); + } + $element['#options'] = $options; + $element['#theme'] = 'select'; + $element['#theme_wrappers'] = array('form_element'); + } + else if (module_exists('locale')) { + $element['#empty_value'] = LANGUAGE_NONE; + $element['#empty_option'] = t('Language neutral'); + $element['#theme'] = 'select'; + $element['#theme_wrappers'] = array('form_element'); + $element['#options'] = locale_language_list('name'); + } + else { + $element['#theme_wrappers'] = NULL; + $element['#process'] = array('form_process_language_select'); + } + return $element; +} + +/** * Returns HTML for a select form element. * * It is possible to group options together; to do this, change the format of @@ -4442,3 +4487,4 @@ function _batch_queue($batch_set) { /** * @} End of "defgroup batch". */ + diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc index cd2edf5..afe5de4 100644 --- a/modules/locale/locale.admin.inc +++ b/modules/locale/locale.admin.inc @@ -189,14 +189,16 @@ function locale_languages_add_screen() { */ function locale_languages_predefined_form($form) { $predefined = _locale_prepare_predefined_list(); - $form['language list'] = array('#type' => 'fieldset', + $form['language list'] = array( + '#type' => 'fieldset', '#title' => t('Predefined language'), '#collapsible' => TRUE, ); - $form['language list']['langcode'] = array('#type' => 'select', + $form['language list']['langcode'] = array( + '#type' => 'language_select', '#title' => t('Language name'), - '#default_value' => key($predefined), - '#options' => $predefined, + '#use_predefined_languages' => TRUE, + '#only_enabled' => FALSE, '#description' => t('Use the Custom language section below if your desired language does not appear in this list.'), ); $form['language list']['actions'] = array('#type' => 'actions'); diff --git a/modules/path/path.admin.inc b/modules/path/path.admin.inc index f10142b..b9c17cf 100644 --- a/modules/path/path.admin.inc +++ b/modules/path/path.admin.inc @@ -132,8 +132,11 @@ function path_admin_form($form, &$form_state, $path = array('source' => '', 'ali // This will be a hidden value unless locale module is enabled. $form['language'] = array( - '#type' => 'value', - '#value' => $path['language'] + '#type' => 'language_select', + '#only_enabled' => TRUE, + '#value' => $path['language'], + '#description' => t('A path alias set for a specific language will always be used when displaying this page in that language, and takes precedence over path aliases set for All languages.'), + '#weight' => -10, ); $form['actions'] = array('#type' => 'actions'); diff --git a/modules/system/system.module b/modules/system/system.module index d7dc69c..5bd01fe 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -452,6 +452,12 @@ function system_element_info() { '#empty' => '', '#theme' => 'tableselect', ); + $types['language_select'] = array( + '#input' => TRUE, + '#multiple' => FALSE, + '#process' => array('form_process_language_select', 'form_process_select', 'ajax_process_form'), + '#title' => t('Language'), + ); // Form structure. $types['item'] = array(