Skip to content

Commit e36b4d0

Browse files
committed
MC-35771: Datepicker/calendar control does not use the store locale
1 parent 4641ddd commit e36b4d0

File tree

2 files changed

+49
-13
lines changed

2 files changed

+49
-13
lines changed

app/code/Magento/Customer/Test/Unit/Block/Widget/DobTest.php

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ class DobTest extends TestCase
9797
*/
9898
private $encoder;
9999

100+
/**
101+
* @var ResolverInterface
102+
*/
103+
private $localeResolver;
104+
100105
/**
101106
* @inheritDoc
102107
*/
@@ -116,14 +121,15 @@ protected function setUp(): void
116121
$cache->expects($this->any())->method('getFrontend')->willReturn($frontendCache);
117122

118123
$objectManager = new ObjectManager($this);
119-
$localeResolver = $this->getMockForAbstractClass(ResolverInterface::class);
120-
$localeResolver->expects($this->any())
124+
$this->localeResolver = $this->getMockForAbstractClass(ResolverInterface::class);
125+
$this->localeResolver->expects($this->any())
121126
->method('getLocale')
122127
->willReturnCallback(
123128
function () {
124129
return $this->_locale;
125130
}
126131
);
132+
$localeResolver = $this->localeResolver;
127133
$timezone = $objectManager->getObject(
128134
Timezone::class,
129135
['localeResolver' => $localeResolver, 'dateFormatterFactory' => new DateFormatterFactory()]
@@ -172,7 +178,8 @@ function () use ($timezone, $localeResolver) {
172178
$this->createMock(Date::class),
173179
$this->filterFactory,
174180
[],
175-
$this->encoder
181+
$this->encoder,
182+
$this->localeResolver
176183
);
177184
}
178185

@@ -612,13 +619,16 @@ public function testGetHtmlExtraParamsWithRequiredOption()
612619
/**
613620
* Tests getTranslatedCalendarConfigJson()
614621
*
622+
* @param string $locale
615623
* @param array $expectedArray
616624
* @param string $expectedJson
617625
* @dataProvider getTranslatedCalendarConfigJsonDataProvider
618626
* @return void
619627
*/
620-
public function testGetTranslatedCalendarConfigJson(array $expectedArray, string $expectedJson): void
628+
public function testGetTranslatedCalendarConfigJson(string $locale, array $expectedArray, string $expectedJson): void
621629
{
630+
$this->_locale = $locale;
631+
622632
$this->encoder->expects($this->once())
623633
->method('encode')
624634
->with($expectedArray)
@@ -639,6 +649,7 @@ public function getTranslatedCalendarConfigJsonDataProvider()
639649
{
640650
return [
641651
[
652+
'locale' => 'en_US',
642653
'expectedArray' => [
643654
'closeText' => 'Done',
644655
'prevText' => 'Prev',
@@ -653,6 +664,22 @@ public function getTranslatedCalendarConfigJsonDataProvider()
653664
],
654665
'expectedJson' => '{"closeText":"Done","prevText":"Prev","nextText":"Next","currentText":"Today","monthNames":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthNamesShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dayNamesShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dayNamesMin":["Su","Mo","Tu","We","Th","Fr","Sa"]}'
655666
],
667+
[
668+
'locale' => 'de_DE',
669+
'expectedArray' => [
670+
'closeText' => 'Done',
671+
'prevText' => 'Prev',
672+
'nextText' => 'Next',
673+
'currentText' => 'Today',
674+
'monthNames' => ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
675+
'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
676+
'monthNamesShort' => ['Jan.', 'Feb.', 'März', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sept.', 'Okt.', 'Nov.', 'Dez.'],
677+
'dayNames' => ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
678+
'dayNamesShort' => ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],
679+
'dayNamesMin' => ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],
680+
],
681+
'expectedJson' => '{"closeText":"Done","prevText":"Prev","nextText":"Next","currentText":"Today","monthNames":["Januar","Februar","M\u00e4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"monthNamesShort":["Jan.","Feb.","M\u00e4rz","Apr.","Mai","Juni","Juli","Aug.","Sept.","Okt.","Nov.","Dez."],"dayNames":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dayNamesShort":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayNamesMin":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."]}'
682+
],
656683
];
657684
}
658685
}

app/code/Magento/Customer/view/frontend/templates/widget/dob.phtml

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* See COPYING.txt for license details.
55
*/
66

7+
/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
78
/** @var \Magento\Customer\Block\Widget\Dob $block */
89

910
/*
@@ -23,6 +24,7 @@ NOTE: Regarding styles - if we leave it this way, we'll move it to boxes.css. Al
2324
automatically using block input parameters.
2425
*/
2526

27+
$translatedCalendarConfigJson = $block->getTranslatedCalendarConfigJson();
2628
$fieldCssClass = 'field date field-' . $block->getHtmlId();
2729
$fieldCssClass .= $block->isRequired() ? ' required' : '';
2830
?>
@@ -46,13 +48,20 @@ $fieldCssClass .= $block->isRequired() ? ' required' : '';
4648
}
4749
</script>
4850

49-
<script>
50-
require([
51-
'jquery',
52-
'jquery-ui-modules/datepicker'
53-
], function ( $ ) {
54-
$.extend(true, $, {
55-
calendarConfig: <?= $block->escapeJs($block->getTranslatedCalendarConfigJson()); ?>
56-
});
51+
<?php $scriptString = <<<script
52+
53+
require([
54+
'jquery',
55+
'jquery-ui-modules/datepicker'
56+
], function($){
57+
58+
//<![CDATA[
59+
$.extend(true, $, {
60+
calendarConfig: {$translatedCalendarConfigJson}
5761
});
58-
</script>
62+
//]]>
63+
64+
});
65+
script;
66+
?>
67+
<?= /* @noEscape */ $secureRenderer->renderTag('script', [], $scriptString, false) ?>

0 commit comments

Comments
 (0)