2012-05-04 13 views
7

क्या TYPO3 फ़्लूइड टेम्पलेट में वर्तमान भाषा कुंजी (या कोड) प्राप्त करना संभव है?TYPO3 द्रव टेम्पलेट भाषा कोड प्राप्त करें

इस बीच मैं एक और समाधान मिल गया है एक दृश्य के सहायक का उपयोग कर में पाया here:

<?php 
class Tx_AboUnitReservation_ViewHelpers_LanguageViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper { 

    /** 
    * Get the current language 
    */ 
    protected function getLanguage() { 
     if (TYPO3_MODE === 'FE') { 
      if (isset($GLOBALS['TSFE']->config['config']['language'])) { 
       return $GLOBALS['TSFE']->config['config']['language']; 
      } 
     } elseif (strlen($GLOBALS['BE_USER']->uc['lang']) > 0) { 
      return $GLOBALS['BE_USER']->uc['lang']; 
     } 
     return 'en'; //default 
    } 

    /** 
    * Return current language 
    * @return string 
    */ 
    public function render() { 
     return $this->getLanguage(); 
    } 

} 

?> 

कौन सा मैं तरल पदार्थ टेम्प्लेट में उसका उपयोग इस प्रकार है।

<f:alias map="{isGerman: 'de'}"> 
    <f:if condition="{aboUnitReservation:language()} == {isGerman}"> 
     <script type="text/javascript" src="{f:uri.resource(path:'js/jquery.ui.datepicker-de-CH.js')}"></script> 
    </f:if> 
</f:alias> 

उत्तर

9

आप बस अपनी कार्रवाई में चर निर्दिष्ट कर सकते हैं:

$this->view->assign("sysLanguageUid", $GLOBALS['TSFE']->sys_language_uid); 

और फिर अपने ध्यान में रखते हुए इसे पढ़ा: दूसरी ओर

<f:if condition="{sysLanguageUid} == 0"> 
    You're reading English version of page 
</f:if> 

आसान और अधिक हो जाएगा <f:if ...> ब्लॉक के रूप में नियंत्रक में रेडी-टू-यूज वैरिएबल को असाइन करने में सहजता काफी सरल है और कभी-कभी केवल असहज होती है:

+0

जो मैंने पाया है उससे बहुत सरल और सुरुचिपूर्ण - धन्यवाद। –

+5

मैं इस प्रकार के असाइनमेंट के खिलाफ सलाह दूंगा, इसमें कुछ समस्याएं हैं। सबसे पहले, यह सिस्टम भाषा यूआईडी के लिए हार्ड-कोड किए गए संदर्भों का उपयोग करता है जो किसी अन्य साइट पर स्थानांतरित होने पर तोड़ने की संभावना है। दूसरा, यदि आपको लेबल का अनुवाद करने की आवश्यकता है, तो आपको 'f: translate' का उपयोग करना चाहिए। शायद एक बेहतर रणनीति भाषा से "ध्वज आइकन नाम" मान पढ़ने और अनुवादित लेबल के नाम पर इसका उपयोग करना है, उदा। 'एलएलएल: EXT: myext/Resources/Private/language/locallang.xml: languages.de' और' .en' आदि –

1

एक और विकल्प वीएचएस एक्सटेंशन से v:page.languageMenu व्यूहेल्पर का उपयोग करना हो सकता है। - आप के लिए कर सकते हैं

{namespace v=Tx_Vhs_ViewHelpers} 
<v:page.languageMenu as="languages"> 

    <!-- gets the current language key --> 
    {languages -> v:iterator.filter(propertyName: 'current', filter: 1)} 

    <!-- iterates over flag names of all languages which apply to the current page --> 
    <f:for each="{languages -> v:iterator.extract(key: 'flag')}" as="languageFlagName"> 

     <!-- example suggestion: image --> 
     <f:image src="{f:uri.resources(path: 'Images/Flags/{languageFlagName}.png')}" /> 

     <!-- example suggestion: label read from LLL:EXT:myext/Resources/Private/Language/locallang.xml:languages.$languageFlagName --> 
     <f:translate key="languages.{languageFlagName}" default="{languageFlagName} /> 

    </f:for> 

</v:page.languageMenu> 

एक बहुत अधिक आप मूल्यों इन ViewHelpers में से प्रत्येक से लौटे के साथ कर सकते है: यह आप अन्य ViewHelpers के साथ गठबंधन और एक द्रव टेम्पलेट में निम्नलिखित की तरह कुछ का उपयोग करने की अनुमति होगी उदाहरण का उपयोग v:var.set जो झंडा नाम निकाले होते टेम्पलेट में नए चर निर्धारित करने:

<!-- Using {languages} inside <v:page.languageMenu> like above --> 
{languages -> v:iterator.filter(propertyName: 'current', filter: 1) -> v:var.set(name: 'currentLanguage')} 
<!-- variable {currentLanguage} now contains an array of values describing the current language --> 
5

आदेश वर्तमान langage पाने के लिए, आप पृष्ठ का उपयोग कर सकते/LanguageViewHelper वीएचएस विस्तार के साथ शामिल थे।

{v:page.language(languages: 'en,fr', pageUid: '0', normalWhenNoLanguage: 'en')} 

यहाँ एक नज़र: http://fluidtypo3.org/viewhelpers/vhs/1.8.3/Page/LanguageViewHelper.html

+0

एक अच्छा समाधान –

+0

है क्योंकि मैं वैसे भी अधिकांश परियोजनाओं में vhs का उपयोग करता हूं - यह मेरे लिए सबसे अच्छा समाधान है! –

+2

तो उसके साथ "असली दुनिया उदाहरण" \t \t \t \t \t आपका स्वागत है \t \t \t \t \t आपका स्वागत है \t \t \t \t –

9

एक अन्य समाधान द्रव टेम्पलेट में TypoScript वस्तु का उपयोग कर:

# German language 
temp.language = TEXT 
temp.language.value = at 

# English language 
[globalVar = GP:L = 1] 
    temp.language.value = en 
[global] 

lib.language < temp.language 

और तरल पदार्थ कोड:

<f:if condition="{f:cObject(typoscriptObjectPath: 'lib.language')} == 'at'"> 
    <f:then> 
     ... 
    </f:then> 
    <f:else> 
     ... 
    </f:else> 
</f:if> 

वस्तु temp.language किसी भी मान हो सकते हैं , बेशक।

संबंधित मुद्दे