2015-05-19 44 views
4

我找不到解决方案。我所要做的就是翻译:如果我使用标签,这样如何在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> 

到这一点。所以呢?

回答

6

的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; 
} 
0

尝试将HTML保留在翻译字符串之外。你可以做,通过使两个字符串:

{l s="se stai inserendo un indirizzo per consegna all'interno dell'area"} <span class="orange">{l s='EXPO'}</span> 
+1

没有在这种情况下,我不能。我的例子很清楚:我需要在翻译中移动词语(''EXPO'在''区域'词语之前和之后),这就是为什么。 – Stratboy

2

的翻译功能将删除所有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

+0

解决这个问题的一个不错的核心解决方案。 – dlopezgonzalez

+0

我会进一步了解一下,我们甚至可以提出一个拉动请求,看看它是如何发展的(目标:PrestaShop 1.7) – UnLoCo