From 57a7f65dcd8ff96406c318a8836f22c5f864f82d Mon Sep 17 00:00:00 2001 From: Josh Di Fabio Date: Tue, 16 Jun 2015 17:31:31 +0100 Subject: [PATCH 1/3] Allow phrases to contain more than nine numeric placeholders --- .../Magento/Framework/Phrase/Renderer/Placeholder.php | 2 ++ .../Phrase/Test/Unit/Renderer/PlaceholderTest.php | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php index db2551a015746..b0c474cee82ab 100644 --- a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php +++ b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php @@ -24,6 +24,8 @@ public function render(array $source, array $arguments) if ($arguments) { $placeholders = []; + /** @see https://github.com/magento/magento2/issues/1374 */ + krsort($arguments); foreach (array_keys($arguments) as $key) { $placeholders[] = '%' . (is_int($key) ? strval($key + 1) : $key); } diff --git a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php index d33be18ef57c7..605aabe6ab6fa 100644 --- a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php +++ b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php @@ -55,7 +55,12 @@ public function renderPlaceholderDataProvider() 'three text two text one' ], ['text %1 text %2 text', [], 'text %1 text %2 text'], - ['%1 text %2', ['one'], 'one text %2'] + ['%1 text %2', ['one'], 'one text %2'], + [ + '%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11', + ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven'], + 'one two three four five six seven eight nine ten eleven', + ], ]; } } From 8e1e4b96ddb787fca0b88708d4e5d19ac9e6f663 Mon Sep 17 00:00:00 2001 From: Josh Di Fabio Date: Wed, 17 Jun 2015 09:41:48 +0100 Subject: [PATCH 2/3] Improve Framework\Phrase\Renderer\Placeholder and add additional test --- .../Framework/Phrase/Renderer/Placeholder.php | 15 ++++++++------- .../Phrase/Test/Unit/Renderer/PlaceholderTest.php | 1 + 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php index b0c474cee82ab..140ab92dbc476 100644 --- a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php +++ b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php @@ -23,13 +23,14 @@ public function render(array $source, array $arguments) $text = end($source); if ($arguments) { - $placeholders = []; - /** @see https://github.com/magento/magento2/issues/1374 */ - krsort($arguments); - foreach (array_keys($arguments) as $key) { - $placeholders[] = '%' . (is_int($key) ? strval($key + 1) : $key); - } - $text = str_replace($placeholders, $arguments, $text); + $placeholders = array_map( + function ($key) { + return '%' . (is_int($key) ? strval($key + 1) : $key); + }, + array_keys($arguments) + ); + $pairs = array_combine($placeholders, $arguments); + $text = strtr($text, $pairs); } return $text; diff --git a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php index 605aabe6ab6fa..4e36dfb9fdf69 100644 --- a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php +++ b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/PlaceholderTest.php @@ -61,6 +61,7 @@ public function renderPlaceholderDataProvider() ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven'], 'one two three four five six seven eight nine ten eleven', ], + ['A %table has four legs', ['tab' => 'Tab-Leiste', 'able' => '', 'table' => 'Tabelle'], 'A Tabelle has four legs'], ]; } } From 32a856f95cac20c583b32b7bbe9e35bde3c648bc Mon Sep 17 00:00:00 2001 From: Josh Di Fabio Date: Wed, 17 Jun 2015 09:47:28 +0100 Subject: [PATCH 3/3] Optimise Framework\Phrase\Renderer\Placeholder --- .../Framework/Phrase/Renderer/Placeholder.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php index 140ab92dbc476..d6c0d133f6c58 100644 --- a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php +++ b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php @@ -23,16 +23,16 @@ public function render(array $source, array $arguments) $text = end($source); if ($arguments) { - $placeholders = array_map( - function ($key) { - return '%' . (is_int($key) ? strval($key + 1) : $key); - }, - array_keys($arguments) - ); + $placeholders = array_map([$this, 'keyToPlaceholder'], array_keys($arguments)); $pairs = array_combine($placeholders, $arguments); $text = strtr($text, $pairs); } return $text; } + + private function keyToPlaceholder($key) + { + return '%' . (is_int($key) ? strval($key + 1) : $key); + } }