From 7a2f4dc54ee94d54df46dd3ae6a8b8fa8aa8072e Mon Sep 17 00:00:00 2001 From: nupplaPhil Date: Sat, 28 Dec 2019 23:12:01 +0100 Subject: [PATCH 1/2] Make L10n immutable - Remove Push/Pop - Add "withLang($lang)" method --- include/enotify.php | 155 +++++++++++++++++++--------------------- mod/regmod.php | 5 +- src/Core/L10n.php | 25 ++----- src/Core/L10n/L10n.php | 73 +++++-------------- src/Core/Update.php | 14 ++-- src/Model/User.php | 7 +- src/Module/Register.php | 1 + 7 files changed, 109 insertions(+), 171 deletions(-) diff --git a/include/enotify.php b/include/enotify.php index da469b99b3..c0f23b0848 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -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, ''.$sitename.''); } @@ -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, '' . $sitename . ''); $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, ''.$sitename.''); $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, ''.$sitename.''); $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, ''.$sitename.''); $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, ''.$sitename.''); } 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, ''.$sitename.''); 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, ''.$sitename.''); } @@ -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, ''.$sitename.''); } 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, ''.$sitename.''); } @@ -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, ''.$sitename.'

'); 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; } diff --git a/mod/regmod.php b/mod/regmod.php index 295d8df25f..c37467e484 100644 --- a/mod/regmod.php +++ b/mod/regmod.php @@ -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; diff --git a/src/Core/L10n.php b/src/Core/L10n.php index 0b76fc639e..b27228cf80 100644 --- a/src/Core/L10n.php +++ b/src/Core/L10n.php @@ -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); } /** diff --git a/src/Core/L10n/L10n.php b/src/Core/L10n/L10n.php index 28b788e26b..be9e1419f3 100644 --- a/src/Core/L10n/L10n.php +++ b/src/Core/L10n/L10n.php @@ -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; + } } diff --git a/src/Core/Update.php b/src/Core/Update.php index a52ef903b2..0ead704c10 100644 --- a/src/Core/Update.php +++ b/src/Core/Update.php @@ -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(); } } diff --git a/src/Model/User.php b/src/Model/User.php index 7ecf4a576c..4f270d2d12 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -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: diff --git a/src/Module/Register.php b/src/Module/Register.php index ad49555e69..3b43970197 100644 --- a/src/Module/Register.php +++ b/src/Module/Register.php @@ -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, From 71a38180e9ff066d98a404a0638701646bfa3ede Mon Sep 17 00:00:00 2001 From: nupplaPhil Date: Sun, 29 Dec 2019 16:39:25 +0100 Subject: [PATCH 2/2] Check for same language --- src/Core/L10n/L10n.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Core/L10n/L10n.php b/src/Core/L10n/L10n.php index be9e1419f3..ad4f653716 100644 --- a/src/Core/L10n/L10n.php +++ b/src/Core/L10n/L10n.php @@ -413,6 +413,11 @@ class L10n */ public function withLang(string $lang) { + // Don't create a new instance for same language + if ($lang === $this->lang) { + return $this; + } + $newL10n = clone $this; $newL10n->loadTranslationTable($lang); return $newL10n;