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(