Index: modules/locale/locale.module =================================================================== RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v retrieving revision 1.303 diff -u -p -r1.303 locale.module --- modules/locale/locale.module 9 Oct 2010 17:38:41 -0000 1.303 +++ modules/locale/locale.module 24 Oct 2010 21:10:56 -0000 @@ -923,7 +923,8 @@ function locale_block_view($type) { $path = drupal_is_front_page() ? '' : $_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); Index: modules/translation/translation.module =================================================================== RCS file: /cvs/drupal/drupal/modules/translation/translation.module,v retrieving revision 1.88 diff -u -p -r1.88 translation.module --- modules/translation/translation.module 9 Oct 2010 17:38:41 -0000 1.88 +++ modules/translation/translation.module 24 Oct 2010 21:37:00 -0000 @@ -484,7 +484,7 @@ function translation_supported_type($typ 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_translatio */ 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'; } } }