2012-05-04 9 views
7

Ist es möglich, den aktuellen Sprachenschlüssel (oder Code) in einer TYPO3 Fluid Vorlage zu erhalten?TYPO3 Fluid Template erhält Sprachcode

In der Zwischenzeit habe ich eine andere Lösung mit einem View Helfer gefunden habe gefunden 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(); 
    } 

} 

?> 

Was ich in der Flüssigkeit Vorlage wie folgt.

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

Antwort

9

Sie Variable in Aktion nur zuordnen:

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

und es dann in der Ansicht lesen:

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

auf der anderen Seite wäre es einfacher und mehr komfortabel zu zuweisen redy-to-use-Variable in der Steuerung als <f:if ...> Block ist ziemlich einfach und manchmal nur unbequem:

+0

Sehr einfach und elegant im Vergleich zu dem, was ich gefunden habe - danke. –

+5

Ich würde von dieser Art der Aufgabe abraten, es bringt damit ein paar Probleme mit sich. Erstens verwendet es fest codierte Verweise auf Systemsprachen-UIDs, die wahrscheinlich brechen, wenn sie auf eine andere Site übertragen werden. Zweitens, wenn Sie Beschriftungen übersetzen müssen, sollten Sie 'f: translate' verwenden. Eine bessere Strategie besteht vielleicht darin, den Wert des "Flaggen-Icon-Namens" aus der Sprache zu lesen und dies in einem Namen eines übersetzten Etiketts zu verwenden, z. 'LLL: EXT: myext/Ressourcen/Privat/Sprache/locallang.xml: languages.de' und' .en' usw. –

1

Eine andere Option könnte sein, den ViewHelper v:page.languageMenu von der VHS-Erweiterung zu verwenden. Es würde dir erlauben, mit anderen Viewhelper zu kombinieren und so etwas wie die folgenden in einer Flüssigkeit Vorlage verwenden:

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

Es gibt eine viel mehr Sie mit den Werten aus jedem dieser Viewhelper zurück tun können - Sie können für Beispiel v:var.set neue Variablen in der Vorlage zu definieren, verwenden die Flagge Namen extrahiert enthalten:

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

um den aktuellen langage zu erhalten, können Sie die Seite nutzen können/LanguageViewHelper enthalten mit der VHS-Erweiterung.

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

Werfen Sie einen Blick hier: http://fluidtypo3.org/viewhelpers/vhs/1.8.3/Page/LanguageViewHelper.html

+0

das ist eine gute Lösung –

+0

Ich benutze vhs sowieso in den meisten Projekten - das ist die beste Lösung für mich! –

+2

Also damit könnte ein "reales Beispiel" sein \t \t \t \t \t Willkommen \t \t \t \t \t Welcome \t \t \t \t –

9

Eine andere Lösung in der Fluid Vorlage TypoScript Objekt:

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

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

lib.language < temp.language 

und Fluid Code:

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

Objekt temp.language keine Werte enthalten , Na sicher.