Locale switch cleanup: use common_switch_locale() which is safer for updating gettext state. Also moved a few calls to reduce chance of hitting an exception before switching back.

Should help with problems where xmppdaemon would get stuck in wrong locale.
This commit is contained in:
Brion Vibber 2010-05-19 10:10:55 -07:00
parent 114df39822
commit 74a89b1fc3
4 changed files with 33 additions and 16 deletions

View File

@ -224,9 +224,6 @@ function mail_subscribe_notify_profile($listenee, $other)
if ($other->hasRight(Right::EMAILONSUBSCRIBE) &&
$listenee->email && $listenee->emailnotifysub) {
// use the recipient's localization
common_init_locale($listenee->language);
$profile = $listenee->getProfile();
$name = $profile->getBestName();
@ -236,6 +233,9 @@ function mail_subscribe_notify_profile($listenee, $other)
$recipients = $listenee->email;
// use the recipient's localization
common_switch_locale($listenee->language);
$headers = _mail_prepare_headers('subscribe', $listenee->nickname, $other->nickname);
$headers['From'] = mail_notify_from();
$headers['To'] = $name . ' <' . $listenee->email . '>';
@ -271,7 +271,7 @@ function mail_subscribe_notify_profile($listenee, $other)
common_local_url('emailsettings'));
// reset localization
common_init_locale();
common_switch_locale();
mail_send($recipients, $headers, $body);
}
}
@ -473,7 +473,7 @@ function mail_confirm_sms($code, $nickname, $address)
function mail_notify_nudge($from, $to)
{
common_init_locale($to->language);
common_switch_locale($to->language);
// TRANS: Subject for 'nudge' notification email
$subject = sprintf(_('You\'ve been nudged by %s'), $from->nickname);
@ -491,7 +491,7 @@ function mail_notify_nudge($from, $to)
$from->nickname,
common_local_url('all', array('nickname' => $to->nickname)),
common_config('site', 'name'));
common_init_locale();
common_switch_locale();
$headers = _mail_prepare_headers('nudge', $to->nickname, $from->nickname);
@ -525,7 +525,7 @@ function mail_notify_message($message, $from=null, $to=null)
return true;
}
common_init_locale($to->language);
common_switch_locale($to->language);
// TRANS: Subject for direct-message notification email
$subject = sprintf(_('New private message from %s'), $from->nickname);
@ -549,7 +549,7 @@ function mail_notify_message($message, $from=null, $to=null)
$headers = _mail_prepare_headers('message', $to->nickname, $from->nickname);
common_init_locale();
common_switch_locale();
return mail_to_user($to, $subject, $body, $headers);
}
@ -577,7 +577,7 @@ function mail_notify_fave($other, $user, $notice)
$bestname = $profile->getBestName();
common_init_locale($other->language);
common_switch_locale($other->language);
// TRANS: Subject for favorite notification email
$subject = sprintf(_('%s (@%s) added your notice as a favorite'), $bestname, $user->nickname);
@ -605,7 +605,7 @@ function mail_notify_fave($other, $user, $notice)
$headers = _mail_prepare_headers('fave', $other->nickname, $user->nickname);
common_init_locale();
common_switch_locale();
mail_to_user($other, $subject, $body, $headers);
}

View File

@ -34,6 +34,14 @@ function common_user_error($msg, $code=400)
$err->showPage();
}
/**
* This should only be used at setup; processes switching languages
* to send text to other users should use common_switch_locale().
*
* @param string $language Locale language code (optional; empty uses
* current user's preference or site default)
* @return mixed success
*/
function common_init_locale($language=null)
{
if(!$language) {
@ -50,6 +58,15 @@ function common_init_locale($language=null)
return $ok;
}
/**
* Initialize locale and charset settings and gettext with our message catalog,
* using the current user's language preference or the site default.
*
* This should generally only be run at framework initialization; code switching
* languages at runtime should call common_switch_language().
*
* @access private
*/
function common_init_language()
{
mb_internal_encoding('UTF-8');

View File

@ -272,12 +272,12 @@ function remove_facebook_app($flink)
function mail_facebook_app_removed($user)
{
common_init_locale($user->language);
$profile = $user->getProfile();
$site_name = common_config('site', 'name');
common_switch_locale($user->language);
$subject = sprintf(
_m('Your %1$s Facebook application access has been disabled.',
$site_name));
@ -291,7 +291,7 @@ function mail_facebook_app_removed($user)
"re-installing the %2\$s Facebook application.\n\nRegards,\n\n%2\$s"),
$user->nickname, $site_name);
common_init_locale();
common_switch_locale();
return mail_to_user($user, $subject, $body);
}

View File

@ -335,10 +335,10 @@ function remove_twitter_link($flink)
function mail_twitter_bridge_removed($user)
{
common_init_locale($user->language);
$profile = $user->getProfile();
common_switch_locale($user->language);
$subject = sprintf(_m('Your Twitter bridge has been disabled.'));
$site_name = common_config('site', 'name');
@ -354,7 +354,7 @@ function mail_twitter_bridge_removed($user)
common_local_url('twittersettings'),
common_config('site', 'name'));
common_init_locale();
common_switch_locale();
return mail_to_user($user, $subject, $body);
}