Browse Source

Fix #19138: Allow digits in language code

Co-authored-by: ntesic <nikolatesic@gmail.com>
tags/2.0.45
ntesic 3 years ago committed by GitHub
parent
commit
e68b7ae162
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      framework/CHANGELOG.md
  2. 2
      framework/i18n/GettextMessageSource.php
  3. 2
      framework/i18n/PhpMessageSource.php
  4. 14
      tests/data/i18n/messages/en-150/test.php
  5. 2
      tests/framework/i18n/I18NTest.php

2
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

2
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;

2
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/";

14
tests/data/i18n/messages/en-150/test.php

@ -0,0 +1,14 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/**
* Messages are copy-pasted in \yiiunit\framework\i18n\DbMessageSourceTest::setUpBeforeClass()
* Do not forget to update it in after changing this file!
*/
return [
'The dog runs fast.' => 'The dog runs fast (en-150).',
];

2
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));

Loading…
Cancel
Save