diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/bootstrap.inc | 15 | ||||
-rw-r--r-- | includes/language.inc | 33 | ||||
-rw-r--r-- | includes/locale.inc | 6 |
3 files changed, 51 insertions, 3 deletions
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc index fe9a95471..83ab8ba0b 100644 --- a/includes/bootstrap.inc +++ b/includes/bootstrap.inc @@ -1627,7 +1627,7 @@ function drupal_language_initialize() { // Ensure the language is correctly returned, even without multilanguage support. // Useful for eg. XML/HTML 'lang' attributes. - if (variable_get('language_count', 1) == 1) { + if (!drupal_multilingual()) { $default = language_default(); foreach ($types as $type) { $GLOBALS[$type] = $default; @@ -1657,6 +1657,17 @@ function drupal_language_types() { } /** + * Return true if there is more than one language enabled. + */ +function drupal_multilingual() { + static $multilingual; + if (!isset($multilingual)) { + $multilingual = variable_get('language_count', 1) > 1; + } + return $multilingual; +} + +/** * Return an array of the available language types. */ function language_types() { @@ -1672,7 +1683,7 @@ function language_list($field = 'language') { $languages = &drupal_static(__FUNCTION__); // Init language list if (!isset($languages)) { - if (variable_get('language_count', 1) > 1 || module_exists('locale')) { + if (drupal_multilingual() || module_exists('locale')) { $languages['language'] = db_query('SELECT * FROM {languages} ORDER BY weight ASC, name ASC')->fetchAllAssoc('language'); } else { diff --git a/includes/language.inc b/includes/language.inc index f170cf9a0..2fff7f3ba 100644 --- a/includes/language.inc +++ b/includes/language.inc @@ -396,3 +396,36 @@ function language_url_split_prefix($path, $languages) { return array(FALSE, $path); } + +/** + * Return the possible fallback languages ordered by language weight. + * + * @param + * The language type. + * + * @return + * An array of language codes. + */ +function language_fallback_get_candidates($type = LANGUAGE_TYPE_CONTENT) { + $fallback_candidates = &drupal_static(__FUNCTION__); + + if (!isset($fallback_candidates)) { + $fallback_candidates = array(); + + // Get languages ordered by weight. + // Use array keys to avoid duplicated entries. + foreach (language_list('weight') as $languages) { + foreach ($languages as $language) { + $fallback_candidates[$language->language] = NULL; + } + } + + $fallback_candidates = array_keys($fallback_candidates); + $fallback_candidates[] = FIELD_LANGUAGE_NONE; + + // Let other modules hook in and add/change candidates. + drupal_alter('language_get_fallback_candidates', $fallback_candidates); + } + + return $fallback_candidates; +} diff --git a/includes/locale.inc b/includes/locale.inc index 8768be7dc..b905477f0 100644 --- a/includes/locale.inc +++ b/includes/locale.inc @@ -161,6 +161,7 @@ function locale_languages_overview_form_submit($form, &$form_state) { // Changing the language settings impacts the interface. cache_clear_all('*', 'cache_page', TRUE); + module_invoke_all('multilingual_settings_changed'); $form_state['redirect'] = 'admin/config/regional/language'; return; @@ -362,6 +363,8 @@ function locale_languages_predefined_form_submit($form, &$form_state) { batch_set($batch); } + module_invoke_all('multilingual_settings_changed'); + $form_state['redirect'] = 'admin/config/regional/language'; return; } @@ -469,7 +472,8 @@ function locale_languages_delete_form_submit($form, &$form_state) { ->fields(array('language' => '')) ->condition('language', $form_state['values']['langcode']) ->execute(); - $variables = array('%locale' => $languages[$form_state['values']['langcode']]->name); + module_invoke_all('multilingual_settings_changed'); + $variables = array('%locale' => $languages[$form_state['values']['langcode']]->name); drupal_set_message(t('The language %locale has been removed.', $variables)); watchdog('locale', 'The language %locale has been removed.', $variables); } |