2016-09-07 4 views
1

TypoScriptの引数を使用してlocallangキーをレンダリングするにはどうすればよいですか?流体中TYPO3 TypoScript:引数を持つ言語ファイル

<trans-unit id="author"> 
    <source>created by %s</source> 
</trans-unit> 

を(%sの値とを交換してください)、それは次のことを行うの:

のTypoScriptを経由して
<f:translate key="author" arguments="{0:authorName}"/> 

そして今?私は次のことを試してみました:USERFUNC経由

page.10 = TEXT  
page.10.dataWrap = {LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:author|'Me'} 

=====
解決方法1:

page.10 = USER_INT 
page.10 { 
    userFunc = FluidTranslate->main 
    extensionName = my_ext 
    key = tx_myext_domain_model_mymodel.author 
    arguments.0 = Me 
} 

はPHP:中

<?php 
class FluidTranslate 
{ 
    public function main($content, $conf) 
    { 
    $extensionName = $conf['extensionName']; 
    $key = $conf['key']; 
    $arguments = $conf['arguments.']; 

    $value = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate($key, $extensionName, $arguments); 
    return $value; 
    } 
} 

答えて

1

を私はこれが可能だとは思いませんTEXTオブジェクトであるため、LLL:をTSから解決するには、TypoScriptFrotnendController->sL()メソッドが使用されます。

しかし、USERオブジェクトを持つユーザー関数を呼び出して、そこにあなたの引数を渡すことができるLocalizationUtility::translate()というラベルをフェッチすることができます。

0

流体のテンプレートがTranslateViewHelperので、これらのマーカー(sprintf()スタイル)をサポート参照してください。解決されたLLLでvsprintf()を呼び出すLocalizationUtilityを呼び出します。

ただし、この同じ処理は現在のTypoScriptでは使用できません。技術的には、新しいタイプのstdWrapとして追加することができますが、これまで、この機能はPHP関数を呼び出すことができる形式で提案されていましたが、これはセキュリティ上の懸念やTypoScript開発者がTYPO3の第2世代の市民(生PHPと比較して)であったために却下されました。

あなたがトリガすることができ\TYPO3\CMS\Frontend\ContentObject\ContentObjectStdWrapHookInterfaceを実装するクラス名を登録することができます$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['stdWrap']にフックの場所があります:あなたはstdWrapとしての挙動を再現するために使用することができONEすぐに利用できるオプションがあるとされていること

特殊なstdWrap構成で、解決された後にsprintf()またはvsprintf()をLLL値で呼び出してください。

このような機能を完了すると、TYPO3に提案/投稿することは非常に意味があります。合理的な機能要求であることは私には分かります!

0

私は現在、TYPO3 CMS 6.2.xで作業しているので、userFuncは私のために働いていました。
私は、選択と組み合わせてCONTENTに基づいて動的値に反応する必要があったため、TypoScriptを拡張しました。

のTypoScript:

page.99 = CONTENT 
page.99 { 
    table = tt_content 
    select { 
    uidInList = 484 
    pidInList = 156 
    } 
    selectFields = uid 

    renderObj = COA 
    renderObj { 

    10 = USER 
    10 { 
     userFunc = FluidTranslate->main 
     extensionName = my_ext 
     key = tx_myext_domain_model_mymodelname.langkey 
     fields.0 = uid 
    } 
    } 
} 

UserFunction:

<?php 

class FluidTranslate 
{ 

    /** 
    * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer 
    */ 
    public $cObj = null; 

    public function main($content, $conf) 
    { 
     $extensionName = $conf['extensionName']; 
     $key = $conf['key']; 
     $arguments = array(); 
     $fields = $conf['fields.']; 

     foreach ($fields as $field) { 
      $arguments[] = $this->cObj->data[$field]; 
     } 


     $value = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate($key, $extensionName, $arguments); 
     return $value; 
    } 
} 
+0

USERにCOAにCOA_INTまたはUSER_INTを切り替えたり、COA_INTを削除し、少しより良いパフォーマンスを取得し、削除するために、直接USER_INTを使用しますか不要な行 –

関連する問題