如何在prestashop的smarty翻译中使用html标签?
我找不到解决方案。我所要做的就是翻译:如果我使用标签,这样如何在prestashop的smarty翻译中使用html标签?
If your delivery address is in the <span class=orange>EXPO</span> area
:
{l s="se stai inserendo un indirizzo per consegna all'interno dell'area <span class=orange>EXPO</span>"}
他们不会看到
se stai inserendo un indirizzo per consegna all'interno dell'area <span class=orange>EXPO</span>
到这一点。所以呢?
的Prestashop为此提供了一个无证的解决方案:
您可以添加{l}
函数调用内部的tags
参数。此参数的值是一个字符串数组。从这个数组字符串中添加一个标签,你需要使用[i]x[/i]
(其中i
为1和x
从数组标签索引要看到标签包围的文本)
例如,如果我想使这个字符串在一个单一的翻译线:
<strong>Welcome</strong> <i class="name_class">Florian Lemaitre</i>!
我可以使用此代码:
{l s='[1]Welcome[/1] [2]%s[/2]!' sprintf=[$name] tags=['<strong>', '<i class="name_class">']}
你的情况,你可以使用:
{l s="se stai inserendo un indirizzo per consegna all'interno dell'area [1]EXPO[/1]" tags=['<span class=orange>']}
您可以在文件classes/Translate.php
找到相关的代码:
/**
* Perform operations on translations after everything is escaped and before displaying it
*/
public static function postProcessTranslation($string, $params)
{
// If tags were explicitely provided, we want to use them *after* the translation string is escaped.
if (!empty($params['tags'])) {
foreach ($params['tags'] as $index => $tag) {
// Make positions start at 1 so that it behaves similar to the %1$d etc. sprintf positional params
$position = $index + 1;
// extract tag name
$match = array();
if (preg_match('/^\s*<\s*(\w+)/', $tag, $match)) {
$opener = $tag;
$closer = '</'.$match[1].'>';
$string = str_replace('['.$position.']', $opener, $string);
$string = str_replace('[/'.$position.']', $closer, $string);
$string = str_replace('['.$position.'/]', $opener.$closer, $string);
}
}
}
return $string;
}
尝试将HTML保留在翻译字符串之外。你可以做,通过使两个字符串:
{l s="se stai inserendo un indirizzo per consegna all'interno dell'area"} <span class="orange">{l s='EXPO'}</span>
的翻译功能将删除所有HTML标记,所以你将不得不使用像这样
{capture "string"}
{l s="se stai inserendo un indirizzo per consegna all'interno dell'area _h1_EXPO_h2_"}
{/capture}
{$smarty.capture.string|replace:'_h1_':'<span class="orange">'|replace:'_h2_':'</span>'}
_h1_
和_h2_
另一种是在翻译和他们分别被<span class="orange">
和</span>
取代
聪明的capture函数用于获取翻译到变量string
,而不是dispaying它
所以,你的英文翻译是这样的If your delivery address is in the _h1_EXPO_h2_ area
解决这个问题的一个不错的核心解决方案。 – dlopezgonzalez
我会进一步了解一下,我们甚至可以提出一个拉动请求,看看它是如何发展的(目标:PrestaShop 1.7) – UnLoCo
没有在这种情况下,我不能。我的例子很清楚:我需要在翻译中移动词语(''EXPO'在''区域'词语之前和之后),这就是为什么。 – Stratboy