Make L10n immutable

- Remove Push/Pop
- Add "withLang($lang)" method
This commit is contained in:
Philipp Holzer 2019-12-28 23:12:01 +01:00
parent ae0421f321
commit 7a2f4dc54e
No known key found for this signature in database
GPG key ID: D8365C3D36B77D90
7 changed files with 109 additions and 171 deletions

View file

@ -54,17 +54,17 @@ function notification($params)
$params['to_email'] = ($params['to_email'] ?? '') ?: $user['email']; $params['to_email'] = ($params['to_email'] ?? '') ?: $user['email'];
// from here on everything is in the recipients language // from here on everything is in the recipients language
L10n::pushLang($params['language']); $l10n = L10n::withLang($params['language']);
$banner = L10n::t('Friendica Notification'); $banner = $l10n->t('Friendica Notification');
$product = FRIENDICA_PLATFORM; $product = FRIENDICA_PLATFORM;
$siteurl = System::baseUrl(true); $siteurl = System::baseUrl(true);
$thanks = L10n::t('Thank You,'); $thanks = $l10n->t('Thank You,');
$sitename = Config::get('config', 'sitename'); $sitename = Config::get('config', 'sitename');
if (Config::get('config', 'admin_name')) { if (Config::get('config', 'admin_name')) {
$site_admin = L10n::t('%1$s, %2$s Administrator', Config::get('config', 'admin_name'), $sitename); $site_admin = $l10n->t('%1$s, %2$s Administrator', Config::get('config', 'admin_name'), $sitename);
} else { } else {
$site_admin = L10n::t('%s Administrator', $sitename); $site_admin = $l10n->t('%s Administrator', $sitename);
} }
$sender_name = $sitename; $sender_name = $sitename;
@ -133,12 +133,12 @@ function notification($params)
$itemlink = $siteurl.'/message/'.$params['item']['id']; $itemlink = $siteurl.'/message/'.$params['item']['id'];
$params["link"] = $itemlink; $params["link"] = $itemlink;
$subject = L10n::t('[Friendica:Notify] New mail received at %s', $sitename); $subject = $l10n->t('[Friendica:Notify] New mail received at %s', $sitename);
$preamble = L10n::t('%1$s sent you a new private message at %2$s.', $params['source_name'], $sitename); $preamble = $l10n->t('%1$s sent you a new private message at %2$s.', $params['source_name'], $sitename);
$epreamble = L10n::t('%1$s sent you %2$s.', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url=' . $itemlink . ']'.L10n::t('a private message').'[/url]'); $epreamble = $l10n->t('%1$s sent you %2$s.', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url=' . $itemlink . ']' . $l10n->t('a private message').'[/url]');
$sitelink = L10n::t('Please visit %s to view and/or reply to your private messages.'); $sitelink = $l10n->t('Please visit %s to view and/or reply to your private messages.');
$tsitelink = sprintf($sitelink, $siteurl.'/message/'.$params['item']['id']); $tsitelink = sprintf($sitelink, $siteurl.'/message/'.$params['item']['id']);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'/message/'.$params['item']['id'].'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'/message/'.$params['item']['id'].'">'.$sitename.'</a>');
} }
@ -147,7 +147,6 @@ function notification($params)
$thread = Item::selectFirstThreadForUser($params['uid'], ['ignored'], ['iid' => $parent_id, 'deleted' => false]); $thread = Item::selectFirstThreadForUser($params['uid'], ['ignored'], ['iid' => $parent_id, 'deleted' => false]);
if (DBA::isResult($thread) && $thread['ignored']) { if (DBA::isResult($thread) && $thread['ignored']) {
Logger::log('Thread ' . $parent_id . ' will be ignored', Logger::DEBUG); Logger::log('Thread ' . $parent_id . ' will be ignored', Logger::DEBUG);
L10n::popLang();
return false; return false;
} }
@ -156,7 +155,6 @@ function notification($params)
$condition = ['type' => [NOTIFY_TAGSELF, NOTIFY_COMMENT, NOTIFY_SHARE], $condition = ['type' => [NOTIFY_TAGSELF, NOTIFY_COMMENT, NOTIFY_SHARE],
'link' => $params['link'], 'uid' => $params['uid']]; 'link' => $params['link'], 'uid' => $params['uid']];
if (DBA::exists('notify', $condition)) { if (DBA::exists('notify', $condition)) {
L10n::popLang();
return false; return false;
} }
@ -171,13 +169,13 @@ function notification($params)
// "a post" // "a post"
if ($params['type'] == NOTIFY_TAGSELF) { if ($params['type'] == NOTIFY_TAGSELF) {
$dest_str = L10n::t('%1$s tagged you on [url=%2$s]a %3$s[/url]', $dest_str = $l10n->t('%1$s tagged you on [url=%2$s]a %3$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item_post_type $item_post_type
); );
} else { } else {
$dest_str = L10n::t('%1$s commented on [url=%2$s]a %3$s[/url]', $dest_str = $l10n->t('%1$s commented on [url=%2$s]a %3$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item_post_type $item_post_type
@ -187,14 +185,14 @@ function notification($params)
// "George Bull's post" // "George Bull's post"
if (DBA::isResult($item)) { if (DBA::isResult($item)) {
if ($params['type'] == NOTIFY_TAGSELF) { if ($params['type'] == NOTIFY_TAGSELF) {
$dest_str = L10n::t('%1$s tagged you on [url=%2$s]%3$s\'s %4$s[/url]', $dest_str = $l10n->t('%1$s tagged you on [url=%2$s]%3$s\'s %4$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item['author-name'], $item['author-name'],
$item_post_type $item_post_type
); );
} else { } else {
$dest_str = L10n::t('%1$s commented on [url=%2$s]%3$s\'s %4$s[/url]', $dest_str = $l10n->t('%1$s commented on [url=%2$s]%3$s\'s %4$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item['author-name'], $item['author-name'],
@ -206,13 +204,13 @@ function notification($params)
// "your post" // "your post"
if (DBA::isResult($item) && $item['owner-id'] == $item['author-id'] && $item['wall']) { if (DBA::isResult($item) && $item['owner-id'] == $item['author-id'] && $item['wall']) {
if ($params['type'] == NOTIFY_TAGSELF) { if ($params['type'] == NOTIFY_TAGSELF) {
$dest_str = L10n::t('%1$s tagged you on [url=%2$s]your %3$s[/url]', $dest_str = $l10n->t('%1$s tagged you on [url=%2$s]your %3$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item_post_type $item_post_type
); );
} else { } else {
$dest_str = L10n::t('%1$s commented on [url=%2$s]your %3$s[/url]', $dest_str = $l10n->t('%1$s commented on [url=%2$s]your %3$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item_post_type $item_post_type
@ -223,13 +221,13 @@ function notification($params)
// "their post" // "their post"
if (DBA::isResult($item) && $item['author-link'] == $params['source_link']) { if (DBA::isResult($item) && $item['author-link'] == $params['source_link']) {
if ($params['type'] == NOTIFY_TAGSELF) { if ($params['type'] == NOTIFY_TAGSELF) {
$dest_str = L10n::t('%1$s tagged you on [url=%2$s]their %3$s[/url]', $dest_str = $l10n->t('%1$s tagged you on [url=%2$s]their %3$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item_post_type $item_post_type
); );
} else { } else {
$dest_str = L10n::t('%1$s commented on [url=%2$s]their %3$s[/url]', $dest_str = $l10n->t('%1$s commented on [url=%2$s]their %3$s[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$itemlink, $itemlink,
$item_post_type $item_post_type
@ -242,67 +240,67 @@ function notification($params)
// Before this we have the name of the replier on the subject rendering // Before this we have the name of the replier on the subject rendering
// different subjects for messages on the same thread. // different subjects for messages on the same thread.
if ($params['type'] == NOTIFY_TAGSELF) { if ($params['type'] == NOTIFY_TAGSELF) {
$subject = L10n::t('[Friendica:Notify] %s tagged you', $params['source_name']); $subject = $l10n->t('[Friendica:Notify] %s tagged you', $params['source_name']);
$preamble = L10n::t('%1$s tagged you at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('%1$s tagged you at %2$s', $params['source_name'], $sitename);
} else { } else {
$subject = L10n::t('[Friendica:Notify] Comment to conversation #%1$d by %2$s', $parent_id, $params['source_name']); $subject = $l10n->t('[Friendica:Notify] Comment to conversation #%1$d by %2$s', $parent_id, $params['source_name']);
$preamble = L10n::t('%s commented on an item/conversation you have been following.', $params['source_name']); $preamble = $l10n->t('%s commented on an item/conversation you have been following.', $params['source_name']);
} }
$epreamble = $dest_str; $epreamble = $dest_str;
$sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $sitelink = $l10n->t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
$itemlink = $params['link']; $itemlink = $params['link'];
} }
if ($params['type'] == NOTIFY_WALL) { if ($params['type'] == NOTIFY_WALL) {
$subject = L10n::t('[Friendica:Notify] %s posted to your profile wall', $params['source_name']); $subject = $l10n->t('[Friendica:Notify] %s posted to your profile wall', $params['source_name']);
$preamble = L10n::t('%1$s posted to your profile wall at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('%1$s posted to your profile wall at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('%1$s posted to [url=%2$s]your wall[/url]', $epreamble = $l10n->t('%1$s posted to [url=%2$s]your wall[/url]',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$params['link'] $params['link']
); );
$sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $sitelink = $l10n->t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
$itemlink = $params['link']; $itemlink = $params['link'];
} }
if ($params['type'] == NOTIFY_SHARE) { if ($params['type'] == NOTIFY_SHARE) {
$subject = L10n::t('[Friendica:Notify] %s shared a new post', $params['source_name']); $subject = $l10n->t('[Friendica:Notify] %s shared a new post', $params['source_name']);
$preamble = L10n::t('%1$s shared a new post at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('%1$s shared a new post at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('%1$s [url=%2$s]shared a post[/url].', $epreamble = $l10n->t('%1$s [url=%2$s]shared a post[/url].',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$params['link'] $params['link']
); );
$sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $sitelink = $l10n->t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
$itemlink = $params['link']; $itemlink = $params['link'];
} }
if ($params['type'] == NOTIFY_POKE) { if ($params['type'] == NOTIFY_POKE) {
$subject = L10n::t('[Friendica:Notify] %1$s poked you', $params['source_name']); $subject = $l10n->t('[Friendica:Notify] %1$s poked you', $params['source_name']);
$preamble = L10n::t('%1$s poked you at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('%1$s poked you at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('%1$s [url=%2$s]poked you[/url].', $epreamble = $l10n->t('%1$s [url=%2$s]poked you[/url].',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$params['link'] $params['link']
); );
$subject = str_replace('poked', L10n::t($params['activity']), $subject); $subject = str_replace('poked', $l10n->t($params['activity']), $subject);
$preamble = str_replace('poked', L10n::t($params['activity']), $preamble); $preamble = str_replace('poked', $l10n->t($params['activity']), $preamble);
$epreamble = str_replace('poked', L10n::t($params['activity']), $epreamble); $epreamble = str_replace('poked', $l10n->t($params['activity']), $epreamble);
$sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $sitelink = $l10n->t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
$itemlink = $params['link']; $itemlink = $params['link'];
@ -310,52 +308,52 @@ function notification($params)
if ($params['type'] == NOTIFY_TAGSHARE) { if ($params['type'] == NOTIFY_TAGSHARE) {
$itemlink = $params['link']; $itemlink = $params['link'];
$subject = L10n::t('[Friendica:Notify] %s tagged your post', $params['source_name']); $subject = $l10n->t('[Friendica:Notify] %s tagged your post', $params['source_name']);
$preamble = L10n::t('%1$s tagged your post at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('%1$s tagged your post at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('%1$s tagged [url=%2$s]your post[/url]', $epreamble = $l10n->t('%1$s tagged [url=%2$s]your post[/url]',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$itemlink $itemlink
); );
$sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $sitelink = $l10n->t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
} }
if ($params['type'] == NOTIFY_INTRO) { if ($params['type'] == NOTIFY_INTRO) {
$itemlink = $params['link']; $itemlink = $params['link'];
$subject = L10n::t('[Friendica:Notify] Introduction received'); $subject = $l10n->t('[Friendica:Notify] Introduction received');
$preamble = L10n::t('You\'ve received an introduction from \'%1$s\' at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('You\'ve received an introduction from \'%1$s\' at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('You\'ve received [url=%1$s]an introduction[/url] from %2$s.', $epreamble = $l10n->t('You\'ve received [url=%1$s]an introduction[/url] from %2$s.',
$itemlink, $itemlink,
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]' '[url='.$params['source_link'].']'.$params['source_name'].'[/url]'
); );
$body = L10n::t('You may visit their profile at %s', $params['source_link']); $body = $l10n->t('You may visit their profile at %s', $params['source_link']);
$sitelink = L10n::t('Please visit %s to approve or reject the introduction.'); $sitelink = $l10n->t('Please visit %s to approve or reject the introduction.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
switch ($params['verb']) { switch ($params['verb']) {
case Activity::FRIEND: case Activity::FRIEND:
// someone started to share with user (mostly OStatus) // someone started to share with user (mostly OStatus)
$subject = L10n::t('[Friendica:Notify] A new person is sharing with you'); $subject = $l10n->t('[Friendica:Notify] A new person is sharing with you');
$preamble = L10n::t('%1$s is sharing with you at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('%1$s is sharing with you at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('%1$s is sharing with you at %2$s', $epreamble = $l10n->t('%1$s is sharing with you at %2$s',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$sitename $sitename
); );
break; break;
case Activity::FOLLOW: case Activity::FOLLOW:
// someone started to follow the user (mostly OStatus) // someone started to follow the user (mostly OStatus)
$subject = L10n::t('[Friendica:Notify] You have a new follower'); $subject = $l10n->t('[Friendica:Notify] You have a new follower');
$preamble = L10n::t('You have a new follower at %2$s : %1$s', $params['source_name'], $sitename); $preamble = $l10n->t('You have a new follower at %2$s : %1$s', $params['source_name'], $sitename);
$epreamble = L10n::t('You have a new follower at %2$s : %1$s', $epreamble = $l10n->t('You have a new follower at %2$s : %1$s',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$sitename $sitename
); );
@ -368,20 +366,20 @@ function notification($params)
if ($params['type'] == NOTIFY_SUGGEST) { if ($params['type'] == NOTIFY_SUGGEST) {
$itemlink = $params['link']; $itemlink = $params['link'];
$subject = L10n::t('[Friendica:Notify] Friend suggestion received'); $subject = $l10n->t('[Friendica:Notify] Friend suggestion received');
$preamble = L10n::t('You\'ve received a friend suggestion from \'%1$s\' at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('You\'ve received a friend suggestion from \'%1$s\' at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.', $epreamble = $l10n->t('You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.',
$itemlink, $itemlink,
'[url='.$params['item']['url'].']'.$params['item']['name'].'[/url]', '[url='.$params['item']['url'].']'.$params['item']['name'].'[/url]',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]' '[url='.$params['source_link'].']'.$params['source_name'].'[/url]'
); );
$body = L10n::t('Name:').' '.$params['item']['name']."\n"; $body = $l10n->t('Name:').' '.$params['item']['name']."\n";
$body .= L10n::t('Photo:').' '.$params['item']['photo']."\n"; $body .= $l10n->t('Photo:').' '.$params['item']['photo']."\n";
$body .= L10n::t('You may visit their profile at %s', $params['item']['url']); $body .= $l10n->t('You may visit their profile at %s', $params['item']['url']);
$sitelink = L10n::t('Please visit %s to approve or reject the suggestion.'); $sitelink = $l10n->t('Please visit %s to approve or reject the suggestion.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
} }
@ -389,34 +387,34 @@ function notification($params)
if ($params['type'] == NOTIFY_CONFIRM) { if ($params['type'] == NOTIFY_CONFIRM) {
if ($params['verb'] == Activity::FRIEND) { // mutual connection if ($params['verb'] == Activity::FRIEND) { // mutual connection
$itemlink = $params['link']; $itemlink = $params['link'];
$subject = L10n::t('[Friendica:Notify] Connection accepted'); $subject = $l10n->t('[Friendica:Notify] Connection accepted');
$preamble = L10n::t('\'%1$s\' has accepted your connection request at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('\'%1$s\' has accepted your connection request at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('%2$s has accepted your [url=%1$s]connection request[/url].', $epreamble = $l10n->t('%2$s has accepted your [url=%1$s]connection request[/url].',
$itemlink, $itemlink,
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]' '[url='.$params['source_link'].']'.$params['source_name'].'[/url]'
); );
$body = L10n::t('You are now mutual friends and may exchange status updates, photos, and email without restriction.'); $body = $l10n->t('You are now mutual friends and may exchange status updates, photos, and email without restriction.');
$sitelink = L10n::t('Please visit %s if you wish to make any changes to this relationship.'); $sitelink = $l10n->t('Please visit %s if you wish to make any changes to this relationship.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
} else { // ACTIVITY_FOLLOW } else { // ACTIVITY_FOLLOW
$itemlink = $params['link']; $itemlink = $params['link'];
$subject = L10n::t('[Friendica:Notify] Connection accepted'); $subject = $l10n->t('[Friendica:Notify] Connection accepted');
$preamble = L10n::t('\'%1$s\' has accepted your connection request at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('\'%1$s\' has accepted your connection request at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('%2$s has accepted your [url=%1$s]connection request[/url].', $epreamble = $l10n->t('%2$s has accepted your [url=%1$s]connection request[/url].',
$itemlink, $itemlink,
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]' '[url='.$params['source_link'].']'.$params['source_name'].'[/url]'
); );
$body = L10n::t('\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.', $params['source_name']); $body = $l10n->t('\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.', $params['source_name']);
$body .= "\n\n"; $body .= "\n\n";
$body .= L10n::t('\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.', $params['source_name']); $body .= $l10n->t('\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.', $params['source_name']);
$sitelink = L10n::t('Please visit %s if you wish to make any changes to this relationship.'); $sitelink = $l10n->t('Please visit %s if you wish to make any changes to this relationship.');
$tsitelink = sprintf($sitelink, $siteurl); $tsitelink = sprintf($sitelink, $siteurl);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>'); $hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
} }
@ -426,21 +424,21 @@ function notification($params)
switch($params['event']) { switch($params['event']) {
case "SYSTEM_REGISTER_REQUEST": case "SYSTEM_REGISTER_REQUEST":
$itemlink = $params['link']; $itemlink = $params['link'];
$subject = L10n::t('[Friendica System Notify]') . ' ' . L10n::t('registration request'); $subject = $l10n->t('[Friendica System Notify]') . ' ' . $l10n->t('registration request');
$preamble = L10n::t('You\'ve received a registration request from \'%1$s\' at %2$s', $params['source_name'], $sitename); $preamble = $l10n->t('You\'ve received a registration request from \'%1$s\' at %2$s', $params['source_name'], $sitename);
$epreamble = L10n::t('You\'ve received a [url=%1$s]registration request[/url] from %2$s.', $epreamble = $l10n->t('You\'ve received a [url=%1$s]registration request[/url] from %2$s.',
$itemlink, $itemlink,
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]' '[url='.$params['source_link'].']'.$params['source_name'].'[/url]'
); );
$body = L10n::t("Full Name: %s\nSite Location: %s\nLogin Name: %s (%s)", $body = $l10n->t("Full Name: %s\nSite Location: %s\nLogin Name: %s (%s)",
$params['source_name'], $params['source_name'],
$siteurl, $params['source_mail'], $siteurl, $params['source_mail'],
$params['source_nick'] $params['source_nick']
); );
$sitelink = L10n::t('Please visit %s to approve or reject the request.'); $sitelink = $l10n->t('Please visit %s to approve or reject the request.');
$tsitelink = sprintf($sitelink, $params['link']); $tsitelink = sprintf($sitelink, $params['link']);
$hsitelink = sprintf($sitelink, '<a href="'.$params['link'].'">'.$sitename.'</a><br><br>'); $hsitelink = sprintf($sitelink, '<a href="'.$params['link'].'">'.$sitename.'</a><br><br>');
break; break;
@ -524,7 +522,6 @@ function notification($params)
Hook::callAll('enotify_store', $datarray); Hook::callAll('enotify_store', $datarray);
if ($datarray['abort']) { if ($datarray['abort']) {
L10n::popLang();
return false; return false;
} }
@ -652,7 +649,6 @@ function notification($params)
'$content_allowed' => $content_allowed, '$content_allowed' => $content_allowed,
]); ]);
L10n::popLang();
// use the Emailer class to send the message // use the Emailer class to send the message
return Emailer::send([ return Emailer::send([
'uid' => $params['uid'], 'uid' => $params['uid'],
@ -667,7 +663,6 @@ function notification($params)
]); ]);
} }
L10n::popLang();
return false; return false;
} }

View file

@ -38,17 +38,16 @@ function user_allow($hash)
Worker::add(PRIORITY_LOW, "Directory", $url); Worker::add(PRIORITY_LOW, "Directory", $url);
} }
L10n::pushLang($register['language']); $l10n = L10n::withLang($register['language']);
$res = User::sendRegisterOpenEmail( $res = User::sendRegisterOpenEmail(
$l10n,
$user, $user,
Config::get('config', 'sitename'), Config::get('config', 'sitename'),
$a->getBaseUrl(), $a->getBaseUrl(),
($register['password'] ?? '') ?: 'Sent in a previous email' ($register['password'] ?? '') ?: 'Sent in a previous email'
); );
L10n::popLang();
if ($res) { if ($res) {
info(L10n::t('Account approved.') . EOL); info(L10n::t('Account approved.') . EOL);
return true; return true;

View file

@ -24,30 +24,15 @@ class L10n extends BaseObject
} }
/** /**
* This function should be called before formatting messages in a specific target language * @param string $lang
* different from the current user/system language.
* *
* It saves the current translation strings in a separate variable and loads new translations strings. * @return L10nClass The new L10n class with the new language
* *
* If called repeatedly, it won't save the translation strings again, just load the new ones. * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*
* @param string $lang Language code
*
* @throws \Exception
* @see popLang()
* @brief Stores the current language strings and load a different language.
*/ */
public static function pushLang($lang) public static function withLang(string $lang)
{ {
self::getClass(L10nClass::class)->pushLang($lang); return self::getClass(L10nClass::class)->withLang($lang);
}
/**
* Restores the original user/system language after having used pushLang()
*/
public static function popLang()
{
self::getClass(L10nClass::class)->popLang();
} }
/** /**

View file

@ -23,12 +23,6 @@ class L10n
* @var string * @var string
*/ */
private $lang = ''; private $lang = '';
/**
* A language code saved for later after pushLang() has been called.
*
* @var string
*/
private $langSave = '';
/** /**
* An array of translation strings whose key is the neutral english message. * An array of translation strings whose key is the neutral english message.
@ -36,12 +30,6 @@ class L10n
* @var array * @var array
*/ */
private $strings = []; private $strings = [];
/**
* An array of translation strings saved for later after pushLang() has been called.
*
* @var array
*/
private $stringsSave = [];
/** /**
* @var Database * @var Database
@ -53,7 +41,7 @@ class L10n
*/ */
private $logger; private $logger;
public function __construct(Configuration $config, Database $dba, LoggerInterface $logger, ISession $session, array $server, array $get) public function __construct(Configuration $config, Database $dba, LoggerInterface $logger, ISession $session, array $server, array $get)
{ {
$this->dba = $dba; $this->dba = $dba;
$this->logger = $logger; $this->logger = $logger;
@ -101,50 +89,6 @@ class L10n
} }
} }
/**
* This function should be called before formatting messages in a specific target language
* different from the current user/system language.
*
* It saves the current translation strings in a separate variable and loads new translations strings.
*
* If called repeatedly, it won't save the translation strings again, just load the new ones.
*
* @param string $lang Language code
*
* @throws \Exception
* @see popLang()
* @brief Stores the current language strings and load a different language.
*/
public function pushLang($lang)
{
if ($lang === $this->lang) {
return;
}
if (empty($this->langSave)) {
$this->langSave = $this->lang;
$this->stringsSave = $this->strings;
}
$this->loadTranslationTable($lang);
}
/**
* Restores the original user/system language after having used pushLang()
*/
public function popLang()
{
if (!isset($this->langSave)) {
return;
}
$this->strings = $this->stringsSave;
$this->lang = $this->langSave;
$this->stringsSave = null;
$this->langSave = null;
}
/** /**
* Loads string translation table * Loads string translation table
* *
@ -458,4 +402,19 @@ class L10n
return $arr; return $arr;
} }
/**
* Creates a new L10n instance based on the given langauge
*
* @param string $lang The new language
*
* @return static A new L10n instance
* @throws \Exception
*/
public function withLang(string $lang)
{
$newL10n = clone $this;
$newL10n->loadTranslationTable($lang);
return $newL10n;
}
} }

View file

@ -252,26 +252,25 @@ class Update
$sent[] = $admin['email']; $sent[] = $admin['email'];
$lang = (($admin['language'])?$admin['language']:'en'); $lang = (($admin['language'])?$admin['language']:'en');
L10n::pushLang($lang); $l10n = L10n::withLang($lang);
$preamble = Strings::deindent(L10n::t(" $preamble = Strings::deindent($l10n->t("
The friendica developers released update %s recently, The friendica developers released update %s recently,
but when I tried to install it, something went terribly wrong. but when I tried to install it, something went terribly wrong.
This needs to be fixed soon and I can't do it alone. Please contact a This needs to be fixed soon and I can't do it alone. Please contact a
friendica developer if you can not help me on your own. My database might be invalid.", friendica developer if you can not help me on your own. My database might be invalid.",
$update_id)); $update_id));
$body = L10n::t("The error message is\n[pre]%s[/pre]", $error_message); $body = $l10n->t("The error message is\n[pre]%s[/pre]", $error_message);
notification([ notification([
'uid' => $admin['uid'], 'uid' => $admin['uid'],
'type' => SYSTEM_EMAIL, 'type' => SYSTEM_EMAIL,
'to_email' => $admin['email'], 'to_email' => $admin['email'],
'subject' => l10n::t('[Friendica Notify] Database update'), 'subject' => $l10n->t('[Friendica Notify] Database update'),
'preamble' => $preamble, 'preamble' => $preamble,
'body' => $body, 'body' => $body,
'language' => $lang] 'language' => $lang]
); );
L10n::popLang();
} }
//try the logger //try the logger
@ -295,9 +294,9 @@ class Update
$sent[] = $admin['email']; $sent[] = $admin['email'];
$lang = (($admin['language']) ? $admin['language'] : 'en'); $lang = (($admin['language']) ? $admin['language'] : 'en');
L10n::pushLang($lang); $l10n = L10n::withLang($lang);
$preamble = Strings::deindent(L10n::t(" $preamble = Strings::deindent($l10n->t("
The friendica database was successfully updated from %s to %s.", The friendica database was successfully updated from %s to %s.",
$from_build, $to_build)); $from_build, $to_build));
@ -310,7 +309,6 @@ class Update
'body' => $preamble, 'body' => $preamble,
'language' => $lang] 'language' => $lang]
); );
L10n::popLang();
} }
} }

View file

@ -916,6 +916,7 @@ class User
* *
* It's here as a function because the mail is sent from different parts * It's here as a function because the mail is sent from different parts
* *
* @param L10n\L10n $l10n The used language
* @param array $user User record array * @param array $user User record array
* @param string $sitename * @param string $sitename
* @param string $siteurl * @param string $siteurl
@ -923,9 +924,9 @@ class User
* @return NULL|boolean from notification() and email() inherited * @return NULL|boolean from notification() and email() inherited
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function sendRegisterOpenEmail($user, $sitename, $siteurl, $password) public static function sendRegisterOpenEmail(L10n\L10n $l10n, $user, $sitename, $siteurl, $password)
{ {
$preamble = Strings::deindent(L10n::t( $preamble = Strings::deindent($l10n->t(
' '
Dear %1$s, Dear %1$s,
Thank you for registering at %2$s. Your account has been created. Thank you for registering at %2$s. Your account has been created.
@ -933,7 +934,7 @@ class User
$user['username'], $user['username'],
$sitename $sitename
)); ));
$body = Strings::deindent(L10n::t( $body = Strings::deindent($l10n->t(
' '
The login details are as follows: The login details are as follows:

View file

@ -228,6 +228,7 @@ class Register extends BaseModule
// Only send a password mail when the password wasn't manually provided // Only send a password mail when the password wasn't manually provided
if (empty($_POST['password1']) || empty($_POST['confirm'])) { if (empty($_POST['password1']) || empty($_POST['confirm'])) {
$res = Model\User::sendRegisterOpenEmail( $res = Model\User::sendRegisterOpenEmail(
L10n::withLang($arr['language']),
$user, $user,
Config::get('config', 'sitename'), Config::get('config', 'sitename'),
$base_url, $base_url,