Динамический контент с PHP и Smarty
-
05-09-2019 - |
Вопрос
Я использую Smarty и соответствующий config_load. {#VAR#}
переменные для реализации локализации.Это работает отлично, пока содержимое находится в шаблонах, но терпит неудачу, как только мне нужно добавить динамический контент в файл TPL, т.е.с:
{if isset($var) }
{foreach from=$var item=line}
{$line}<br>
{/foreach}
{/if}
Обратите внимание, что каждая запись в $var обычно содержит один {#VAR#}
вход - и они есть не переводится (пользователь увидит {#VAR#}
).
Как правильно реализовать локализацию в этом случае?
Решение
В итоге я заменил только {$line}<br>
в приведенном выше коде с:
{eval var=$line}
Это помогло мне.
Решение
Вероятно, вы ищете что-то вроде {eval}
Взгляни на {оценка} документация.
В вашей ситуации вы можете попробовать следующее:
пример.php
<?php
(...)
$var = array("{#OK#}", "{#CANCEL#}");
$smarty->assign('var', $var);
$smarty->display('example.tpl');
?>
пример.config
OK = Okay
CANCEL = Nevermind
пример.tpl
{config_load file='example.config'}
<h1>Template stuff</h1>
{if isset($var) }
{foreach from=$var item=line}
{eval var=$line}<br>
{/foreach}
{/if}
Надеюсь, это поможет!:)
Другие советы
Отличный подход, который я видел, заключался в использовании модификаторов для переводов.это позволяет вам переводить динамический контент.
весь код - это просто пример, он не работает, просто чтобы дать вам представление
скажем так
ваш tpl
{"Hello word! How are you %s?"|translate:"Gabriel"}
{$myvar|translate:"Gabriel"}
ваш модификатор
function smarty_modifier_translate($content, $args) {
$lang = Env::getLanguage();
return vsprintf($lang->getTranslation($content), $args);
}
Как вы, наверное, заметили, Smarty анализирует ваш шаблон в PHP-код и сохраняет его в каталоге templates_c.Это заставляет эту библиотеку работать очень быстро.То, что вы собираетесь сделать, потребует анализа совершенно нового шаблона каждый раз, когда выполняется зацикленный код.Это сделает ваше приложение очень медленным.
Я бы предложил не хранить сообщения в константах, а хранить их в шаблонах, например.
{assign var='lang' value='en'}
{if isset($var) }
{foreach from=$var item=line}
{include file="$lang/$line.tpl"}<br>
{/foreach}
{/if}