From 08f59215f7ddefc29daf5a47c113bb8566ff06cb Mon Sep 17 00:00:00 2001
From: Angie Byron <webchick@24967.no-reply.drupal.org>
Date: Mon, 25 Oct 2010 15:14:33 +0000
Subject: [PATCH] #518364 by plach, neochief, Ryan Palmer: Fixed Nodes with one
 language don't affect the language switcher block.

---
 modules/locale/locale.module           |  3 ++-
 modules/translation/translation.module | 16 ++++++++--------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/modules/locale/locale.module b/modules/locale/locale.module
index 46a3f86db226..c55d43352cba 100644
--- a/modules/locale/locale.module
+++ b/modules/locale/locale.module
@@ -923,7 +923,8 @@ function locale_block_view($type) {
     $path = drupal_is_front_page() ? '<front>' : $_GET['q'];
     $links = language_negotiation_get_switch_links($type, $path);
 
-    if (isset($links->links) && count($links->links > 1)) {
+    if (isset($links->links)) {
+      drupal_add_css(drupal_get_path('module', 'locale') . '/locale.css');
       $class = "language-switcher-{$links->provider}";
       $variables = array('links' => $links->links, 'attributes' => array('class' => array($class)));
       $block['content'] = theme('links__locale_block', $variables);
diff --git a/modules/translation/translation.module b/modules/translation/translation.module
index 837e1abdeea5..2dc318b70b57 100644
--- a/modules/translation/translation.module
+++ b/modules/translation/translation.module
@@ -484,7 +484,7 @@ function translation_supported_type($type) {
 function translation_path_get_translations($path) {
   $paths = array();
   // Check for a node related path, and for its translations.
-  if ((preg_match("!^node/([0-9]+)(/.+|)$!", $path, $matches)) && ($node = node_load((int)$matches[1])) && !empty($node->tnid)) {
+  if ((preg_match("!^node/(\d+)(/.+|)$!", $path, $matches)) && ($node = node_load((int) $matches[1])) && !empty($node->tnid)) {
     foreach (translation_node_get_translations($node->tnid) as $language => $translation_node) {
       $paths[$language] = 'node/' . $translation_node->nid . $matches[2];
     }
@@ -499,18 +499,18 @@ function translation_path_get_translations($path) {
  */
 function translation_language_switch_links_alter(array &$links, $type, $path) {
   $language_type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);
-  if ($type == $language_type && $paths = translation_path_get_translations($path)) {
-    $path = explode('/', $path);
-    $node = node_load($path[1]);
-    $translations = translation_node_get_translations($node->tnid);
+  if ($type == $language_type && preg_match("!^node/(\d+)(/.+|)!", $path, $matches) && ($node = node_load((int) $matches[1]))) {
+    $translations = $node->tnid ? translation_node_get_translations($node->tnid) : array($node->language => $node);
+
     foreach ($links as $langcode => $link) {
-      if (isset($paths[$langcode]) && $translations[$langcode]->status) {
+      if (isset($translations[$langcode]) && $translations[$langcode]->status) {
         // Translation in a different node.
-        $links[$langcode]['href'] = $paths[$langcode];
+        $links[$langcode]['href'] = 'node/' . $translations[$langcode]->nid . $matches[2];
       }
       else {
         // No translation in this language, or no permission to view.
-        unset($links[$langcode]);
+        unset($links[$langcode]['href']);
+        $links[$langcode]['attributes']['class'] = 'locale-untranslated';
       }
     }
   }
-- 
GitLab