Make L10n immutable

- Remove Push/Pop
- Add "withLang($lang)" method
pull/8026/head
nupplaPhil 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'];
// 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;
$siteurl = System::baseUrl(true);
$thanks = L10n::t('Thank You,');
$thanks = $l10n->t('Thank You,');
$sitename = Config::get('config', 'sitename');
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 {
$site_admin = L10n::t('%s Administrator', $sitename);
$site_admin = $l10n->t('%s Administrator', $sitename);
}
$sender_name = $sitename;
@ -133,12 +133,12 @@ function notification($params)
$itemlink = $siteurl.'/message/'.$params['item']['id'];
$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);
$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]');
$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]');
$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']);
$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]);
if (DBA::isResult($thread) && $thread['ignored']) {
Logger::log('Thread ' . $parent_id . ' will be ignored', Logger::DEBUG);
L10n::popLang();
return false;
}
@ -156,7 +155,6 @@ function notification($params)
$condition = ['type' => [NOTIFY_TAGSELF, NOTIFY_COMMENT, NOTIFY_SHARE],
'link' => $params['link'], 'uid' => $params['uid']];
if (DBA::exists('notify', $condition)) {
L10n::popLang();
return false;
}
@ -171,13 +169,13 @@ function notification($params)
// "a post"
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]',
$itemlink,
$item_post_type
);
} 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]',
$itemlink,
$item_post_type
@ -187,14 +185,14 @@ function notification($params)
// "George Bull's post"
if (DBA::isResult($item)) {
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]',
$itemlink,
$item['author-name'],
$item_post_type
);
} 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]',
$itemlink,
$item['author-name'],
@ -206,13 +204,13 @@ function notification($params)
// "your post"
if (DBA::isResult($item) && $item['owner-id'] == $item['author-id'] && $item['wall']) {
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]',
$itemlink,
$item_post_type
);
} 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]',
$itemlink,
$item_post_type
@ -223,13 +221,13 @@ function notification($params)
// "their post"
if (DBA::isResult($item) && $item['author-link'] == $params['source_link']) {
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]',
$itemlink,
$item_post_type
);
} 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]',
$itemlink,
$item_post_type
@ -242,67 +240,67 @@ function notification($params)
// Before this we have the name of the replier on the subject rendering
// different subjects for messages on the same thread.
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 {
$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;
$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);
$hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
$itemlink = $params['link'];
}
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);
$epreamble = L10n::t('%1$s posted to [url=%2$s]your wall[/url]',
$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]',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
$itemlink = $params['link'];
}
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);
$epreamble = L10n::t('%1$s [url=%2$s]shared a post[/url].',
$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].',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
$itemlink = $params['link'];
}
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);
$epreamble = L10n::t('%1$s [url=%2$s]poked you[/url].',
$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].',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$params['link']
);
$subject = str_replace('poked', L10n::t($params['activity']), $subject);
$preamble = str_replace('poked', L10n::t($params['activity']), $preamble);
$epreamble = str_replace('poked', L10n::t($params['activity']), $epreamble);
$subject = str_replace('poked', $l10n->t($params['activity']), $subject);
$preamble = str_replace('poked', $l10n->t($params['activity']), $preamble);
$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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
$itemlink = $params['link'];
@ -310,52 +308,52 @@ function notification($params)
if ($params['type'] == NOTIFY_TAGSHARE) {
$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);
$epreamble = L10n::t('%1$s tagged [url=%2$s]your post[/url]',
$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]',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
}
if ($params['type'] == NOTIFY_INTRO) {
$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);
$epreamble = L10n::t('You\'ve received [url=%1$s]an introduction[/url] from %2$s.',
$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.',
$itemlink,
'[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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
switch ($params['verb']) {
case Activity::FRIEND:
// 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);
$epreamble = L10n::t('%1$s is sharing with you at %2$s',
$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',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$sitename
);
break;
case Activity::FOLLOW:
// 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);
$epreamble = L10n::t('You have a new follower at %2$s : %1$s',
$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',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$sitename
);
@ -368,20 +366,20 @@ function notification($params)
if ($params['type'] == NOTIFY_SUGGEST) {
$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);
$epreamble = L10n::t('You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.',
$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.',
$itemlink,
'[url='.$params['item']['url'].']'.$params['item']['name'].'[/url]',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]'
);
$body = L10n::t('Name:').' '.$params['item']['name']."\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('Name:').' '.$params['item']['name']."\n";
$body .= $l10n->t('Photo:').' '.$params['item']['photo']."\n";
$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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
}
@ -389,34 +387,34 @@ function notification($params)
if ($params['type'] == NOTIFY_CONFIRM) {
if ($params['verb'] == Activity::FRIEND) { // mutual connection
$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);
$epreamble = L10n::t('%2$s has accepted your [url=%1$s]connection request[/url].',
$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].',
$itemlink,
'[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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
} else { // ACTIVITY_FOLLOW
$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);
$epreamble = L10n::t('%2$s has accepted your [url=%1$s]connection request[/url].',
$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].',
$itemlink,
'[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 .= 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);
$hsitelink = sprintf($sitelink, '<a href="'.$siteurl.'">'.$sitename.'</a>');
}
@ -426,21 +424,21 @@ function notification($params)
switch($params['event']) {
case "SYSTEM_REGISTER_REQUEST":
$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);
$epreamble = L10n::t('You\'ve received a [url=%1$s]registration request[/url] from %2$s.',
$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.',
$itemlink,
'[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'],
$siteurl, $params['source_mail'],
$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']);
$hsitelink = sprintf($sitelink, '<a href="'.$params['link'].'">'.$sitename.'</a><br><br>');
break;
@ -524,7 +522,6 @@ function notification($params)
Hook::callAll('enotify_store', $datarray);
if ($datarray['abort']) {
L10n::popLang();
return false;
}
@ -652,7 +649,6 @@ function notification($params)
'$content_allowed' => $content_allowed,
]);
L10n::popLang();
// use the Emailer class to send the message
return Emailer::send([
'uid' => $params['uid'],
@ -667,7 +663,6 @@ function notification($params)
]);
}
L10n::popLang();
return false;
}

View File

@ -38,17 +38,16 @@ function user_allow($hash)
Worker::add(PRIORITY_LOW, "Directory", $url);
}
L10n::pushLang($register['language']);
$l10n = L10n::withLang($register['language']);
$res = User::sendRegisterOpenEmail(
$l10n,
$user,
Config::get('config', 'sitename'),
$a->getBaseUrl(),
($register['password'] ?? '') ?: 'Sent in a previous email'
);
L10n::popLang();
if ($res) {
info(L10n::t('Account approved.') . EOL);
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
* different from the current user/system language.
* @param string $lang
*
* 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.
*
* @param string $lang Language code
*
* @throws \Exception
* @see popLang()
* @brief Stores the current language strings and load a different language.
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function pushLang($lang)
public static function withLang(string $lang)
{
self::getClass(L10nClass::class)->pushLang($lang);
}
/**
* Restores the original user/system language after having used pushLang()
*/
public static function popLang()
{
self::getClass(L10nClass::class)->popLang();
return self::getClass(L10nClass::class)->withLang($lang);
}
/**

View File

@ -23,12 +23,6 @@ class L10n
* @var string
*/
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.
@ -36,12 +30,6 @@ class L10n
* @var array
*/
private $strings = [];
/**
* An array of translation strings saved for later after pushLang() has been called.
*
* @var array
*/
private $stringsSave = [];
/**
* @var Database
@ -53,7 +41,7 @@ class L10n
*/
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->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
*
@ -458,4 +402,19 @@ class L10n
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'];
$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,
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
friendica developer if you can not help me on your own. My database might be invalid.",
$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([
'uid' => $admin['uid'],
'type' => SYSTEM_EMAIL,
'to_email' => $admin['email'],
'subject' => l10n::t('[Friendica Notify] Database update'),
'subject' => $l10n->t('[Friendica Notify] Database update'),
'preamble' => $preamble,
'body' => $body,
'language' => $lang]
);
L10n::popLang();
}
//try the logger
@ -295,9 +294,9 @@ class Update
$sent[] = $admin['email'];
$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.",
$from_build, $to_build));
@ -310,7 +309,6 @@ class Update
'body' => $preamble,
'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
*
* @param L10n\L10n $l10n The used language
* @param array $user User record array
* @param string $sitename
* @param string $siteurl
@ -923,9 +924,9 @@ class User
* @return NULL|boolean from notification() and email() inherited
* @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,
Thank you for registering at %2$s. Your account has been created.
@ -933,7 +934,7 @@ class User
$user['username'],
$sitename
));
$body = Strings::deindent(L10n::t(
$body = Strings::deindent($l10n->t(
'
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
if (empty($_POST['password1']) || empty($_POST['confirm'])) {
$res = Model\User::sendRegisterOpenEmail(
L10n::withLang($arr['language']),
$user,
Config::get('config', 'sitename'),
$base_url,