Skip to content
This repository was archived by the owner on Jan 30, 2020. It is now read-only.

Commit d29b881

Browse files
committed
Merge branch 'feature/104' into develop
Close #104
2 parents 1dbf69b + bce9708 commit d29b881

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ All notable changes to this project will be documented in this file, in reverse
66

77
### Added
88

9-
- Nothing.
9+
- [#104](https://github.com/zendframework/zend-form/pull/104) adds the ability
10+
for the `FormElementErrors` view helper to translate validation error messages
11+
using the composed translator and text domain instances.
1012

1113
### Deprecated
1214

src/View/Helper/FormElementErrors.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,13 @@ public function render(ElementInterface $element, array $attributes = [])
7878
// Flatten message array
7979
$escapeHtml = $this->getEscapeHtmlHelper();
8080
$messagesToPrint = [];
81-
array_walk_recursive($messages, function ($item) use (&$messagesToPrint, $escapeHtml) {
81+
$translator = $this->getTranslator();
82+
$textDomain = $this->getTranslatorTextDomain();
83+
$messageCallback = function ($item) use (&$messagesToPrint, $escapeHtml, $translator, $textDomain) {
84+
$item = $translator ? $translator->translate($item, $textDomain) : $item;
8285
$messagesToPrint[] = $escapeHtml($item);
83-
});
86+
};
87+
array_walk_recursive($messages, $messageCallback);
8488

8589
if (empty($messagesToPrint)) {
8690
return '';

test/View/Helper/FormElementErrorsTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,32 @@ public function testRendersErrorMessagesUsingUnorderedListByDefault()
4848
// @codingStandardsIgnoreEnd
4949
}
5050

51+
public function testRendersErrorMessagesUsingUnorderedListTranslated()
52+
{
53+
$mockTranslator = $this->createMock('Zend\I18n\Translator\Translator');
54+
$mockTranslator->expects($this->at(0))
55+
->method('translate')
56+
->will($this->returnValue('Translated first error message'));
57+
$mockTranslator->expects($this->at(1))
58+
->method('translate')
59+
->will($this->returnValue('Translated second error message'));
60+
$mockTranslator->expects($this->at(2))
61+
->method('translate')
62+
->will($this->returnValue('Translated third error message'));
63+
64+
$this->helper->setTranslator($mockTranslator);
65+
$this->assertTrue($this->helper->hasTranslator());
66+
67+
$this->helper->setTranslatorTextDomain('default');
68+
69+
$messages = $this->getMessageList();
70+
$element = new Element('foo');
71+
$element->setMessages($messages);
72+
73+
$markup = $this->helper->render($element);
74+
$this->assertRegexp('#<ul>\s*<li>Translated first error message</li>\s*<li>Translated second error message</li>\s*<li>Translated third error message</li>\s*</ul>#s', $markup);
75+
}
76+
5177
public function testCanSpecifyAttributesForOpeningTag()
5278
{
5379
$messages = $this->getMessageList();

0 commit comments

Comments
 (0)