2015-07-14 4 views
2

Я использую Symfony 2.6, и я пытаюсь использовать переводы внутри my \ Twig_Extension, но переводчик всегда использует и возвращает текст, переведенный по умолчанию. (В моем случае "EN")Переводчик Symfony2 внутри Twig_Extension

Я создал службу в services.yml:

utils.twig_extension: 
    class: Skaphandrus\AppBundle\Twig\UtilsExtension 
    public: false 
    arguments: ["@service_container", "@translator.default"] 
    tags: 
     - { name: twig.extension, alias: utils.twig_extension } 

и внутри моего расширения:

private $container; 
private $translator; 
public function __construct($container, Translator $translator) { 
    $this->container = $container; 
    $this->translator = $translator; 
} 

А внутри моего метода у меня есть:

return $this->translator->trans('message'); 

Но когда я запускаю код, он всегда возвращает локальное сообщение «EN».

Заранее благодарим за любую помощь.

+0

Являетесь ли вы текущей локалью правильной в Twig? Просто добавьте '{{app.request.locale}}', чтобы написать его. –

+0

Вы говорите мне передать языковой стандарт методу расширения? Но расширение не знает текущий язык от пользователя? –

+0

Я имею в виду, каков ваш текущий язык в вашем шаблоне Twig. Каков результат '{{app.request.locale}}' в шаблоне Twig, который использует расширение Twig. –

ответ

0

Во-первых, вы должны получить текущую локаль вашего пользователя в расширении.

Вы могли бы заставить локали переводчика к той, которая используется вами пользователем в каждом транс метода:

#translation for the french version 
$this->translator->trans('message', array(), 'messages', 'fr_FR'); 

http://symfony.com/doc/current/components/translation/usage.html#forcing-the-translator-locale

Вы также можете использовать метод Setlocale в расширении. Все ваши переводы будут соответствовать языку, не заставляя его:

$this->translator->setLocale('fr_FR'); 
$this->translator->trans('message'); 
0

Для перевода вам не требуется специальное расширение ветки. Просто разместите все файлы переводов в комплекте в разделе Ресурсы> переводы> BUNDLENAME.local.yml (AcmeBundle.en.yml). Исходя из вашего текущего по умолчанию или заданного языкового стандарта, он выберет правильный файл.

Вы получаете стандартную локаль, которая в этом случае является EN.

Вам нужно установить свой язык в качестве параметра в параметрах .yml ИЛИ указать, какой язык использовать во время перевода.

http://symfony.com/doc/current/components/translation/introduction.html

+0

Да, но мне нужно использовать переводы внутри методов в моем пользовательском расширении, и метод всегда возвращает EN-перевод. –

Смежные вопросы