diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 93f092d..ddf4b51 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -4,7 +4,7 @@ Yii Framework 2 Change Log 2.0.45 under development ------------------------ -- no changes in this release. +- Bug #19138: Allow digits in language code (ntesic) 2.0.44 December 30, 2021 diff --git a/framework/i18n/GettextMessageSource.php b/framework/i18n/GettextMessageSource.php index b3190ba..2f68f15 100644 --- a/framework/i18n/GettextMessageSource.php +++ b/framework/i18n/GettextMessageSource.php @@ -131,7 +131,7 @@ class GettextMessageSource extends MessageSource protected function getMessageFilePath($language) { $language = (string) $language; - if ($language !== '' && !preg_match('/^[a-z_-]+$/i', $language)) { + if ($language !== '' && !preg_match('/^[a-z0-9_-]+$/i', $language)) { throw new InvalidArgumentException(sprintf('Invalid language code: "%s".', $language)); } $messageFile = Yii::getAlias($this->basePath) . '/' . $language . '/' . $this->catalog; diff --git a/framework/i18n/PhpMessageSource.php b/framework/i18n/PhpMessageSource.php index 4dd860a..dc9f2cf 100644 --- a/framework/i18n/PhpMessageSource.php +++ b/framework/i18n/PhpMessageSource.php @@ -134,7 +134,7 @@ class PhpMessageSource extends MessageSource protected function getMessageFilePath($category, $language) { $language = (string) $language; - if ($language !== '' && !preg_match('/^[a-z_-]+$/i', $language)) { + if ($language !== '' && !preg_match('/^[a-z0-9_-]+$/i', $language)) { throw new InvalidArgumentException(sprintf('Invalid language code: "%s".', $language)); } $messageFile = Yii::getAlias($this->basePath) . "/$language/"; diff --git a/tests/data/i18n/messages/en-150/test.php b/tests/data/i18n/messages/en-150/test.php new file mode 100644 index 0000000..f915300 --- /dev/null +++ b/tests/data/i18n/messages/en-150/test.php @@ -0,0 +1,14 @@ + 'The dog runs fast (en-150).', +]; diff --git a/tests/framework/i18n/I18NTest.php b/tests/framework/i18n/I18NTest.php index 727dcbb..5b8ab6a 100644 --- a/tests/framework/i18n/I18NTest.php +++ b/tests/framework/i18n/I18NTest.php @@ -129,6 +129,8 @@ class I18NTest extends TestCase // target is a different language than source $this->assertEquals('Собака бегает быстро.', $i18n->translate('test', $msg, [], 'ru-RU')); $this->assertEquals('Собака бегает быстро.', $i18n->translate('test', $msg, [], 'ru')); + $this->assertEquals('The dog runs fast (en-150).', $i18n->translate('test', $msg, [], 'en-150')); + $this->assertEquals('The dog runs fast.', $i18n->translate('test', $msg, [], 'en')); // language is set to null $this->assertEquals($msg, $i18n->translate('test', $msg, [], null));