Templates 如何在prestashop';什么是聪明的翻译?

Templates 如何在prestashop';什么是聪明的翻译?,templates,smarty,translation,prestashop,smarty3,Templates,Smarty,Translation,Prestashop,Smarty3,我找不到解决办法。我要做的是翻译这个: 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'地区博览会 为此: If your delivery address is in the <span clas

我找不到解决办法。我要做的是翻译这个:

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'地区博览会
为此:

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>"}
{l s=“每届康塞尼亚国际戴尔地区博览会都将举办一次独立展览”}

他们不会被看见。那又怎样呢?

试着将HTML排除在翻译字符串之外。您可以通过制作两个字符串来实现这一点:

{l s="se stai inserendo un indirizzo per consegna all'interno dell'area"} <span class="orange">{l s='EXPO'}</span>
{l s=”在所有的“国际戴尔”区域都有一个独立的国家”}{l s='EXPO'}

翻译功能将删除所有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>'}
{捕获“字符串”}
{l s=“在所有的国际戴尔地区都有一个独立的展览馆{U h1{U h2}”
{/capture}
{$smarty.capture.string | replace:''h1:''''replace:''h2:''replace:
\u h1
\u h2
在翻译中,它们分别被
替换

smarty函数用于将译文转换为变量
字符串
,而不是对其进行显示

所以你的英文翻译应该是这样的

如果您的送货地址位于世博会区域

Prestashop为此提供了一个未记录的解决方案:

您可以在
{l}
函数调用中添加
标记
参数。此参数的值是字符串数组。要将此数组中的标记添加到字符串中,需要使用
[i]x[/i]
(其中
i
是数组中从1开始的标记索引,
x
是您希望看到的由标记包围的文本)

例如,如果要在单个翻译行中呈现此字符串:

欢迎您Florian Lemaitre!
我可以使用以下代码:

{ls='[1]欢迎[/1][2]%s[/2]!'sprintf=[$name]标签=[','']}
在您的情况下,您可以使用:

{l s=“每个consegna all'interno dell'area[1]EXPO[/1]”标签=[''']}

您可以在文件
classes/Translate.php
中找到相关代码:

/**
*在转义所有内容之后和显示之前,对翻译执行操作
*/
公共静态函数后处理转换($string,$params)
{
//如果明确提供了标记,我们希望在转义翻译字符串之后使用它们。
如果(!empty($params['tags'])){
foreach($params['tags']作为$index=>$tag){
//使位置从1开始,使其行为类似于%1$d等sprintf位置参数
$position=$index+1;
//提取标记名
$match=array();

如果(preg_match('/^\s*No)在这种情况下我不能。我的例子很清楚:我需要在翻译中移动单词('EXPO'在'area'单词之前和之后),这就是原因。我会更深入地研究,我们甚至可以提出拉取请求,看看它是如何进行的(目标:PrestaShop 1.7)
{assign var="name" value="Bob"}
{l s='[1]Welcome[/1] [2] %s [/2]!' sprintf=[$name] tags=['<strong>', '<i class="name_class">']}
[1]Welcome[/1] [2] Bob [/2]!