From 0b9c49abd54fc50be5895ba6acdecb4ba7a8d8b4 Mon Sep 17 00:00:00 2001 From: kenjis Date: Sun, 24 Sep 2023 11:35:35 +0900 Subject: [PATCH 1/3] fix: lang() may return false --- system/Language/Language.php | 10 +++++++++- system/Language/en/Language.php | 15 +++++++++++++++ tests/system/Language/LanguageTest.php | 23 +++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 system/Language/en/Language.php diff --git a/system/Language/Language.php b/system/Language/Language.php index 70d109e2319b..32eee39f2a13 100644 --- a/system/Language/Language.php +++ b/system/Language/Language.php @@ -12,6 +12,7 @@ namespace CodeIgniter\Language; use Config\Services; +use InvalidArgumentException; use MessageFormatter; /** @@ -191,7 +192,14 @@ protected function formatMessage($message, array $args = []) return $message; } - return MessageFormatter::formatMessage($this->locale, $message, $args); + $formatted = MessageFormatter::formatMessage($this->locale, $message, $args); + if ($formatted === false) { + throw new InvalidArgumentException( + lang('Language.invalidMessageFormat', [$message, implode(',', $args)]) + ); + } + + return $formatted; } /** diff --git a/system/Language/en/Language.php b/system/Language/en/Language.php new file mode 100644 index 000000000000..80920b2f16d5 --- /dev/null +++ b/system/Language/en/Language.php @@ -0,0 +1,15 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +// "Language" language settings +return [ + 'invalidMessageFormat' => 'Invalid message format: "{0}", args: "{1}"', +]; diff --git a/tests/system/Language/LanguageTest.php b/tests/system/Language/LanguageTest.php index 34313e8dfac8..5c75a6d9a28f 100644 --- a/tests/system/Language/LanguageTest.php +++ b/tests/system/Language/LanguageTest.php @@ -14,6 +14,7 @@ use CodeIgniter\Test\CIUnitTestCase; use CodeIgniter\Test\Mock\MockLanguage; use Config\Services; +use InvalidArgumentException; use MessageFormatter; use Tests\Support\Language\SecondMockLanguage; @@ -126,6 +127,28 @@ public function testGetLineArrayFormatsMessages(): void $this->assertSame(['45 related books.'], $this->lang->getLine('books.bookList', [91 / 2])); } + /** + * @see https://github.com/codeigniter4/shield/issues/851 + */ + public function testGetLineInvalidFormatMessage(): void + { + // No intl extension? then we can't test this - go away.... + if (! class_exists(MessageFormatter::class)) { + $this->markTestSkipped('No intl support.'); + } + + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage( + 'Invalid message format: "تم الكشف عن كلمة المرور {0} بسبب اختراق البيانات وشوهدت {1 ، عدد} مرة في {2} في كلمات المرور المخترقة.", args: "password,hits,wording"' + ); + + $this->lang->setData('Auth', [ + 'errorPasswordPwned' => 'تم الكشف عن كلمة المرور {0} بسبب اختراق البيانات وشوهدت {1 ، عدد} مرة في {2} في كلمات المرور المخترقة.', + ]); + + $this->lang->getLine('Auth.errorPasswordPwned', ['password', 'hits', 'wording']); + } + /** * @see https://github.com/codeigniter4/CodeIgniter4/issues/891 */ From 8f34416e796c116447d869525b4388625b0abe77 Mon Sep 17 00:00:00 2001 From: kenjis Date: Mon, 25 Sep 2023 05:39:46 +0900 Subject: [PATCH 2/3] test: set locale to ar --- tests/system/Language/LanguageTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/system/Language/LanguageTest.php b/tests/system/Language/LanguageTest.php index 5c75a6d9a28f..b235ebfa6d41 100644 --- a/tests/system/Language/LanguageTest.php +++ b/tests/system/Language/LanguageTest.php @@ -142,6 +142,8 @@ public function testGetLineInvalidFormatMessage(): void 'Invalid message format: "تم الكشف عن كلمة المرور {0} بسبب اختراق البيانات وشوهدت {1 ، عدد} مرة في {2} في كلمات المرور المخترقة.", args: "password,hits,wording"' ); + $this->lang->setLocale('ar'); + $this->lang->setData('Auth', [ 'errorPasswordPwned' => 'تم الكشف عن كلمة المرور {0} بسبب اختراق البيانات وشوهدت {1 ، عدد} مرة في {2} في كلمات المرور المخترقة.', ]); From 1b94c4ce6d679f69e675c035c30185c071d41569 Mon Sep 17 00:00:00 2001 From: kenjis Date: Mon, 25 Sep 2023 05:42:45 +0900 Subject: [PATCH 3/3] docs: add changelog --- user_guide_src/source/changelogs/v4.4.2.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/user_guide_src/source/changelogs/v4.4.2.rst b/user_guide_src/source/changelogs/v4.4.2.rst index 19f2a4f1782c..6da0e5a04953 100644 --- a/user_guide_src/source/changelogs/v4.4.2.rst +++ b/user_guide_src/source/changelogs/v4.4.2.rst @@ -15,6 +15,8 @@ BREAKING Message Changes *************** +- Added ``Language.invalidMessageFormat`` error message. + Changes *******