2012-05-04 11 views
7

È possibile ottenere il codice lingua corrente (o codice) in un modello di fluido TYPO3?TYPO3 Fluid Template ottiene il codice lingua

Nel frattempo ho trovato un'altra soluzione con un aiutante PRESENTI 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(); 
    } 

} 

?> 

che uso nel modello fluido come segue.

<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> 

risposta

9

Si può solo assegnare le variabili nella vostra azione:

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

e poi leggerlo a vostro parere:

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

d'altra parte sarebbe più facile e più comodo per assegnare la variabile redy-to-use nel controller come blocco <f:if ...> è abbastanza semplice e talvolta semplicemente scomodo:

+0

Molto semplice ed elegante rispetto a quello che ho trovato - grazie. –

+5

Vorrei sconsigliare questo tipo di incarico, porta con sé alcuni problemi. Innanzitutto, utilizza riferimenti hard-coded agli UID della lingua di sistema che potrebbero interrompersi se trasferiti su un altro sito. Secondo, se hai bisogno di tradurre etichette, dovresti usare 'f: translate'. Forse una strategia migliore è leggere il valore "nome dell'icona della bandiera" dalla lingua e utilizzarlo in un nome di un'etichetta tradotta, ad es. 'LLL: EXT: myext/Resources/Private/Language/locallang.xml: languages.de' e' .en' ecc. –

1

Un'altra opzione potrebbe essere quella di utilizzare il ViewHelper v:page.languageMenu dall'estensione VHS. Essa permetterebbe di combinare con altri ViewHelpers e utilizzare qualcosa di simile a quanto segue in un modello fluido:

{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> 

C'è un molto più si può fare con i valori restituiti da ciascuna di queste ViewHelpers - è possibile per ad esempio utilizzare v:var.set per definire nuove variabili nel modello che contengono estratti i nomi di bandiera:

<!-- 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

al fine di ottenere il langage corrente, è possibile utilizzare la pagina/LanguageViewHelper incluso con l'estensione VHS.

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

Date un'occhiata qui: http://fluidtypo3.org/viewhelpers/vhs/1.8.3/Page/LanguageViewHelper.html

+0

questa è una buona soluzione –

+0

Perchè io uso vhs nella maggior parte dei progetti comunque - questa è la soluzione migliore per me! –

+2

Quindi, un "esempio del mondo reale" potrebbe essere \t \t \t \t \t Benvenuti \t \t \t \t \t Benvenuti \t \t \t \t –

9

Un'altra soluzione utilizzando oggetti TypoScript nel modello fluido:

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

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

lib.language < temp.language 

E Codice Fluido:

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

oggetto temp.language può contenere qualsiasi valore , ovviamente.

Problemi correlati