2013-07-19 12 views
7

Czy można użyć zmiennej globalnej z pliku config.yml w pliku tłumaczenia w symfony 2? Jeśli tak, proszę podać przykładowy lub przydatny link?Jak używać wartości konfiguracyjnej w tłumaczeniu symfony2?

+0

Co masz na myśli? – cheesemacfly

+0

Chciałbym użyć trochę tekstu (przykład: www.stackoverflow.com) w większej ilości plików tłumaczeniowych. Nie chcę za każdym razem podawać z gałązki lub php tej wartości w tłumaczeniu. Po prostu chcesz umieścić w tłumaczeniu. – japysha

+0

http://stackoverflow.com/a/15566695/1847340 sprawdź to rozwiązanie. pracował dla mnie :) – ferdynator

Odpowiedz

1

Możesz śledzić te 2 proste kroki:

  1. wstrzyknąć Global variable we wszystkich szablonów wykorzystując konfigurację gałązka:

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

    I

    # app/config/config.yml 
    twig: 
        globals: 
         my_favorite_website: "%my_favorite_website%" 
    
  2. Korzystając Message Placeholders do mieć możliwość umieszczania tekstu w tra nslation:

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

Teraz można użyć następującej składni gałązka w szablonach, aby uzyskać oczekiwany rezultat:

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

Dzięki, ale chcę uniknąć tego kroku w gałązce. W tym przykładzie chciałbym użyć _my_favorite_website_ bezpośrednio w tłumaczeniu i nazwać go twigiem bez podania jakiejkolwiek wartości: '{{'I.love.website' | trans()}}' – japysha

+1

Mmmmh Obawiam się, że nie ma prostego rozwiązanie, aby to zrobić. Usługa tłumaczenia wymaga podania symbolu zastępczego w 'array()' jako drugiego parametru podczas wywoływania go, więc jest to bardziej "ograniczające" tłumaczenie usługi niż gałązka. Możesz prawdopodobnie napisać rozszerzenie gałązki, jeśli symbol zastępczy jest zawsze taki sam, ale to byłaby brudna sztuczka ... – cheesemacfly

1

do wtryskiwania (lub wszystkie) gałązka globalnych do tłumaczeń trzeba aby zastąpić usługę tłumaczenia. Sprawdź this answer, jeśli chcesz uzyskać szczegółowe wyjaśnienie. Oto co zrobiłem:

zastąpić parametr translator.class (np swój parameters.yml):

translator.class: Acme\YourBundle\Translation\Translator 

Utwórz nową Translator usługę:

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

class Translator extends BaseTranslator 
{ 

} 

Wreszcie zastępują zarówno trans i 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 
    ); 
} 

W tym przykładzie wstrzykiwam wszystkie globusy gałązkowe. Możesz wstrzyknąć tylko jeden taki:

array_merge(['%your_global%' => $this->container->get('twig')->getGlobals()['your_global']], $parameters) 
Powiązane problemy