Near the quoted code block in create_account.php is the following code, which is active when a new customer is to receive a coupon. In my case the coupon_id is 30 and defined in my /local/config.php. It appears to me that the first code block below is incorrect because it has no sprintf() command. The result is that new customers receive email with a bare '%s' in it (if EMAIL_COUPON_INCENTIVE_HEADER is define with a string parameter).
$email_text .= EMAIL_COUPON_INCENTIVE_HEADER . "\n\n" .
sprintf(EMAIL_COUPON_REDEEM, $coupon['coupon_code']) . "\n\n" .
The following code block looks more proper, but it does not do what I intend either. Rather than a bare '%s' the result in its place is nothing. I think what I should expect is the coupon description. In my case, coupon_code resolves to the correct name for my coupon_id and I have a coupon_description in my database.
$email_text .= sprintf(EMAIL_COUPON_INCENTIVE_HEADER, $coupon_desc['coupon_description']) . "\n\n" .
sprintf(EMAIL_COUPON_REDEEM, $coupon['coupon_code']) . "\n\n";
On further investigation, it appears that the query is incorrect for coupon_desc_query. The first line below does not reference 'languages_id' and it seems to work OK. The next line that is commented out is the original.
$coupon_desc_query = tep_db_query("select * from " . TABLE_COUPONS_DESCRIPTION . " where coupon_id = '" . $coupon_id . "'");
// $coupon_desc_query = tep_db_query("select * from " . TABLE_COUPONS_DESCRIPTION . " where coupon_id = '" . $coupon_id . "' and language_id = '" . languages_id . "'");
It's probably that this has been fixed. If so, probably better than this. Please let me know.