2015-06-10 6 views
-1

Я пытаюсь перевести свою платформу. Сначала я сделал простой макет, чтобы попробовать трансфузию. Когда я буду уверен в этом, я сделаю это для настоящего дела. вы можете увидеть контроллера, index.html.twig, config.yml, messages.es и messages.en:Перевод не работает Symfony

.... 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Translation\Translator; 

class DummyController extends Controller 
{ 
    /** 
    * @Route("/prova",name="role_public_dummy") 
    * @Template() 
    */ 
    public function indexAction(Request $request) 
    { 
     //$locale = $request->getLocale(); 
     $request=$this->getRequest(); 
     $locale = $request->getPreferredLanguage();//catching browser language 
     $request->setLocale($locale); 
     $this->get('session')->set('_locale', $locale); 

     return array(); 

    } 

} 

index.html.twig

{% trans %}index.1{% endtrans %} 

config.yml

framework: 
    #esi:    ~ 
    translator:  { fallback: "%locale%" } 
    secret:   "%secret%" 
    router: 
     resource: "%kernel.root_dir%/config/routing.yml" 
     strict_requirements: ~ 
    form:   ~ 
    csrf_protection: ~ 
    validation:  { enable_annotations: true } 
    templating: 
     engines: ['twig'] 
     #assets_version: SomeVersionScheme 
    default_locale: "%locale%" 
    trusted_hosts: ~ 
    trusted_proxies: ~ 
    session: 
     # handler_id set to null will use default session handler from php.ini 
     handler_id: ~ 
    fragments:  ~ 
    http_method_override: true 

messages.es

index.1: "CASA" 

messages.en

index.1: "HOME" 

Итак, я не понимаю, почему symfony всегда использует локаль «en», когда она использует функцию «trans». Это похоже на то, что он не улавливает локаль сессии.

ответ

0

Вы пытаетесь установить локаль объекта Request, но в контроллере он не влияет на службу Translator, так как она уже была настроена ранее. Я думаю, вы должны попробовать установить локаль для своего сервиса Translator или создать отдельное действие, в котором вы будете устанавливать языковой стандарт на сеанс и перенаправлять на другое действие.

+0

ОК, но так, как бы код был? Я имею в виду, как я могу установить языковой стандарт в транс-службе? Я читал документ symfony, и я не нашел пути. –

+0

Проверьте http://api.symfony.com/2.3/Symfony/Component/Translation/Translator.html метод setLocale –