Drupal: 7.19
ET: 7.x-1.x-dev (first, than downgraded to 7.x-1.0-beta2)
Pathauto: 7.x-1.2

Detection and selection (both user interface and content): Session only, node not use alias
Language switcher block (content) works, content language switches.
Switching language with content translation links works but adds ?language=[langcode] to the URL. After using content translation links language switcher (content) does not work, drupal stays on the same page (and the block on the same language).

Detection and selection (both user interface and content): Session only, node path aliased
Both Language switcher block (content) and Switching language with content translation links lead to "page not found". URL stays the same but the language changes in the switcher block.

Detection and selection (both user interface and content): URL (first) and Session (second), node path not aliased
Language switcher (content) does not work, Drupal stays on the same page (and the block on the same language).
Switching language with content translation link works, does not add anything to the URL.

Detection and selection (both user interface and content): URL (first) and Session (second), node path aliased
Language switcher (content) does not work, Drupal stays on the same page (and the block on the same language).
Switching language with content translation link works, does not add anything to the URL.

Comments

I'm pretty sure at least one of the issues you are reporting is #1294946: Language detection based on session doesn't work with URL aliases.

Thanks for pointing to that issue. I looked for realated issues, but didn't find this. I'm sure they are related but there must be something more here…

Now I tested the swithching with URL only detection method and the lang switceher block does not work with this setting too. However I discerned that it switches the default language of the site in the background. Is it the normal, expected behaviour?

AFAIK content language affects mostly the language fields are displayed in. Obviously if both UI and content language are configured to follow URL language the content language switcher will affect both fields and UI strings.

You can create a languageswitcher by yourself, here is a sample:

/**
* Implements hook_block_info().
*/
function YOURMODULE_block_info() {
$blocks = array();
$blocks['languageswitcher'] = array(
'info' => t('Customized Language Switcher'),
);
$blocks['toppages'] = array(
'info' => t('Top Pages'),
);
return $blocks;
}
/**
* Implements hook_block_view().
*/
function YOURMODULE_block_view($delta = '') {
$block = array();
global $language;
switch($delta) {
case 'languageswitcher':
$block['subject'] = t('Switch your language:');
$sql = "
SELECT
language,
native
FROM
languages
WHERE
enabled = 1
ORDER BY
weight ASC
";
$result = db_query($sql);
$block['content'] = '<ul class="language-switcher-locale-url">';
foreach($result as $row) {
$block['content'] .= ($language->language == $row->language) ? '<li class="'.$row->language.' active">' : '<li class="'.$row->language.'">';
$path = "";
// $block['content'] .= arg(0);
switch(true) {
case (arg(0)=='taxonomy' && arg(1) == 'term'):
// Für Terms
$path = drupal_lookup_path('alias', 'taxonomy/term/'.(int)arg(2), $row->language);
break;
case (arg(0)=='node' && is_numeric(arg(1))):
// Für Nodes
$path = drupal_lookup_path('alias', 'node/'.(int)arg(1), $row->language);
break;
default:
// Für Views und andere multilinguale Seiten
$path = current_path();
}
if($path !== false ) {
$block['content'] .= '<a href="/'.$row->language.'/'.$path.'">'.$row->native.'</a>';
} else {
$block['content'] .= '<a href="#" class="inactive">'.$row->native.'</a>';
}
$block['content'] .= '</li>';
}
$block['content'] .= '</ul>';
break;
}
return $block;
}

Thanks mkweb!
You saved my life.

Issue summary:View changes