--- ./print_mail/print_mail.module.orig	2009-08-20 04:19:19.000000000 +0200
+++ ./print_mail/print_mail.module	2009-08-26 16:04:52.000000000 +0200
@@ -227,6 +227,13 @@
 }
 
 /**
+ * Implementation of hook_translation_link_alter().
+ */
+function print_mail_translation_link_alter(&$links, $path) {
+  _print_alter_translation_links(&$links, $path, PRINTMAIL_PATH);
+}
+
+/**
  * Implementation of hook_form_alter().
  */
 function print_mail_form_alter(&$form, $form_state, $form_id) {
--- ./print_pdf/print_pdf.module.orig	2009-08-20 04:19:20.000000000 +0200
+++ ./print_pdf/print_pdf.module	2009-08-26 16:05:43.000000000 +0200
@@ -276,6 +276,13 @@
 }
 
 /**
+ * Implementation of hook_translation_link_alter().
+ */
+function print_pdf_translation_link_alter(&$links, $path) {
+  _print_alter_translation_links($links, $path, PRINTPDF_PATH);
+}
+
+/**
  * Implementation of hook_form_alter().
  */
 function print_pdf_form_alter(&$form, $form_state, $form_id) {
--- ./print.module.orig	2009-08-20 04:19:19.000000000 +0200
+++ ./print.module	2009-08-26 16:08:39.000000000 +0200
@@ -299,6 +299,43 @@
 }
 
 /**
+ * Implementation of hook_translation_link_alter().
+ */
+function print_translation_link_alter(&$links, $path) {
+  _print_alter_translation_links($links, $path, PRINT_PATH);
+}
+
+/**
+ * Finds translated versions of links with PRINT(MAIL|PDF)_PATH
+ * prefix via translation_translation_link_alter().
+ */
+function _print_alter_translation_links(&$links, $path, $path_prefix) {
+  $links_rewrite = array();
+  $path_relative = drupal_get_normal_path(implode('/', array_slice(explode('/', $path), 1)));
+  foreach ($links as $langcode => $link) {
+    $href = explode('/', $link['href']);
+    if (preg_match("/$path_prefix/", $href[0])) {
+      $links_rewrite[$langcode] = array(
+        'prefix' => array_shift($href),
+        'href' => drupal_get_normal_path(implode('/', $href)),
+      );
+    }
+  }
+  if (!empty($links_rewrite)) {
+    // module_invoke cannot be used (maybe with D7, see http://drupal.org/node/353494),
+    // drupal_alter would cause recursion so avoid that
+    call_user_func_array('translation_translation_link_alter', array(&$links_rewrite, $path_relative));
+    foreach ($links_rewrite as $langcode => $link) {
+      $alias = drupal_get_path_alias($link['href'], $langcode);
+      if ($alias == $link['href']) {
+        $alias = drupal_get_path_alias($link['href'], language_default()->language);
+      }
+      $links[$langcode]['href'] = $link['prefix'] .'/'. $alias;
+    }
+  }
+}
+
+/**
  * Implementation of hook_help().
  */
 function print_help($path, $arg) {
@@ -464,8 +501,11 @@
  *   string with the page's title
  */
 function _print_get_title($path) {
-  $path = drupal_get_normal_path($path);
-  $nid = preg_replace('!^node/!', '', $path);
+  $path_internal = drupal_get_normal_path($path);
+  if ($path_internal == $path) { // no path alias for current language, maybe for default?
+    $path_internal = drupal_get_normal_path($path, language_default('language'));
+  }
+  $nid = preg_replace('!^node/!', '', $path_internal);
   if (is_numeric($nid)) {
     $res = db_fetch_object(db_query("SELECT title FROM {node} WHERE nid = %d", $nid));
     return $res->title;
