2015-01-12 5 views
3

У меня есть файл с французскими переводами, расположенных в FooBundle/Resources/translations/messages.fr.xlfПереводы не работает в Symfony2

Пример:

<?xml version="1.0"?> 
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> 
    <file source-language="en" datatype="plaintext" original="file.ext"> 
     <body> 
      <trans-unit id="1"> 
       <source>Foo</source> 
       <target>Bar</target> 
      </trans-unit> 
     </body> 
    </file> 
</xliff> 

Но я не могу делать какие-либо работы по переводу, ни в контроллере:

// FooBundle/Controller/DefaultController.php 
/** 
* @Route("/") 
* @Template() 
*/ 
public function indexAction(Request $request) 
{ 
    $request->setLocale("fr"); 
    $translatedMessage = $this->get('translator')->trans('Foo'); 

    echo $translatedMessage; 

    return array(); 
} 

Или шаблон веточка:

// FooBundle/Resources/views/Default/index.html.twig 
{{ 'Foo'|trans }} or {% trans %}Foo{% endtrans %} 

Он всегда показывает Foo (оригинальная строка).

Как мой стандарт по умолчанию я использую английский ('en'). Моя языковая конфигурация из config.yml:

framework: 
    translator: { fallback: "%locale%" } 
    default_locale: "%locale%" 
    ... 

Я пытался очистить кэш, но это не имеет никакого значения.

Если я пытаюсь отладить переводы, это показывает, что они используются:

$ php app/console debug:translation fr FooBundle 

+----------+---------------+----------------------+ 
| State(s) | Id   | Message Preview (fr) | 
+----------+---------------+----------------------+ 
|   | Foo   | Bar     | 
+----------+---------------+----------------------+ 

Любая идея, что происходит здесь не так?

+2

Просто протестирован с кодом без изменений (Symfony 2.6.3), и он работает без проблем. Попробуйте вывести настройки пакета framework и проверьте, что все, что связано с услугой переводчика, в порядке. – COil

ответ

0

Кажется, что проблема была другой комплект, который я установил (LuneticsLocaleBundle).

Как-то он должен переопределить $request->setLocale("fr"); Я делаю в контроллере, так что получается, что я использовал en_US как локаль. Именно по этой причине он не показывал переводы.