Skip to content

Commit d09b736

Browse files
committed
Process nested trans directives, fixes #35449
1 parent 28c1f28 commit d09b736

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/expectedPhrases.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,7 @@
1818
"string with escaped ""double quotes""","string with escaped ""double quotes"""
1919
"string with placeholder in escaped double quotes ""%1""","string with placeholder in escaped double quotes ""%1"""
2020
"string that's got an unclosed single quote in it","string that's got an unclosed single quote in it"
21+
"Thank you for your order from %store_name.","Thank you for your order from %store_name."
22+
"Our hours are <span class=""no-link"">%store_hours</span>.","Our hours are <span class=""no-link"">%store_hours</span>."
23+
"Translation inside if directive","Translation inside if directive"
2124
"Test di text","Test di text"
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<!--
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
-->
7+
8+
{{template config_path="design/email/header_template"}}
9+
10+
<table>
11+
<tr class="email-intro">
12+
<td>
13+
<p>
14+
{{trans "Thank you for your order from %store_name." store_name=$store.frontend_name}}
15+
</p>
16+
<p>
17+
{{depend store_hours}}
18+
{{trans 'Our hours are <span class="no-link">%store_hours</span>.' store_hours=$store_hours |raw}}
19+
{{/depend}}
20+
</p>
21+
{{if something}}
22+
<p>{{trans 'Translation inside if directive'}}</p>
23+
{{/if}}
24+
</td>
25+
</tr>
26+
</table>
27+
28+
{{template config_path="design/email/footer_template"}}

setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Html.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ protected function _parse()
5050
throw new Exception('Failed to load file from disk.');
5151
}
5252

53+
$this->extractPhrasesFromTransDirective($data);
54+
$this->extractPhrases(self::REGEX_I18N_BINDING, $data, 2, 1);
55+
$this->extractPhrases(self::REGEX_TRANSLATE_TAG_OR_ATTR, $data, 3, 2);
56+
$this->extractPhrases(Js::REGEX_TRANSLATE_FUNCTION, $data, 3, 2);
57+
}
58+
59+
private function extractPhrasesFromTransDirective(string $data): void
60+
{
5361
$results = [];
5462
preg_match_all(Filter::CONSTRUCTION_PATTERN, $data, $results, PREG_SET_ORDER);
5563
for ($i = 0, $count = count($results); $i < $count; $i++) {
@@ -61,12 +69,11 @@ protected function _parse()
6169

6270
$quote = $directive[1];
6371
$this->_addPhrase($quote . $directive[2] . $quote);
72+
} elseif (in_array($results[$i][1], ['depend', 'if'], true) && isset($results[$i][3])) {
73+
// make sure to process trans directives nested inside depend / if directives
74+
$this->extractPhrasesFromTransDirective($results[$i][3]);
6475
}
6576
}
66-
67-
$this->extractPhrases(self::REGEX_I18N_BINDING, $data, 2, 1);
68-
$this->extractPhrases(self::REGEX_TRANSLATE_TAG_OR_ATTR, $data, 3, 2);
69-
$this->extractPhrases(Js::REGEX_TRANSLATE_FUNCTION, $data, 3, 2);
7077
}
7178

7279
/**

0 commit comments

Comments
 (0)