2013-07-19 12 views
7

È possibile utilizzare la variabile globale da config.yml nel file di traduzione in symfony 2? Se sì, puoi fornire qualche esempio o link utile?Come usare il valore di configurazione nella traduzione di symfony2?

+0

Cosa intendi esattamente? – cheesemacfly

+0

Vorrei usare del testo (esempio: www.stackoverflow.com) in più file di traduzione. Non voglio passare ogni volta da twig o php questo valore nella traduzione. Voglio solo mettere in qualche modo nelle traduzioni. – japysha

+0

http://stackoverflow.com/a/15566695/1847340 dai un'occhiata a questa soluzione. ha funzionato per me :) – ferdynator

risposta

1

è possibile seguire quei 2 semplici passaggi:

  1. iniettare un Global variable in tutti i modelli utilizzando la configurazione ramoscello:

    # app/config/parameters.yml 
    parameters: 
        my_favorite_website: www.stackoverflow.com 
    

    E

    # app/config/config.yml 
    twig: 
        globals: 
         my_favorite_website: "%my_favorite_website%" 
    
  2. Usa Message Placeholders a avere la possibilità di inserire il testo nel tuo tra nslation:

    # messages.en.yml 
    I.love.website: "I love %website%!!" 
    
    # messages.fr.yml 
    I.love.website: "J'adore %website%!!" 
    

È ora possibile utilizzare la seguente sintassi ramoscello nei modelli per ottenere il risultato atteso:

{{ 'I.love.website'|trans({'%website%': my_favorite_website}) }} 
+1

Grazie, ma voglio evitare questo passaggio in ramoscello. In questo esempio mi piacerebbe usare _my_favorite_website_ direttamente nella traduzione e chiamarlo in twig senza passare alcun valore: '{{'I.love.website' | trans()}}' – japysha

+1

Mmmmh temo non ci sia un semplice soluzione per fare questo. Il servizio di traduzione richiede che tu passi il segnaposto in un 'array()' come secondo parametro quando lo chiami, quindi è più una "limitazione" del servizio di traduzione che una di ramoscello. Probabilmente potresti scrivere un'estensione di ramoscello se il segnaposto è sempre lo stesso, ma sarebbe un trucco sporco ... – cheesemacfly

1

Per l'iniezione di un (o tutti) ramoscello globali nelle vostre traduzioni è necessario per sovrascrivere il servizio di traduzione. Controlla this answer se vuoi una spiegazione dettagliata. Ecco quello che ho fatto:

Sostituisci il parametro translator.class (ad esempio, nel parameters.yml):

translator.class: Acme\YourBundle\Translation\Translator 

Creare il nuovo Translator servizio:

use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator; 

class Translator extends BaseTranslator 
{ 

} 

Infine sovrascrivono sia trans e transChoice:

/** 
* {@inheritdoc} 
*/ 
public function trans($id, array $parameters = array(), $domain = null, $locale = null) 
{ 
    return parent::trans(
     $id, 
     array_merge($this->container->get('twig')->getGlobals(), $parameters), 
     $domain, 
     $locale 
    ); 
} 

/** 
* {@inheritdoc} 
*/ 
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null) 
{ 
    return parent::transChoice(
     $id, 
     $number, 
     array_merge($this->container->get('twig')->getGlobals(), $parameters), 
     $domain, 
     $locale 
    ); 
} 

In questo esempio sto iniettando tutte le coordinate del ramoscello. Si può iniettare solo uno come questo:

array_merge(['%your_global%' => $this->container->get('twig')->getGlobals()['your_global']], $parameters) 
Problemi correlati