Вопрос

Я использую 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}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top