Index: checkout.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/checkout/checkout.module,v
retrieving revision 1.11.2.11
diff -u -p -r1.11.2.11 checkout.module
--- checkout.module	24 Apr 2009 13:08:57 -0000	1.11.2.11
+++ checkout.module	17 Jun 2009 18:17:38 -0000
@@ -183,9 +183,10 @@ function checkout_cron() {
  */
 function checkout_handle_request($uid) {
   global $base_path;
-  
-  // Build referer path
+
+  // Rebuild internal referer path.
   $referer_uri = parse_url(referer_uri());
+
   if (variable_get('clean_url', 0)) {
     $referer = substr($referer_uri['path'], strlen($base_path));
   }
@@ -196,8 +197,47 @@ function checkout_handle_request($uid) {
     }
     $referer = isset($vars['q']) ? $vars['q'] : '';
   }
-  if ($referer = rtrim($referer, '/')) {
-    $referer = drupal_get_normal_path($referer);
+  if ($referer != '') {
+    // Need to determine language of the refering page to be able to resolve
+    // the internal path.
+    // @see language_initialize()
+    $referer_lang = '';
+
+    $mode = variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE);
+    // Get a list of enabled languages.
+    $languages = language_list('enabled');
+    $languages = $languages[1];
+  
+    switch ($mode) {
+      case LANGUAGE_NEGOTIATION_DOMAIN:
+        foreach ($languages as $language) {
+          $parts = parse_url($language->domain);
+          if (!empty($parts['host']) && ($referer_uri['host'] == $parts['host'])) {
+            $referer_lang = $language->language;
+            break;
+          }
+        }
+        break;
+
+      case LANGUAGE_NEGOTIATION_PATH_DEFAULT:
+      case LANGUAGE_NEGOTIATION_PATH:
+        // $_GET['q'] does not have a language prefix, the referer uri does.
+        // Remove it to enable comparison with $_GET['q'].
+        $args = explode('/', $referer);
+        $prefix = array_shift($args);
+        foreach ($languages as $language) {
+          if (!empty($language->prefix) && $language->prefix == $prefix) {
+            // Rebuild $referer with the language removed.
+            $referer = implode('/', $args);
+            $referer_lang = $language->language;
+            break;
+          }
+        }
+        break;
+    }
+
+    // Finally resolve alias using detected language (or default).
+    $referer = drupal_get_normal_path(rtrim($referer, '/'), $referer_lang);
   }
 
   // If refering and current paths match we can abort, since there can't be any
