Pregunta

Estoy usando Smarty y la utilización de las respectivas variables {#VAR#} config_load para implementar la localización. Se trata de trabajar perfectamente bien, siempre y cuando el contenido está dentro de las plantillas, pero no tan pronto como sea tengo que añadir contenido dinámico dentro del archivo TPL, es decir, con:

{if isset($var) }
    {foreach from=$var item=line}
        {$line}<br>
    {/foreach}
{/if}

Tenga en cuenta que cada entrada dentro de $ var contiene generalmente una entrada {#VAR#} -. Y son no traducidas (el usuario verá {#VAR#})

¿Cuál es la forma correcta de aplicar la localización en este caso?


Solución

Terminé sólo reemplazando {$line}<br> en el código anterior con:

{eval var=$line}

Esto hizo el truco para mí.

¿Fue útil?

Solución

Usted probablemente está buscando algo como {eval}

Tome un vistazo a {eval} documentación .

En su situación, usted podría intentar esto:

ejemplo.php

<?php
  (...)
  $var = array("{#OK#}", "{#CANCEL#}");
  $smarty->assign('var', $var);
  $smarty->display('example.tpl');
?>

example.config

OK = Okay
CANCEL = Nevermind

example.tpl

{config_load file='example.config'}

<h1>Template stuff</h1>

{if isset($var) }
  {foreach from=$var item=line}
    {eval var=$line}<br>
  {/foreach}
{/if}

Espero que ayude! :)

Otros consejos

una gran aproach que he visto fue el uso de modificadores de traducciones. esto le permite traducir el contenido dinámico.

Todo el código es sólo un ejemplo, no funcionará, sólo para darle una idea

Digamos que

su TPL

{"Hello word! How are you %s?"|translate:"Gabriel"}


{$myvar|translate:"Gabriel"}

el modificador

function smarty_modifier_translate($content, $args) {
  $lang = Env::getLanguage();
  return vsprintf($lang->getTranslation($content), $args);

}

Smarty Como podrá darse cuenta analiza su plantilla en el código php y lo almacena en el directorio templates_c. Esto hace que esta biblioteca correr muy rápido. Lo que vas a lograr requeriría analizar una completamente nueva plantilla cada vez que se ejecuta un código de bucle. Esto haría que su aplicación es muy lento.

Yo sugeriría que no almacenar mensajes en constatnts, pero para almacenarlo en plantillas, por ejemplo.

{assign var='lang' value='en'}
{if isset($var) }
    {foreach from=$var item=line}
        {include file="$lang/$line.tpl"}<br>
    {/foreach}
{/if}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top