문제

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}과 같은 것을 찾고있을 것입니다.

보세요 {Eval} 선적 서류 비치.

당신의 상황에서, 당신은 이것을 시도 할 수 있습니다 :

example.php

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

example.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 디렉토리에 저장 한 것을 보았을 것입니다. 이 라이브러리가 매우 빠르게 실행됩니다. 달성하려는 것은 루프 코드가 실행될 때마다 완전한 새 템플릿을 구문 분석해야합니다. 이렇게하면 응용 프로그램이 매우 느려집니다.

Constatnts에 메시지를 저장하지 않고 템플릿에 메시지를 저장하는 것이 좋습니다.

{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