diff --git a/system/Common.php b/system/Common.php index 77b8adcffbb0..9a5f50b2635b 100644 --- a/system/Common.php +++ b/system/Common.php @@ -763,8 +763,25 @@ function is_really_writable(string $file): bool */ function lang(string $line, array $args = [], string $locale = null) { - return Services::language($locale) - ->getLine($line, $args); + $language = Services::language(); + + //Get active locale + $activeLocale = $language->getLocale(); + + if ($locale && $locale != $activeLocale) + { + $language->setLocale($locale); + } + + $line = $language->getLine($line, $args); + + if ($locale && $locale != $activeLocale) + { + //Reset to active locale + $language->setLocale($activeLocale); + } + + return $line; } } diff --git a/tests/system/Language/LanguageTest.php b/tests/system/Language/LanguageTest.php index 06152922c3a2..a3a39073acb9 100644 --- a/tests/system/Language/LanguageTest.php +++ b/tests/system/Language/LanguageTest.php @@ -288,6 +288,25 @@ public function testBaseFallbacks() //-------------------------------------------------------------------- + /** + * Test if after using lang() with a locale the Language class keep the locale after return the $line + */ + public function testLangKeepLocale() + { + $this->lang = Services::language('en', true); + + lang('Language.languageGetLineInvalidArgumentException'); + $this->assertEquals('en', $this->lang->getLocale()); + + lang('Language.languageGetLineInvalidArgumentException', [], 'ru'); + $this->assertEquals('en', $this->lang->getLocale()); + + lang('Language.languageGetLineInvalidArgumentException'); + $this->assertEquals('en', $this->lang->getLocale()); + } + + //-------------------------------------------------------------------- + /** * Testing base locale vs variants, with fallback to English. *