Skip to content

Commit 6a6d535

Browse files
committed
ACP2E-537: Unable to use "Translate inline" on the same element second time
- fix
1 parent 44f6a52 commit 6a6d535

File tree

6 files changed

+34
-15
lines changed

6 files changed

+34
-15
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ public function execute()
5252
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
5353
$resultJson = $this->resultJsonFactory->create();
5454
try {
55-
$this->inlineParser->processAjaxPost($translate);
56-
$response = ['success' => 'true'];
55+
$response = $this->inlineParser->processAjaxPost($translate);
5756
} catch (\Exception $e) {
5857
$response = ['error' => 'true', 'message' => $e->getMessage()];
5958
}

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/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)