Index: simplenews.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplenews/simplenews.admin.inc,v
retrieving revision 1.59.2.2
diff -u -p -r1.59.2.2 simplenews.admin.inc
--- simplenews.admin.inc	27 Dec 2009 11:37:06 -0000	1.59.2.2
+++ simplenews.admin.inc	2 Jan 2010 00:00:27 -0000
@@ -465,7 +465,7 @@ function simplenews_subscription_list_ad
       '#title' => t('Anonymous user preferred language'),
       '#default_value' => '',
       '#options' => $options,
-      '#description' => t('Anonymous users will be subscribed with the selected preferred language. They will receive newsletters in this language if available. Registered users will be subscribed with their preferred language as set on their account page.'),
+      '#description' => t('New subscriptions will be subscribed with the selected preferred language. The language of existing subscribers is unchanged.'),
     );
   }
   else {
@@ -752,6 +752,7 @@ function simplenews_subscription_list_fo
     $form['mail'][$subscription->snid] = array('#value' => $subscription->mail);
     $form['name'][$subscription->snid] =  array('#value' => isset($subscription->uid) ? l($subscription->name, 'user/'. $subscription->uid) : $subscription->name);
     $form['status'][$subscription->snid] = array('#value' => theme('simplenews_status', $subscription->activated, 'activated'));
+    $form['language'][$subscription->snid] = array('#value' => $subscription->language);
     $form['operations'][$subscription->snid] = array('#value' => l(t('edit'), 'admin/content/simplenews/users/edit/'. $subscription->snid, array(), drupal_get_destination()));
   }
   $form['snids'] = array('#type' => 'checkboxes', '#options' => $snids);
@@ -1255,6 +1256,7 @@ function theme_simplenews_subscription_l
     array('data' => t('Email'), 'field' => 'ss.mail', 'sort' => 'asc'),
     array('data' => t('Username'), 'field' => 'u.name'),
     array('data' => t('Status'), 'field' => 'ss.activated'),
+    array('data' => t('Language'), 'field' => 'ss.language'),
     t('Operations')
   );
 
@@ -1267,6 +1269,7 @@ function theme_simplenews_subscription_l
       $row[] = drupal_render($form['mail'][$key]);
       $row[] = drupal_render($form['name'][$key]);
       $row[] = drupal_render($form['status'][$key]);
+      $row[] = drupal_render($form['language'][$key]);
       $row[] = drupal_render($form['operations'][$key]);
       $rows[] = $row;
     }
Index: simplenews.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplenews/simplenews.module,v
retrieving revision 1.220.2.4
diff -u -p -r1.220.2.4 simplenews.module
--- simplenews.module	1 Jan 2010 19:59:25 -0000	1.220.2.4
+++ simplenews.module	2 Jan 2010 00:00:28 -0000
@@ -822,7 +822,8 @@ function simplenews_user($op, &$edit, &$
       if ($category == 'newsletter' && user_access('subscribe to newsletters')) {
         foreach ($edit['newsletters'] as $tid => $checked) {
           if ($checked) {
-            simplenews_subscribe_user($account->mail, $tid, FALSE, 'website');
+            $subscriber = simplenews_subscribe_user($account->mail, $tid, FALSE, 'website');
+            simplenews_subscriber_update($subscriber->snid, array('language' => $edit['language']));
           }
           else {
             simplenews_unsubscribe_user($account->mail, $tid, FALSE, 'website');
@@ -850,6 +851,22 @@ function simplenews_user($op, &$edit, &$
         $form = _simplenews_subscription_manager_form($subscription);
         $form['subscriptions']['#title'] =  t('Current newsletter subscriptions');
         unset($form['update'], $form['subscriptions']['mail']);
+        
+        // Add language selection option.
+        if (variable_get('language_count', 1) > 1) {
+          $options[''] = t('Site default language');
+          $languages = language_list('enabled');
+          foreach ($languages[1] as $langcode => $item) {
+            $name = t($item->name);
+            $options[$langcode] = $name . ($item->native != $name ? ' ('. $item->native .')' : '');
+          }
+          $form['subscriptions']['language'] = array(
+            '#title' => t('Preferred language'),
+            '#type' => 'select',
+            '#default_value' => $subscription->language->language,
+            '#options' => $options,
+          );
+        }
         return $form;
       }
       break;
@@ -1025,6 +1042,20 @@ function _simplenews_user_load($mail) {
 }
 
 /**
+ * Update subscriber data.
+ *
+ * @param $snid
+ *   Subscribers ID.
+ * @param $data
+ *   Array of data to be updated
+ *   'language'
+ */
+function simplenews_subscriber_update($snid, $data) {
+  $language = isset($data['language']) ? $snid['language'] : '';
+  db_query("UPDATE {simplenews_subscriptions} SET language = '%s' WHERE snid = %d", $language, $snid);
+}
+
+/**
  * Subscribe a user to a newsletter or send a confirmation mail.
  *
  * The $confirm parameter determines the action:
@@ -1032,6 +1063,8 @@ function _simplenews_user_load($mail) {
  *   TRUE  = User receives an email to verify the address and complete the subscription
  * A new subscription account is created when the user is subscribed to the first newsletter
  *
+ * This function does NOT update language information if account already exists.
+ * 
  * @param string $mail
  *   The email address to subscribe to the newsletter.
  * @param integer $tid
@@ -1048,6 +1081,9 @@ function _simplenews_user_load($mail) {
  *    mass subscribe: mass admin UI
  *    mass unsubscribe: mass admin UI
  *    action: Drupal actions
+ *
+ * @return $subscription
+ *   Subscription object.
  */
 function simplenews_subscribe_user($mail, $tid, $confirm = TRUE, $source = 'unknown', $preferred_language = NULL) {
   global $language;
@@ -1115,7 +1151,8 @@ function simplenews_subscribe_user($mail
     // Execute simplenews subscribe trigger.
     simplenews_call_actions('subscribe', $subscription);
   }
-  return TRUE;
+
+  return $subscription;
 }
 
 /**
@@ -1302,6 +1339,7 @@ function _simplenews_subscription_manage
   // If current user is logged in, just display email.
   // Anonymous users see an email box and will receive confirmations
   if ($subscription->mail) {
+    $form['subscriptions']['language'] = array('#value' => $subscription->language->language);
     $form['subscriptions']['#title'] = t('Subscriptions for %mail', array('%mail' => $subscription->mail));
     $form['subscriptions']['mail'] = array('#type' => 'value', '#value' => $subscription->mail);
     $form['update'] = array(
