Skip to content

Commit 773e7c5

Browse files
committed
Merge remote-tracking branch 'l3/ACP2E-537' into PR_L3_22_04_2022
2 parents 75a1797 + aa1e428 commit 773e7c5

File tree

7 files changed

+55
-19
lines changed

7 files changed

+55
-19
lines changed

app/code/Magento/Backend/Controller/Adminhtml/Ajax/Translate.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
*/
77
namespace Magento\Backend\Controller\Adminhtml\Ajax;
88

9+
use Magento\Framework\App\Action\HttpPostActionInterface;
910
use Magento\Backend\App\Action;
1011

11-
class Translate extends \Magento\Backend\App\Action
12+
class Translate extends \Magento\Backend\App\Action implements HttpPostActionInterface
1213
{
1314
/**
1415
* @var \Magento\Framework\Translate\Inline\ParserInterface
@@ -23,7 +24,7 @@ class Translate extends \Magento\Backend\App\Action
2324
/**
2425
* Authorization level of a basic admin session
2526
*/
26-
const ADMIN_RESOURCE = 'Magento_Backend::content_translation';
27+
public const ADMIN_RESOURCE = 'Magento_Backend::content_translation';
2728

2829
/**
2930
* @param Action\Context $context
@@ -52,8 +53,7 @@ public function execute()
5253
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
5354
$resultJson = $this->resultJsonFactory->create();
5455
try {
55-
$this->inlineParser->processAjaxPost($translate);
56-
$response = ['success' => 'true'];
56+
$response = $this->inlineParser->processAjaxPost($translate);
5757
} catch (\Exception $e) {
5858
$response = ['error' => 'true', 'message' => $e->getMessage()];
5959
}

app/code/Magento/Translation/Model/Inline/Parser.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Parser implements ParserInterface
2828
/**
2929
* data-translate html element attribute name
3030
*/
31-
const DATA_TRANSLATE = 'data-translate';
31+
public const DATA_TRANSLATE = 'data-translate';
3232

3333
/**
3434
* @var Escaper
@@ -426,7 +426,12 @@ private function _getTranslateData(string $regexp, string &$text, callable $loca
426426
'location' => htmlspecialchars_decode($locationCallback($matches, $options)),
427427
]
428428
);
429-
$text = substr_replace($text, $matches[1][0], $matches[0][1], strlen($matches[0][0]));
429+
430+
if (!str_contains($text, 'text/x-magento-init')) {
431+
$text = substr_replace($text, $matches[1][0], $matches[0][1], strlen($matches[0][0]));
432+
} else {
433+
$text = substr_replace($text, $matches[3][0], $matches[0][1], strlen($matches[0][0]));
434+
}
430435
$next = $matches[0][1];
431436
}
432437
return $trArr;

app/code/Magento/Translation/etc/di.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
<arguments>
4444
<argument name="renderers" xsi:type="array">
4545
<item name="translation" xsi:type="object">Magento\Framework\Phrase\Renderer\Translate</item>
46-
<item name="messageFormatter" xsi:type="object">Magento\Framework\Phrase\Renderer\MessageFormatter</item>
4746
<item name="placeholder" xsi:type="object">Magento\Framework\Phrase\Renderer\Placeholder</item>
4847
<item name="inline" xsi:type="object">Magento\Framework\Phrase\Renderer\Inline</item>
4948
</argument>

lib/internal/Magento/Framework/Phrase/Renderer/Inline.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
<?php
22
/**
3-
* Translate Inline Phrase renderer
4-
*
53
* Copyright © Magento, Inc. All rights reserved.
64
* See COPYING.txt for license details.
75
*/
@@ -12,6 +10,9 @@
1210
use Magento\Framework\Translate\Inline\ProviderInterface;
1311
use Psr\Log\LoggerInterface;
1412

13+
/**
14+
* Translate Inline Phrase renderer
15+
*/
1516
class Inline implements RendererInterface
1617
{
1718
/**

lib/internal/Magento/Framework/Phrase/Renderer/Translate.php

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,35 @@
1515
class Translate implements RendererInterface
1616
{
1717
/**
18-
* @var \Magento\Framework\TranslateInterface
18+
* @var TranslateInterface
1919
*/
2020
protected $translator;
2121

2222
/**
23-
* @var \Psr\Log\LoggerInterface
23+
* @var LoggerInterface
2424
*/
2525
protected $logger;
2626

27+
/**
28+
* @var MessageFormatter
29+
*/
30+
private $messageFormatter;
31+
2732
/**
2833
* Renderer construct
2934
*
30-
* @param \Magento\Framework\TranslateInterface $translator
31-
* @param \Psr\Log\LoggerInterface $logger
35+
* @param TranslateInterface $translator
36+
* @param LoggerInterface $logger
37+
* @param MessageFormatter $messageFormatter
3238
*/
3339
public function __construct(
3440
TranslateInterface $translator,
35-
LoggerInterface $logger
41+
LoggerInterface $logger,
42+
MessageFormatter $messageFormatter
3643
) {
3744
$this->translator = $translator;
3845
$this->logger = $logger;
46+
$this->messageFormatter = $messageFormatter;
3947
}
4048

4149
/**
@@ -60,6 +68,8 @@ public function render(array $source, array $arguments)
6068
throw $e;
6169
}
6270

63-
return array_key_exists($text, $data) ? $data[$text] : end($source);
71+
$source[] = array_key_exists($text, $data) ? $data[$text] : end($source);
72+
73+
return $this->messageFormatter->render($source, $arguments);
6474
}
6575
}

lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/TranslateTest.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\Framework\Phrase\Test\Unit\Renderer;
99

10+
use Magento\Framework\Phrase\Renderer\MessageFormatter;
1011
use Magento\Framework\Phrase\Renderer\Translate as PhraseRenderer;
1112
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
1213
use Magento\Framework\Translate;
@@ -32,18 +33,32 @@ class TranslateTest extends TestCase
3233
*/
3334
protected $loggerMock;
3435

36+
/**
37+
* @var MessageFormatter|MockObject
38+
*/
39+
private $messageFormatter;
40+
3541
protected function setUp(): void
3642
{
3743
$this->_translator = $this->getMockForAbstractClass(TranslateInterface::class);
3844
$this->loggerMock = $this->getMockBuilder(LoggerInterface::class)
3945
->getMock();
46+
$this->messageFormatter = $this->getMockBuilder(MessageFormatter::class)
47+
->disableOriginalConstructor()
48+
->getMock();
49+
$this->messageFormatter
50+
->method('render')
51+
->willReturnCallback(function ($source) {
52+
return end($source);
53+
});
4054

4155
$objectManagerHelper = new ObjectManager($this);
4256
$this->_renderer = $objectManagerHelper->getObject(
4357
PhraseRenderer::class,
4458
[
4559
'translator' => $this->_translator,
46-
'logger' => $this->loggerMock
60+
'logger' => $this->loggerMock,
61+
'messageFormatter' => $this->messageFormatter,
4762
]
4863
);
4964
}
@@ -96,7 +111,8 @@ public function testRenderException()
96111
{
97112
$message = 'something went wrong';
98113
$exception = new \Exception($message);
99-
114+
$this->messageFormatter->expects($this->never())
115+
->method('render');
100116
$this->_translator->expects($this->once())
101117
->method('getData')
102118
->willThrowException($exception);

lib/web/mage/translate-inline.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ define([
1818
template: '#translate-form-template',
1919
data: {
2020
id: 'translate-inline-form',
21-
message: 'Please refresh the page to see your changes after submitting this form.'
21+
message: 'Please refresh the page to see your changes after submitting this form. ' +
22+
'Note: browser cache refresh may be required'
2223
}
2324
},
2425
autoOpen: false,
@@ -157,9 +158,12 @@ define([
157158
* @private
158159
*/
159160
_formSubmitComplete: function (response) {
161+
var responseJSON = response.responseJSON || response;
162+
160163
this.close();
161164
this.formIsSubmitted = false;
162-
this._updatePlaceholder(response.responseJSON[this.data.items[0].original]);
165+
$.mage.translate.add(responseJSON);
166+
this._updatePlaceholder(responseJSON[this.data.items[0].original]);
163167
},
164168

165169
/**
@@ -172,6 +176,7 @@ define([
172176

173177
translateObject.shown = newValue;
174178
translateObject.translated = newValue;
179+
$.mage.translate.add(this.data.items[0].original, newValue);
175180

176181
$target.html(newValue);
177182
},

0 commit comments

Comments
 (0)