--- simplenews.module#5
+++ simplenews.module
@@ -730,11 +730,23 @@
 * Send the newsletter
 */
 function _sn_send($timer = FALSE) {
+  global $locale;
+  
   $start_time = sn_time();
   $max_time = variable_get('simplenews_time', 5);
   $max_time = $max_time - 0.5;
   $result = db_query('SELECT s.nid, s.tid, n.created FROM {node} n INNER JOIN {sn_newsletters} s ON n.nid = s.nid WHERE s.s_status = %d ORDER BY n.created ASC', 1);
   while ($nid = db_fetch_object($result)) {
+    // Force the locale to the language of the node. This allows t() to use the
+    // proper localized texts when this code executes from a cron job.
+    if (function_exists('i18n_node_get_lang')) {
+      $old_locale = $locale;
+      $node_lang = i18n_node_get_lang($nid->nid);
+      if (!empty($node_lang)) {
+        $locale = $node_lang;
+      }
+    }
+    
     $node = simplenews_node_prepare($nid->nid);
     $result2 = db_query('SELECT s.mail, s.snid FROM {sn_subscriptions} s INNER JOIN {sn_snid_tid} t ON s.snid = t.snid WHERE s.s_status = %d AND s.a_status = %d AND t.tid = %d', 0, 1, $nid->tid);
     while ($mail = db_fetch_object($result2)) {
@@ -775,6 +787,11 @@
     if (!($int_time - $start_time < $max_time)) {
       return;
     }
+
+    // Restore the locale
+    if (isset($old_locale)) {
+      $locale = $old_locale;
+    }
   }
 }
 
