From 2838635d648cee828f1f2dc29a499e0a61a3b9a1 Mon Sep 17 00:00:00 2001 From: nupplaPhil Date: Sat, 18 Jan 2020 20:59:39 +0100 Subject: [PATCH] Move L10n class from L10n subdir to Core (replacing old wrapper) --- doc/AddonStorageBackend.md | 4 +- src/App.php | 2 +- src/App/Authentication.php | 2 +- src/App/Module.php | 12 +- src/App/Page.php | 2 +- src/Console/ArchiveContact.php | 4 +- src/Console/GlobalCommunityBlock.php | 2 +- src/Console/NewPassword.php | 2 +- src/Console/PostUpdate.php | 2 +- src/Core/L10n.php | 338 ++++++++++++-- src/Core/L10n/L10n.php | 425 ------------------ src/Core/StorageManager.php | 2 +- src/DI.php | 2 +- src/Model/Notify.php | 2 +- src/Model/Storage/AbstractStorage.php | 2 +- src/Model/Storage/Database.php | 2 +- src/Model/Storage/Filesystem.php | 2 +- src/Model/User.php | 13 +- src/Module/Item/Ignore.php | 2 +- src/Module/Register.php | 2 +- static/dependencies.config.php | 2 +- tests/Util/SampleStorageBackend.php | 2 +- tests/Util/SampleStorageBackendInstance.php | 2 +- .../AutomaticInstallationConsoleTest.php | 2 +- tests/src/Content/Text/BBCodeTest.php | 2 +- tests/src/Core/InstallerTest.php | 6 +- tests/src/Core/L10n/L10nTest.php | 2 +- tests/src/Core/StorageManagerTest.php | 2 +- .../src/Model/Storage/DatabaseStorageTest.php | 2 +- .../Model/Storage/FilesystemStorageTest.php | 2 +- 30 files changed, 356 insertions(+), 492 deletions(-) delete mode 100644 src/Core/L10n/L10n.php diff --git a/doc/AddonStorageBackend.md b/doc/AddonStorageBackend.md index f69dfff45a..ed6c5d87ae 100644 --- a/doc/AddonStorageBackend.md +++ b/doc/AddonStorageBackend.md @@ -145,7 +145,7 @@ class SampleStorageBackend implements IStorage /** @var Config\IConfiguration */ private $config; - /** @var L10n\L10n */ + /** @var \Friendica\Core\L10n */ private $l10n; /** @@ -155,7 +155,7 @@ class SampleStorageBackend implements IStorage * You can add here every dynamic class as dependency you like and add them to a private field * Friendica automatically creates these classes and passes them as argument to the constructor */ - public function __construct(Config\IConfiguration $config, L10n\L10n $l10n) + public function __construct(Config\IConfiguration $config, \Friendica\Core\L10n $l10n) { $this->config = $config; $this->l10n = $l10n; diff --git a/src/App.php b/src/App.php index 925b24c9e7..ab56ffb7f9 100644 --- a/src/App.php +++ b/src/App.php @@ -11,7 +11,7 @@ use Friendica\App\Authentication; use Friendica\Core\Config\Cache\ConfigCache; use Friendica\Core\Config\IConfiguration; use Friendica\Core\Config\IPConfiguration; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Theme; use Friendica\Database\Database; diff --git a/src/App/Authentication.php b/src/App/Authentication.php index 9b3763a54d..18f6c0f041 100644 --- a/src/App/Authentication.php +++ b/src/App/Authentication.php @@ -22,7 +22,7 @@ use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; use Friendica\Util\Strings; use LightOpenID; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Psr\Log\LoggerInterface; /** diff --git a/src/App/Module.php b/src/App/Module.php index 7c81b6a7ea..891dc59146 100644 --- a/src/App/Module.php +++ b/src/App/Module.php @@ -207,15 +207,15 @@ class Module /** * Run the determined module class and calls all hooks applied to * - * @param Core\L10n\L10n $l10n The L10n instance - * @param App\BaseURL $baseUrl The Friendica Base URL - * @param LoggerInterface $logger The Friendica logger - * @param array $server The $_SERVER variable - * @param array $post The $_POST variables + * @param \Friendica\Core\L10n $l10n The L10n instance + * @param App\BaseURL $baseUrl The Friendica Base URL + * @param LoggerInterface $logger The Friendica logger + * @param array $server The $_SERVER variable + * @param array $post The $_POST variables * * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public function run(Core\L10n\L10n $l10n, App\BaseURL $baseUrl, LoggerInterface $logger, array $server, array $post) + public function run(Core\L10n $l10n, App\BaseURL $baseUrl, LoggerInterface $logger, array $server, array $post) { if ($this->printNotAllowedAddon) { info($l10n->t("You must be logged in to use addons. ")); diff --git a/src/App/Page.php b/src/App/Page.php index 5efb9f7ca3..7531a438eb 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -10,7 +10,7 @@ use Friendica\Content\Nav; use Friendica\Core\Config\IConfiguration; use Friendica\Core\Config\IPConfiguration; use Friendica\Core\Hook; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\Theme; use Friendica\Module\Special\HTTPException as ModuleHTTPException; diff --git a/src/Console/ArchiveContact.php b/src/Console/ArchiveContact.php index e7a1f540ee..5635905bbc 100644 --- a/src/Console/ArchiveContact.php +++ b/src/Console/ArchiveContact.php @@ -30,7 +30,7 @@ class ArchiveContact extends \Asika\SimpleConsole\Console */ private $dba; /** - * @var L10n\L10n + * @var \Friendica\Core\L10n */ private $l10n; @@ -51,7 +51,7 @@ HELP; return $help; } - public function __construct(App\Mode $appMode, Database $dba, L10n\L10n $l10n, array $argv = null) + public function __construct(App\Mode $appMode, Database $dba, \Friendica\Core\L10n $l10n, array $argv = null) { parent::__construct($argv); diff --git a/src/Console/GlobalCommunityBlock.php b/src/Console/GlobalCommunityBlock.php index 77be530da9..42fa165dcc 100644 --- a/src/Console/GlobalCommunityBlock.php +++ b/src/Console/GlobalCommunityBlock.php @@ -26,7 +26,7 @@ class GlobalCommunityBlock extends \Asika\SimpleConsole\Console */ private $appMode; /** - * @var L10n\L10n + * @var \Friendica\Core\L10n */ private $l10n; diff --git a/src/Console/NewPassword.php b/src/Console/NewPassword.php index caa0aac7de..bf5a1b7e17 100644 --- a/src/Console/NewPassword.php +++ b/src/Console/NewPassword.php @@ -3,7 +3,7 @@ namespace Friendica\Console; use Friendica\App; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Database\Database; use Friendica\Model\User; use RuntimeException; diff --git a/src/Console/PostUpdate.php b/src/Console/PostUpdate.php index f3e81c1af5..3691693347 100644 --- a/src/Console/PostUpdate.php +++ b/src/Console/PostUpdate.php @@ -4,7 +4,7 @@ namespace Friendica\Console; use Friendica\App; use Friendica\Core\Config\IConfiguration; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\Update; /** diff --git a/src/Core/L10n.php b/src/Core/L10n.php index 7fc268ac42..3f92dd5800 100644 --- a/src/Core/L10n.php +++ b/src/Core/L10n.php @@ -1,11 +1,12 @@ dba = $dba; + $this->logger = $logger; + + $this->loadTranslationTable(L10n::detectLanguage($server, $get, $config->get('system', 'language', 'en'))); + $this->setSessionVariable($session); + $this->setLangFromSession($session); + } + /** * Returns the current language code * * @return string Language code */ - public static function getCurrentLang() + public function getCurrentLang() { - return DI::l10n()->getCurrentLang(); + return $this->lang; } /** - * @param string $lang - * - * @return L10nClass The new L10n class with the new language - * - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * Sets the language session variable */ - public static function withLang(string $lang) + private function setSessionVariable(ISession $session) { - return DI::l10n()->withLang($lang); + if ($session->get('authenticated') && !$session->get('language')) { + $session->set('language', $this->lang); + // we haven't loaded user data yet, but we need user language + if ($session->get('uid')) { + $user = $this->dba->selectFirst('user', ['language'], ['uid' => $_SESSION['uid']]); + if ($this->dba->isResult($user)) { + $session->set('language', $user['language']); + } + } + } + + if (isset($_GET['lang'])) { + $session->set('language', $_GET['lang']); + } + } + + private function setLangFromSession(ISession $session) + { + if ($session->get('language') !== $this->lang) { + $this->loadTranslationTable($session->get('language')); + } + } + + /** + * Loads string translation table + * + * First addon strings are loaded, then globals + * + * Uses an App object shim since all the strings files refer to $a->strings + * + * @param string $lang language code to load + * + * @throws \Exception + */ + private function loadTranslationTable($lang) + { + $lang = Strings::sanitizeFilePathItem($lang); + + // Don't override the language setting with empty languages + if (empty($lang)) { + return; + } + + $a = new \stdClass(); + $a->strings = []; + + // load enabled addons strings + $addons = $this->dba->select('addon', ['name'], ['installed' => true]); + while ($p = $this->dba->fetch($addons)) { + $name = Strings::sanitizeFilePathItem($p['name']); + if (file_exists("addon/$name/lang/$lang/strings.php")) { + include __DIR__ . "/../../../addon/$name/lang/$lang/strings.php"; + } + } + + if (file_exists(__DIR__ . "/../../../view/lang/$lang/strings.php")) { + include __DIR__ . "/../../../view/lang/$lang/strings.php"; + } + + $this->lang = $lang; + $this->strings = $a->strings; + + unset($a); + } + + /** + * @brief Returns the preferred language from the HTTP_ACCEPT_LANGUAGE header + * + * @param string $sysLang The default fallback language + * @param array $server The $_SERVER array + * @param array $get The $_GET array + * + * @return string The two-letter language code + */ + public static function detectLanguage(array $server, array $get, string $sysLang = 'en') + { + $lang_variable = $server['HTTP_ACCEPT_LANGUAGE'] ?? null; + + $acceptedLanguages = preg_split('/,\s*/', $lang_variable); + + if (empty($acceptedLanguages)) { + $acceptedLanguages = []; + } + + // Add get as absolute quality accepted language (except this language isn't valid) + if (!empty($get['lang'])) { + $acceptedLanguages[] = $get['lang']; + } + + // return the sys language in case there's nothing to do + if (empty($acceptedLanguages)) { + return $sysLang; + } + + // Set the syslang as default fallback + $current_lang = $sysLang; + // start with quality zero (every guessed language is more acceptable ..) + $current_q = 0; + + foreach ($acceptedLanguages as $acceptedLanguage) { + $res = preg_match( + '/^([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', + $acceptedLanguage, + $matches + ); + + // Invalid language? -> skip + if (!$res) { + continue; + } + + // split language codes based on it's "-" + $lang_code = explode('-', $matches[1]); + + // determine the quality of the guess + if (isset($matches[2])) { + $lang_quality = (float)$matches[2]; + } else { + // fallback so without a quality parameter, it's probably the best + $lang_quality = 1; + } + + // loop through each part of the code-parts + while (count($lang_code)) { + // try to mix them so we can get double-code parts too + $match_lang = strtolower(join('-', $lang_code)); + if (file_exists(__DIR__ . "/../../../view/lang/$match_lang") && + is_dir(__DIR__ . "/../../../view/lang/$match_lang")) { + if ($lang_quality > $current_q) { + $current_lang = $match_lang; + $current_q = $lang_quality; + break; + } + } + + // remove the most right code-part + array_pop($lang_code); + } + } + + return $current_lang; } /** @@ -52,9 +225,22 @@ class L10n * * @return string */ - public static function t($s, ...$vars) + public function t($s, ...$vars) { - return DI::l10n()->t($s, ...$vars); + if (empty($s)) { + return ''; + } + + if (!empty($this->strings[$s])) { + $t = $this->strings[$s]; + $s = is_array($t) ? $t[0] : $t; + } + + if (count($vars) > 0) { + $s = sprintf($s, ...$vars); + } + + return $s; } /** @@ -77,9 +263,48 @@ class L10n * @return string * @throws \Exception */ - public static function tt(string $singular, string $plural, int $count) + public function tt(string $singular, string $plural, int $count) { - return DI::l10n()->tt($singular, $plural, $count); + if (!empty($this->strings[$singular])) { + $t = $this->strings[$singular]; + if (is_array($t)) { + $plural_function = 'string_plural_select_' . str_replace('-', '_', $this->lang); + if (function_exists($plural_function)) { + $i = $plural_function($count); + } else { + $i = $this->stringPluralSelectDefault($count); + } + + // for some languages there is only a single array item + if (!isset($t[$i])) { + $s = $t[0]; + } else { + $s = $t[$i]; + } + } else { + $s = $t; + } + } elseif ($this->stringPluralSelectDefault($count)) { + $s = $plural; + } else { + $s = $singular; + } + + $s = @sprintf($s, $count); + + return $s; + } + + /** + * Provide a fallback which will not collide with a function defined in any language file + * + * @param int $n + * + * @return bool + */ + private function stringPluralSelectDefault($n) + { + return $n != 1; } /** @@ -95,7 +320,20 @@ class L10n */ public static function getAvailableLanguages() { - return L10nClass::getAvailableLanguages(); + $langs = []; + $strings_file_paths = glob('view/lang/*/strings.php'); + + if (is_array($strings_file_paths) && count($strings_file_paths)) { + if (!in_array('view/lang/en/strings.php', $strings_file_paths)) { + $strings_file_paths[] = 'view/lang/en/strings.php'; + } + asort($strings_file_paths); + foreach ($strings_file_paths as $strings_file_path) { + $path_array = explode('/', $strings_file_path); + $langs[$path_array[2]] = $path_array[2]; + } + } + return $langs; } /** @@ -105,9 +343,17 @@ class L10n * * @return string Translated string. */ - public static function getDay($s) + public function getDay($s) { - return DI::l10n()->getDay($s); + $ret = str_replace(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], + [$this->t('Monday'), $this->t('Tuesday'), $this->t('Wednesday'), $this->t('Thursday'), $this->t('Friday'), $this->t('Saturday'), $this->t('Sunday')], + $s); + + $ret = str_replace(['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + [$this->t('January'), $this->t('February'), $this->t('March'), $this->t('April'), $this->t('May'), $this->t('June'), $this->t('July'), $this->t('August'), $this->t('September'), $this->t('October'), $this->t('November'), $this->t('December')], + $ret); + + return $ret; } /** @@ -117,9 +363,17 @@ class L10n * * @return string Translated string. */ - public static function getDayShort($s) + public function getDayShort($s) { - return DI::l10n()->getDayShort($s); + $ret = str_replace(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], + [$this->t('Mon'), $this->t('Tue'), $this->t('Wed'), $this->t('Thu'), $this->t('Fri'), $this->t('Sat'), $this->t('Sun')], + $s); + + $ret = str_replace(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + [$this->t('Jan'), $this->t('Feb'), $this->t('Mar'), $this->t('Apr'), $this->t('May'), $this->t('Jun'), $this->t('Jul'), $this->t('Aug'), $this->t('Sep'), $this->t('Oct'), $this->t('Nov'), $this->t('Dec')], + $ret); + + return $ret; } /** @@ -127,10 +381,44 @@ class L10n * * @return array index is present tense verb * value is array containing past tense verb, translation of present, translation of past + * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @hook poke_verbs pokes array */ - public static function getPokeVerbs() + public function getPokeVerbs() { - return DI::l10n()->getPokeVerbs(); + // index is present tense verb + // value is array containing past tense verb, translation of present, translation of past + $arr = [ + 'poke' => ['poked', $this->t('poke'), $this->t('poked')], + 'ping' => ['pinged', $this->t('ping'), $this->t('pinged')], + 'prod' => ['prodded', $this->t('prod'), $this->t('prodded')], + 'slap' => ['slapped', $this->t('slap'), $this->t('slapped')], + 'finger' => ['fingered', $this->t('finger'), $this->t('fingered')], + 'rebuff' => ['rebuffed', $this->t('rebuff'), $this->t('rebuffed')], + ]; + + Hook::callAll('poke_verbs', $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) + { + // Don't create a new instance for same language + if ($lang === $this->lang) { + return $this; + } + + $newL10n = clone $this; + $newL10n->loadTranslationTable($lang); + return $newL10n; } } diff --git a/src/Core/L10n/L10n.php b/src/Core/L10n/L10n.php deleted file mode 100644 index d29e408481..0000000000 --- a/src/Core/L10n/L10n.php +++ /dev/null @@ -1,425 +0,0 @@ -dba = $dba; - $this->logger = $logger; - - $this->loadTranslationTable(L10n::detectLanguage($server, $get, $config->get('system', 'language', 'en'))); - $this->setSessionVariable($session); - $this->setLangFromSession($session); - } - - /** - * Returns the current language code - * - * @return string Language code - */ - public function getCurrentLang() - { - return $this->lang; - } - - /** - * Sets the language session variable - */ - private function setSessionVariable(ISession $session) - { - if ($session->get('authenticated') && !$session->get('language')) { - $session->set('language', $this->lang); - // we haven't loaded user data yet, but we need user language - if ($session->get('uid')) { - $user = $this->dba->selectFirst('user', ['language'], ['uid' => $_SESSION['uid']]); - if ($this->dba->isResult($user)) { - $session->set('language', $user['language']); - } - } - } - - if (isset($_GET['lang'])) { - $session->set('language', $_GET['lang']); - } - } - - private function setLangFromSession(ISession $session) - { - if ($session->get('language') !== $this->lang) { - $this->loadTranslationTable($session->get('language')); - } - } - - /** - * Loads string translation table - * - * First addon strings are loaded, then globals - * - * Uses an App object shim since all the strings files refer to $a->strings - * - * @param string $lang language code to load - * - * @throws \Exception - */ - private function loadTranslationTable($lang) - { - $lang = Strings::sanitizeFilePathItem($lang); - - // Don't override the language setting with empty languages - if (empty($lang)) { - return; - } - - $a = new \stdClass(); - $a->strings = []; - - // load enabled addons strings - $addons = $this->dba->select('addon', ['name'], ['installed' => true]); - while ($p = $this->dba->fetch($addons)) { - $name = Strings::sanitizeFilePathItem($p['name']); - if (file_exists("addon/$name/lang/$lang/strings.php")) { - include __DIR__ . "/../../../addon/$name/lang/$lang/strings.php"; - } - } - - if (file_exists(__DIR__ . "/../../../view/lang/$lang/strings.php")) { - include __DIR__ . "/../../../view/lang/$lang/strings.php"; - } - - $this->lang = $lang; - $this->strings = $a->strings; - - unset($a); - } - - /** - * Returns the preferred language from the HTTP_ACCEPT_LANGUAGE header - * - * @param string $sysLang The default fallback language - * @param array $server The $_SERVER array - * @param array $get The $_GET array - * - * @return string The two-letter language code - */ - public static function detectLanguage(array $server, array $get, string $sysLang = 'en') - { - $lang_variable = $server['HTTP_ACCEPT_LANGUAGE'] ?? null; - - $acceptedLanguages = preg_split('/,\s*/', $lang_variable); - - if (empty($acceptedLanguages)) { - $acceptedLanguages = []; - } - - // Add get as absolute quality accepted language (except this language isn't valid) - if (!empty($get['lang'])) { - $acceptedLanguages[] = $get['lang']; - } - - // return the sys language in case there's nothing to do - if (empty($acceptedLanguages)) { - return $sysLang; - } - - // Set the syslang as default fallback - $current_lang = $sysLang; - // start with quality zero (every guessed language is more acceptable ..) - $current_q = 0; - - foreach ($acceptedLanguages as $acceptedLanguage) { - $res = preg_match( - '/^([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', - $acceptedLanguage, - $matches - ); - - // Invalid language? -> skip - if (!$res) { - continue; - } - - // split language codes based on it's "-" - $lang_code = explode('-', $matches[1]); - - // determine the quality of the guess - if (isset($matches[2])) { - $lang_quality = (float)$matches[2]; - } else { - // fallback so without a quality parameter, it's probably the best - $lang_quality = 1; - } - - // loop through each part of the code-parts - while (count($lang_code)) { - // try to mix them so we can get double-code parts too - $match_lang = strtolower(join('-', $lang_code)); - if (file_exists(__DIR__ . "/../../../view/lang/$match_lang") && - is_dir(__DIR__ . "/../../../view/lang/$match_lang")) { - if ($lang_quality > $current_q) { - $current_lang = $match_lang; - $current_q = $lang_quality; - break; - } - } - - // remove the most right code-part - array_pop($lang_code); - } - } - - return $current_lang; - } - - /** - * Return the localized version of the provided string with optional string interpolation - * - * This function takes a english string as parameter, and if a localized version - * exists for the current language, substitutes it before performing an eventual - * string interpolation (sprintf) with additional optional arguments. - * - * Usages: - * - DI::l10n()->t('This is an example') - * - DI::l10n()->t('URL %s returned no result', $url) - * - DI::l10n()->t('Current version: %s, new version: %s', $current_version, $new_version) - * - * @param string $s - * @param array $vars Variables to interpolate in the translation string - * - * @return string - */ - public function t($s, ...$vars) - { - if (empty($s)) { - return ''; - } - - if (!empty($this->strings[$s])) { - $t = $this->strings[$s]; - $s = is_array($t) ? $t[0] : $t; - } - - if (count($vars) > 0) { - $s = sprintf($s, ...$vars); - } - - return $s; - } - - /** - * Return the localized version of a singular/plural string with optional string interpolation - * - * This function takes two english strings as parameters, singular and plural, as - * well as a count. If a localized version exists for the current language, they - * are used instead. Discrimination between singular and plural is done using the - * localized function if any or the default one. Finally, a string interpolation - * is performed using the count as parameter. - * - * Usages: - * - DI::l10n()->tt('Like', 'Likes', $count) - * - DI::l10n()->tt("%s user deleted", "%s users deleted", count($users)) - * - * @param string $singular - * @param string $plural - * @param int $count - * - * @return string - * @throws \Exception - */ - public function tt(string $singular, string $plural, int $count) - { - if (!empty($this->strings[$singular])) { - $t = $this->strings[$singular]; - if (is_array($t)) { - $plural_function = 'string_plural_select_' . str_replace('-', '_', $this->lang); - if (function_exists($plural_function)) { - $i = $plural_function($count); - } else { - $i = $this->stringPluralSelectDefault($count); - } - - // for some languages there is only a single array item - if (!isset($t[$i])) { - $s = $t[0]; - } else { - $s = $t[$i]; - } - } else { - $s = $t; - } - } elseif ($this->stringPluralSelectDefault($count)) { - $s = $plural; - } else { - $s = $singular; - } - - $s = @sprintf($s, $count); - - return $s; - } - - /** - * Provide a fallback which will not collide with a function defined in any language file - * - * @param int $n - * - * @return bool - */ - private function stringPluralSelectDefault($n) - { - return $n != 1; - } - - /** - * Return installed languages codes as associative array - * - * Scans the view/lang directory for the existence of "strings.php" files, and - * returns an alphabetical list of their folder names (@-char language codes). - * Adds the english language if it's missing from the list. - * - * Ex: array('de' => 'de', 'en' => 'en', 'fr' => 'fr', ...) - * - * @return array - */ - public static function getAvailableLanguages() - { - $langs = []; - $strings_file_paths = glob('view/lang/*/strings.php'); - - if (is_array($strings_file_paths) && count($strings_file_paths)) { - if (!in_array('view/lang/en/strings.php', $strings_file_paths)) { - $strings_file_paths[] = 'view/lang/en/strings.php'; - } - asort($strings_file_paths); - foreach ($strings_file_paths as $strings_file_path) { - $path_array = explode('/', $strings_file_path); - $langs[$path_array[2]] = $path_array[2]; - } - } - return $langs; - } - - /** - * Translate days and months names. - * - * @param string $s String with day or month name. - * - * @return string Translated string. - */ - public function getDay($s) - { - $ret = str_replace(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], - [$this->t('Monday'), $this->t('Tuesday'), $this->t('Wednesday'), $this->t('Thursday'), $this->t('Friday'), $this->t('Saturday'), $this->t('Sunday')], - $s); - - $ret = str_replace(['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - [$this->t('January'), $this->t('February'), $this->t('March'), $this->t('April'), $this->t('May'), $this->t('June'), $this->t('July'), $this->t('August'), $this->t('September'), $this->t('October'), $this->t('November'), $this->t('December')], - $ret); - - return $ret; - } - - /** - * Translate short days and months names. - * - * @param string $s String with short day or month name. - * - * @return string Translated string. - */ - public function getDayShort($s) - { - $ret = str_replace(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], - [$this->t('Mon'), $this->t('Tue'), $this->t('Wed'), $this->t('Thu'), $this->t('Fri'), $this->t('Sat'), $this->t('Sun')], - $s); - - $ret = str_replace(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - [$this->t('Jan'), $this->t('Feb'), $this->t('Mar'), $this->t('Apr'), $this->t('May'), $this->t('Jun'), $this->t('Jul'), $this->t('Aug'), $this->t('Sep'), $this->t('Oct'), $this->t('Nov'), $this->t('Dec')], - $ret); - - return $ret; - } - - /** - * Load poke verbs - * - * @return array index is present tense verb - * value is array containing past tense verb, translation of present, translation of past - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - * @hook poke_verbs pokes array - */ - public function getPokeVerbs() - { - // index is present tense verb - // value is array containing past tense verb, translation of present, translation of past - $arr = [ - 'poke' => ['poked', $this->t('poke'), $this->t('poked')], - 'ping' => ['pinged', $this->t('ping'), $this->t('pinged')], - 'prod' => ['prodded', $this->t('prod'), $this->t('prodded')], - 'slap' => ['slapped', $this->t('slap'), $this->t('slapped')], - 'finger' => ['fingered', $this->t('finger'), $this->t('fingered')], - 'rebuff' => ['rebuffed', $this->t('rebuff'), $this->t('rebuffed')], - ]; - - Hook::callAll('poke_verbs', $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) - { - // Don't create a new instance for same language - if ($lang === $this->lang) { - return $this; - } - - $newL10n = clone $this; - $newL10n->loadTranslationTable($lang); - return $newL10n; - } -} diff --git a/src/Core/StorageManager.php b/src/Core/StorageManager.php index 397fc624fc..1354de5597 100644 --- a/src/Core/StorageManager.php +++ b/src/Core/StorageManager.php @@ -4,7 +4,7 @@ namespace Friendica\Core; use Exception; use Friendica\Core\Config\IConfiguration; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Database\Database; use Friendica\Model\Storage; use Psr\Log\LoggerInterface; diff --git a/src/DI.php b/src/DI.php index 38d000423f..103c9be69b 100644 --- a/src/DI.php +++ b/src/DI.php @@ -158,7 +158,7 @@ abstract class DI public static function l10n() { - return self::$dice->create(Core\L10n\L10n::class); + return self::$dice->create(Core\L10n::class); } /** diff --git a/src/Model/Notify.php b/src/Model/Notify.php index 49e538d7ba..9912f5dffb 100644 --- a/src/Model/Notify.php +++ b/src/Model/Notify.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; use Friendica\Core\Config\IPConfiguration; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\System; use Friendica\Database\Database; diff --git a/src/Model/Storage/AbstractStorage.php b/src/Model/Storage/AbstractStorage.php index 270d675623..bcd8ee06ae 100644 --- a/src/Model/Storage/AbstractStorage.php +++ b/src/Model/Storage/AbstractStorage.php @@ -2,7 +2,7 @@ namespace Friendica\Model\Storage; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Psr\Log\LoggerInterface; /** diff --git a/src/Model/Storage/Database.php b/src/Model/Storage/Database.php index 75068d6031..77a075b989 100644 --- a/src/Model/Storage/Database.php +++ b/src/Model/Storage/Database.php @@ -6,7 +6,7 @@ namespace Friendica\Model\Storage; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Psr\Log\LoggerInterface; use Friendica\Database\Database as DBA; diff --git a/src/Model/Storage/Filesystem.php b/src/Model/Storage/Filesystem.php index 15689f7f25..60ed0252aa 100644 --- a/src/Model/Storage/Filesystem.php +++ b/src/Model/Storage/Filesystem.php @@ -7,7 +7,7 @@ namespace Friendica\Model\Storage; use Friendica\Core\Config\IConfiguration; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Util\Strings; use Psr\Log\LoggerInterface; diff --git a/src/Model/User.php b/src/Model/User.php index 8ae32d0cfd..be93f3e4d8 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -915,15 +915,16 @@ 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 - * @param string $password Plaintext password + * @param \Friendica\Core\L10n $l10n The used language + * @param array $user User record array + * @param string $sitename + * @param string $siteurl + * @param string $password Plaintext password + * * @return NULL|boolean from notification() and email() inherited * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function sendRegisterOpenEmail(L10n\L10n $l10n, $user, $sitename, $siteurl, $password) + public static function sendRegisterOpenEmail(\Friendica\Core\L10n $l10n, $user, $sitename, $siteurl, $password) { $preamble = Strings::deindent($l10n->t( ' diff --git a/src/Module/Item/Ignore.php b/src/Module/Item/Ignore.php index b200741665..d855045de8 100644 --- a/src/Module/Item/Ignore.php +++ b/src/Module/Item/Ignore.php @@ -4,7 +4,7 @@ namespace Friendica\Module\Item; use Friendica\App; use Friendica\BaseModule; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Database\Database; diff --git a/src/Module/Register.php b/src/Module/Register.php index e4343d0f8b..9530d29f14 100644 --- a/src/Module/Register.php +++ b/src/Module/Register.php @@ -7,7 +7,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Config; use Friendica\Core\Hook; use Friendica\Core\L10n; -use Friendica\Core\L10n\L10n as L10nClass; +use Friendica\Core\L10n as L10nClass; use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Core\Worker; diff --git a/static/dependencies.config.php b/static/dependencies.config.php index ec80123aa3..b4fa7d247a 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -4,7 +4,7 @@ use Dice\Dice; use Friendica\App; use Friendica\Core\Cache; use Friendica\Core\Config; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\Lock\ILock; use Friendica\Core\Process; use Friendica\Core\Session\ISession; diff --git a/tests/Util/SampleStorageBackend.php b/tests/Util/SampleStorageBackend.php index a788c6d3df..62b4f12bb3 100644 --- a/tests/Util/SampleStorageBackend.php +++ b/tests/Util/SampleStorageBackend.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Model\Storage\IStorage; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Mockery\MockInterface; /** diff --git a/tests/Util/SampleStorageBackendInstance.php b/tests/Util/SampleStorageBackendInstance.php index d55ff04dea..ceb329cb38 100644 --- a/tests/Util/SampleStorageBackendInstance.php +++ b/tests/Util/SampleStorageBackendInstance.php @@ -3,7 +3,7 @@ // contains a test-hook call for creating a storage instance use Friendica\App; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Test\Util\SampleStorageBackend; use Mockery\MockInterface; diff --git a/tests/src/Console/AutomaticInstallationConsoleTest.php b/tests/src/Console/AutomaticInstallationConsoleTest.php index 050a5f4420..ab879b3194 100644 --- a/tests/src/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Console/AutomaticInstallationConsoleTest.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Console\AutomaticInstallation; use Friendica\Core\Config\Cache\ConfigCache; use Friendica\Core\Installer; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Database\Database; use Friendica\DI; diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index ed33306edf..7db69eef39 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -4,7 +4,7 @@ namespace Friendica\Test\src\Content\Text; use Friendica\App\BaseURL; use Friendica\Content\Text\BBCode; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Test\MockedTest; use Friendica\Test\Util\AppMockTrait; use Friendica\Test\Util\VFSTrait; diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index 23212665dd..abc2087638 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -17,7 +17,7 @@ class InstallerTest extends MockedTest use VFSTrait; /** - * @var \Friendica\Core\L10n\L10n|MockInterface + * @var \Friendica\Core\L10n|MockInterface */ private $l10nMock; @@ -27,14 +27,14 @@ class InstallerTest extends MockedTest $this->setUpVfsDir(); - $this->l10nMock = \Mockery::mock(\Friendica\Core\L10n\L10n::class); + $this->l10nMock = \Mockery::mock(\Friendica\Core\L10n::class); /** @var Dice|MockInterface $dice */ $dice = \Mockery::mock(Dice::class)->makePartial(); $dice = $dice->addRules(include __DIR__ . '/../../../static/dependencies.config.php'); $dice->shouldReceive('create') - ->with(\Friendica\Core\L10n\L10n::class) + ->with(\Friendica\Core\L10n::class) ->andReturn($this->l10nMock); DI::init($dice); diff --git a/tests/src/Core/L10n/L10nTest.php b/tests/src/Core/L10n/L10nTest.php index 1207ceb477..b9f6681f4b 100644 --- a/tests/src/Core/L10n/L10nTest.php +++ b/tests/src/Core/L10n/L10nTest.php @@ -2,7 +2,7 @@ namespace src\Core\L10n; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Test\MockedTest; class L10nTest extends MockedTest diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/StorageManagerTest.php index b7e5b8c3dd..118d4bb57b 100644 --- a/tests/src/Core/StorageManagerTest.php +++ b/tests/src/Core/StorageManagerTest.php @@ -6,7 +6,7 @@ use Dice\Dice; use Friendica\Core\Config\IConfiguration; use Friendica\Core\Config\PreloadConfiguration; use Friendica\Core\Hook; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Core\Session\ISession; use Friendica\Core\StorageManager; use Friendica\Database\Database; diff --git a/tests/src/Model/Storage/DatabaseStorageTest.php b/tests/src/Model/Storage/DatabaseStorageTest.php index d6dff99320..64d26aa119 100644 --- a/tests/src/Model/Storage/DatabaseStorageTest.php +++ b/tests/src/Model/Storage/DatabaseStorageTest.php @@ -2,7 +2,7 @@ namespace Friendica\Test\src\Model\Storage; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Factory\ConfigFactory; use Friendica\Model\Storage\Database; use Friendica\Model\Storage\IStorage; diff --git a/tests/src/Model/Storage/FilesystemStorageTest.php b/tests/src/Model/Storage/FilesystemStorageTest.php index 500fd93bd8..f809585585 100644 --- a/tests/src/Model/Storage/FilesystemStorageTest.php +++ b/tests/src/Model/Storage/FilesystemStorageTest.php @@ -3,7 +3,7 @@ namespace Friendica\Test\src\Model\Storage; use Friendica\Core\Config\IConfiguration; -use Friendica\Core\L10n\L10n; +use Friendica\Core\L10n; use Friendica\Model\Storage\Filesystem; use Friendica\Model\Storage\IStorage; use Friendica\Test\Util\VFSTrait;