我正在使用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}
这对我有用。
答案 0 :(得分:2)
所有代码只是一个例子,不会工作,只是为了给你一个想法
让我们说
{"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);
}
答案 1 :(得分:1)
您可能正在寻找类似{eval}
的内容查看{eval}文档。
关于你的情况,你可以试试这个:
<?php
(...)
$var = array("{#OK#}", "{#CANCEL#}");
$smarty->assign('var', $var);
$smarty->display('example.tpl');
?>
OK = Okay
CANCEL = Nevermind
{config_load file='example.config'}
<h1>Template stuff</h1>
{if isset($var) }
{foreach from=$var item=line}
{eval var=$line}<br>
{/foreach}
{/if}
希望有所帮助! :)
答案 2 :(得分:0)
您可能已经注意到smarty将您的模板解析为php代码并将其存储在templates_c目录中。它使这个库运行得非常快。您将要完成的任务是每次执行循环代码时都需要解析一个完整的新模板。这会使您的应用程序变得非常慢。
我建议不要在constatnts中存储消息,而是将其存储在模板中,例如
{assign var='lang' value='en'}
{if isset($var) }
{foreach from=$var item=line}
{include file="$lang/$line.tpl"}<br>
{/foreach}
{/if}