Send out welcome e-mail in users selected language
This is not a answer but can't fit this to a comment. 
From what I see in the source of user.module, the function that fires drupal_mail favors user's preferred language. 

3495 function _user_mail_notify($op, $account, $language = NULL) {
3496 // By default, we always notify except for canceled and blocked.
3497 $default_notify = ($op != 'status_canceled' &amp;&amp; $op != 'status_blocked');
3498 $notify = variable_get('user_mail_' . $op . '_notify', $default_notify);
3499 if ($notify) {
3500 $params['account'] = $account;
3501 $language = $language ? $language : user_preferred_language($account);
3502 $mail = drupal_mail('user', $op, $account-&gt;mail, $language, $params);
3503 if ($op == 'register_pending_approval') {
3504 // If a user registered requiring admin approval, notify the admin, too.
3505 // We use the site default language for this.
3506 drupal_mail('user', 'register_pending_approval_admin', variable_get('site_mail', ini_get('sendmail_from')), language_default(), $params);
3507 }
3508 }
3509 return empty($mail) ? NULL : $mail['result'];
3510 }


Note the $language param defaults to NULL and, in line 3501, if the param is NULL, it will get the user's preferred language. Moreover, none of the function calls has the third argument, so in all cases, user_preferred_language() should be used to determine the language. 

So,if you have correctly translated the message, with correct t() function's syntax, message should be translated. 

However, rather than translating the entire message, I'd suggest a dirty hook_mail_alter() hack to translate line by line with t() or completely different messages on 2 languages.