From 0339f0a0c92cea6047a68055777a0e44421bcf41 Mon Sep 17 00:00:00 2001 From: Paulo Esteves Date: Sun, 15 Aug 2021 00:27:10 +0100 Subject: [PATCH] Fix lang() function is overriding locale --- system/Common.php | 21 +++++++++++++++++++-- tests/system/Language/LanguageTest.php | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) 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. *