2012-05-04 29 views
7

¿Es posible obtener la clave (o código) de idioma actual en una plantilla de fluido TYPO3?Plantilla de fluido TYPO3 obtener el código de idioma

Mientras tanto he encontrado otra solución utilizando un ayudante de vista encontrados 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(); 
    } 

} 

?> 

que utilizo en la plantilla de la siguiente manera fluida.

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

Respuesta

9

Usted sólo puede asignar variable en su acción:

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

y luego leerlo en su opinión:

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

por el contrario que sería más fácil y más Cómodo asignar variable redy-to-use en el controlador como <f:if ...> bloque es bastante simple y, a veces simplemente incómodo:

+0

Muy simple y elegante en comparación con lo que he encontrado, gracias. –

+5

Yo desaconsejaría este tipo de tareas, conlleva algunos problemas. Primero, utiliza referencias codificadas a los UID del lenguaje del sistema que es probable que se rompa si se transfiere a otro sitio. En segundo lugar, si necesita traducir etiquetas, debe usar 'f: translate'. Quizás una mejor estrategia es leer el valor del "nombre del icono de la bandera" del idioma y usarlo en el nombre de una etiqueta traducida, p. 'LLL: EXT: myext/Resources/Private/Language/locallang.xml: languages.de' y' .en' etc. –

1

Otra opción podría ser usar el v:page.languageMenu ViewHelper de la extensión VHS. Sería permitirá combinar con otros viewhelpers y usar algo como lo siguiente en una plantilla de 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> 

Hay una mucho más se puede hacer con los valores devueltos de cada uno de estos viewhelpers - que pueda por ejemplo del uso v:var.set para definir nuevas variables en la plantilla que contienen nombres extrae bandera:

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

con el fin de obtener la langage actual, se puede utilizar la página/LanguageViewHelper incluye con la extensión de VHS.

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

un vistazo aquí: http://fluidtypo3.org/viewhelpers/vhs/1.8.3/Page/LanguageViewHelper.html

+0

esa es una buena solución –

+0

Para uso vhs en la mayoría de los proyectos, ¡esa es la mejor solución para mí! –

+2

Así que con eso un "ejemplo del mundo real" podría ser \t \t \t \t \t Bienvenido \t \t \t \t \t Bienvenido \t \t \t \t –

9

Otra solución de acuerdo al objeto TypoScript en la plantilla del 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 

Y el código de fluido:

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

objeto temp.language puede contener cualquier valor , por supuesto.

Cuestiones relacionadas