? path_alias_lang.patch
Index: path.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.module,v
retrieving revision 1.138.2.3
diff -u -p -r1.138.2.3 path.module
--- path.module	22 Nov 2008 10:49:15 -0000	1.138.2.3
+++ path.module	8 Oct 2010 22:54:21 -0000
@@ -105,7 +105,7 @@ function path_set_alias($path = NULL, $a
     if ($alias == drupal_get_path_alias($path, $language)) {
       // There is already such an alias, neutral or in this language.
       // Update the alias based on alias; setting the language if not yet done.
-      db_query("UPDATE {url_alias} SET src = '%s', dst = '%s', language = '%s' WHERE dst = '%s'", $path, $alias, $language, $alias);
+      db_query("UPDATE {url_alias} SET src = '%s', dst = '%s', language = '%s' WHERE dst = '%s' AND language = '%s'", $path, $alias, $language, $alias, $language);
     }
     else {
       // A new alias. Add it to the database.
@@ -115,10 +115,20 @@ function path_set_alias($path = NULL, $a
   else {
     // Delete the alias.
     if ($alias) {
-      db_query("DELETE FROM {url_alias} WHERE dst = '%s'", $alias);
+      if ($language) {
+        db_query("DELETE FROM {url_alias} WHERE dst = '%s' AND language = '%s'", $alias, $language);
+      }
+      else {
+        db_query("DELETE FROM {url_alias} WHERE dst = '%s'", $alias);
+      }
     }
     else {
-      db_query("DELETE FROM {url_alias} WHERE src = '%s'", $path);
+      if ($language) {
+        db_query("DELETE FROM {url_alias} WHERE src = '%s' AND language = '%s'", $path, $language);
+      }
+      else {
+        db_query("DELETE FROM {url_alias} WHERE src = '%s'", $path);
+      }
     }
   }
   drupal_clear_path_cache();
@@ -168,7 +178,7 @@ function path_nodeapi(&$node, $op, $arg)
       case 'delete':
         $path = 'node/'. $node->nid;
         if (drupal_get_path_alias($path) != $path) {
-          path_set_alias($path);
+          path_set_alias($path, NULL, NULL, $language);
         }
         break;
     }
