Pregunta ¿Cómo usar etiquetas html en las traducciones de smart prestashop?


No puedo encontrar una solución Lo que tengo que hacer es traducir esto:

se stai inserendo un indirizzo per consegna all'interno dell'area <span class=orange>EXPO</span>

dentro de esto:

If your delivery address is in the <span class=orange>EXPO</span> area

Si uso etiquetas, como esta:

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

No serán vistos. ¿Y qué?


5
2018-05-19 07:20


origen


Respuestas:


Prestashop proporciona una solución no documentada para esto:

Puedes agregar un tags parámetro dentro del {l} Llamada de función. El valor de este parámetro es una matriz de cadena. Para agregar una etiqueta de esta matriz en la cadena que necesita usar [i]x[/i] (dónde i es el índice de la etiqueta en la matriz a partir de 1 y x es el texto que desea ver rodeado por la etiqueta)

Por ejemplo, si quiero representar esta cadena en una sola línea de traducción:

<strong>Welcome</strong> <i class="name_class">Florian Lemaitre</i>!

Puedo usar este código:

{l s='[1]Welcome[/1] [2]%s[/2]!' sprintf=[$name] tags=['<strong>', '<i class="name_class">']}

En tu caso, puedes usar:

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

Puede encontrar el código relacionado en el archivo. 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;
}

8
2017-11-17 16:29



La función de traducción eliminará todas las etiquetas html, por lo que tendrá que usar una alternativa como esa

{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_ y _h2_ están en la traducción y son reemplazados por <span class="orange"> y </span> respectivamente

El smarty capturar La función se utiliza para obtener la traducción en la variable string en lugar de mostrarlo

Así que tu traducción al inglés sería algo como esto.
If your delivery address is in the _h1_EXPO_h2_ area


2
2018-05-19 13:33



Intente mantener HTML fuera de sus cadenas de traducción. Puedes hacerlo haciendo dos cuerdas:

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

0
2018-05-19 08:08