diff --git a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php index db2551a015746..d6c0d133f6c58 100644 --- a/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php +++ b/lib/internal/Magento/Framework/Phrase/Renderer/Placeholder.php @@ -23,13 +23,16 @@ public function render(array $source, array $arguments) $text = end($source); if ($arguments) { - $placeholders = []; - foreach (array_keys($arguments) as $key) { - $placeholders[] = '%' . (is_int($key) ? strval($key + 1) : $key); - } - $text = str_replace($placeholders, $arguments, $text); + $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); + } } 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..4e36dfb9fdf69 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,13 @@ 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', + ], + ['A %table has four legs', ['tab' => 'Tab-Leiste', 'able' => '', 'table' => 'Tabelle'], 'A Tabelle has four legs'], ]; } }