diff -ur /tmp/i18n/i18n.inc ./i18n.inc --- /tmp/i18n/i18n.inc 2006-08-05 19:01:54.000000000 +0200 +++ ./i18n.inc 2006-08-27 14:21:48.000000000 +0200 @@ -43,16 +43,52 @@ if($mode == 'off') return; switch ($primary_table) { case 'n': // Node queries return i18n_db_node_rewrite($query, $primary_table, $primary_key, $mode); case 't': case 'v': // Taxonomy queries + if ($mode == 'mixed_single') $mode = 'mixed'; return i18n_db_taxonomy_rewrite($query, $primary_table, $primary_key, $mode); } } @@ -80,6 +116,10 @@ return "$alias.language ='".i18n_get_lang()."' OR $alias.language ='' OR $alias.language IS NULL" ; case 'mixed': return "$alias.language ='".i18n_get_lang()."' OR $alias.language ='".i18n_default_language()."' OR $alias.language ='' OR $alias.language IS NULL" ; + case 'mixed_single': + $pref_lang = i18n_get_lang(); + $def_lang = i18n_default_language(); + return "$alias.trid = 0 OR $alias.trid IS NULL OR $alias.language ='$pref_lang' OR ($alias.language = '$def_lang' AND NOT EXISTS (SELECT * FROM `i18n_node` as i18nrw WHERE i18nrw.trid = $alias.trid AND i18nrw.language='$pref_lang') )"; case 'strict': return "$alias.language ='".i18n_get_lang()."'" ; case 'node': diff -ur /tmp/i18n/i18n.module ./i18n.module --- /tmp/i18n/i18n.module 2006-08-05 19:01:54.000000000 +0200 +++ ./i18n.module 2006-08-27 13:19:54.000000000 +0200 @@ -458,6 +458,7 @@ return array( 'simple' => t('Only current language and no language'), 'mixed' => t('Only current and default languages and no language'), + 'mixed_single' => t('All content, but remove duplicate translations favouring current language, then default language'), 'default' => t('Only default language and no language'), 'strict' => t('Only current language'), 'off' => t('All content. No language conditions apply'),