سؤال

أنا أستخدم 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');
?>

مثال

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}

امل ان يساعد! :)

نصائح أخرى

كان إبرة رائعة رأيته يستخدم المعدلات للترجمات. هذا يسمح لك بترجمة المحتوى الديناميكي.

جميع الكود هو مثال فقط، لن تعمل، فقط لتعطيك فكرة

دعنا نقول

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