Alias not working for a non default language When I create a node in a non default language, I set an alias.  After the node is saved, however, all internal links (e.g. menus) do not use the alias; they all use the node/[nid] link type, and when I navigate to the alias it returns the "page not found" error.

Aliases work fine for the nodes using the default language, and for language neutral nodes.

I enabled the Locale and the Content translation modules.
By default url alias created manually or by Pathauto works only for the language of the node. 

But you could make it work for all languages ina few simple steps:


go to the page "admin/config/search/path", 
find required url alias and click "edit"
select "All languages" in "Language" field and save


That's all, now this url alias will be active despite of what language has the user. 

If manual change is not an option, you can:


try to use "neutral_paths" module (though it is in a sandbox mode)
create simple module that wil do the same


Module forces url aliases to be language neutral, it works both for pathtauto and manual path aliases:

&lt;?php
/**
 * Implements hook_path_insert().
 */
function MYMODULE_path_insert($path) {
    _MYMODULE_path_language_fix($path['pid']);
}
/**
 * Implements hook_path_update().
 */
function MYMODULE_path_update($path) {
    _MYMODULE_path_language_fix($path['pid']);
}
/**
 * Fixing a given path id.
 */
function _MYMODULE_path_language_fix($pid) {
    db_update('url_alias')
        -&gt;fields(array('language' =&gt; LANGUAGE_NONE))
        -&gt;condition('pid', $pid)
        -&gt;execute();
}
?&gt;


If you already have lot of existing content with not correct languhae for aliases, then run this code

&lt;?php
function _neutral_paths_set_all_to_neutral($type) {
    $num_updated = db_update('url_alias')
        -&gt;fields(array('language' =&gt; LANGUAGE_NONE))
        -&gt;condition('language', LANGUAGE_NONE, '!=')
        -&gt;condition('source', $type . '/%', 'LIKE')
        -&gt;execute();
    if ($num_updated &gt; 0) {
        drupal_set_message(t('@num aliases were reset to language neutral', array('@num' =&gt; $num_updated)));
    }
    else {
        drupal_set_message(t('No aliases were updated.') . $type);
    }
}
_neutral_paths_set_all_to_neutral('node');
?&gt;