How to only allow a node to be viewed in its assigned language?
i18n_redirect module has simple code, so turn it off, and add next code to custom module:

/**
 * Implements hook_init()
 */
function CUSTOMMODULE_init() {

    $path = $_GET['q'];
    $language = i18n_language_interface();
    // Not for logged in users nor for home page
    if (!$path || drupal_is_front_page() || !empty($GLOBALS['user']-&gt;uid)) {
        return;
    }
    elseif ($translations = i18n_get_path_translations($path)) {
        if (isset($translations[$language-&gt;language]) &amp;&amp; $translations[$language-&gt;language]['href'] != $path) {
            drupal_goto($translations[$language-&gt;language]['href'], array('language' =&gt; $language), 301);
        }
        else {
            // Here we working with node, since question about node redirections
            $node = menu_get_object();
            if ($node &amp;&amp; $node-&gt;language &amp;&amp; ($node-&gt;language != $language-&gt;language)) {
                $languages = language_list();
                if (isset($languages[$node-&gt;language])) {
                    $language = $languages[$node-&gt;language];
                    drupal_goto('node/' . $node-&gt;nid, array('language' =&gt; $language), 301);
                }
            }
        }
    }
}