diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index e3a9eb3064..bb64e7b2f3 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -35,6 +35,7 @@ Yii Framework 2 Change Log - Enh #19416: Update and improve configurations for `yii\console\controllers\MessageController` (WinterSilence) - Bug #19403: Fix types in `yii\web\SessionIterator` (WinterSilence) - Enh #19420: Update list of JS callbacks in `yii\widgets\MaskedInput` (WinterSilence) +- Bug #19445: Fix caching in `yii\i18n\Formatter::getUnitMessage()` (WinterSilence) 2.0.45 February 11, 2022 diff --git a/framework/i18n/Formatter.php b/framework/i18n/Formatter.php index e1bdbc43c6..82af552007 100644 --- a/framework/i18n/Formatter.php +++ b/framework/i18n/Formatter.php @@ -1643,8 +1643,8 @@ class Formatter extends Component */ private function getUnitMessage($unitType, $unitFormat, $system, $position) { - if (isset($this->_unitMessages[$unitType][$system][$position])) { - return $this->_unitMessages[$unitType][$system][$position]; + if (isset($this->_unitMessages[$unitType][$unitFormat][$system][$position])) { + return $this->_unitMessages[$unitType][$unitFormat][$system][$position]; } if (!$this->_intlLoaded) { throw new InvalidConfigException('Format of ' . $unitType . ' is only supported when PHP intl extension is installed.'); @@ -1676,7 +1676,7 @@ class Formatter extends Component $message[] = "$key{{$value}}"; } - return $this->_unitMessages[$unitType][$system][$position] = '{n, plural, ' . implode(' ', $message) . '}'; + return $this->_unitMessages[$unitType][$unitFormat][$system][$position] = '{n, plural, ' . implode(' ', $message) . '}'; } /** diff --git a/tests/framework/i18n/FormatterTest.php b/tests/framework/i18n/FormatterTest.php index 300f2b7148..9e8d4df6ca 100644 --- a/tests/framework/i18n/FormatterTest.php +++ b/tests/framework/i18n/FormatterTest.php @@ -34,14 +34,15 @@ class FormatterTest extends TestCase 'timeZone' => 'UTC', 'language' => 'ru-RU', ]); - $this->formatter = new Formatter(['locale' => 'en-US']); + if (!isset($this->formatter)) { + $this->formatter = new Formatter(['locale' => 'en-US']); + } } protected function tearDown() { parent::tearDown(); IntlTestHelper::resetIntlStatus(); - $this->formatter = null; } public function testFormat()