summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
Diffstat (limited to 'includes')
-rw-r--r--includes/bootstrap.inc15
-rw-r--r--includes/language.inc33
-rw-r--r--includes/locale.inc6
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);
}