Мне нужно переоценить стандартный Twig trans
фильтр для моих специальных целей, например. Я хочу получить мои переводы из пользовательского хранилища. Поэтому я не знаю, что мне нужно делать. Я пытаюсь выяснить в docs. Но о переводах нет. Я нашел Symfony\Bridge\Twig\Extension\TranslationExtension
класс, и я думаю, может быть, мне нужно только переоценить этот класс? Благодаря!Пользовательский транс-фильтр в Twig and Symfony2
ответ
Компонент Translates Symfony в основном переопределяет фильтр трансфокатора по умолчанию Twig. Компонент является частью основного фреймворка и не может быть отключен.
Вы можете, тем не менее, сделать то же самое и переустановить транс-фильтр с помощью собственного удлинителя Twig.
Просто создайте расширение Twig, как описано здесь: http://symfony.com/doc/current/cookbook/templating/twig_extension.html
Если добавить транс фильтра, он перекроет код компонента переводческого.
Просто, чтобы расширить свой ответ на @ Webberig выше, в Symphony v3.0.4 и Twig v1.24.0, то, как вы определяете свою услугу, кажется важным.
Я хотел бы добавить резервную копию домена к фильтру по умолчанию(), но не смог понять, как переопределить фильтр по умолчанию. Я, наконец, удалось так:
В приложение/Config/services.yml
# This is important!! Use this exact service ID (twig.extension.trans)
twig.extension.trans:
class: AppBundle\Twig\AppTranslationExtension
public: false
arguments: ['@translator']
tags:
- { name: twig.extension }
И вот что в основном это сделал для меня, используя тот же самый точный идентификатор службы в моей конфигурации.
В остальном я просто переопределил метод транс-фильтра. Здесь для заинтересованных:
namespace AppBundle\Twig;
use Symfony\Bridge\Twig\Extension\TranslationExtension;
use Symfony\Component\Translation\TranslatorInterface;
class AppTranslationExtension extends TranslationExtension
{
public function __construct(
TranslatorInterface $translator,
\Twig_NodeVisitorInterface $translationNodeVisitor = null)
{
parent::__construct($translator, $translationNodeVisitor);
}
/**
* {@inheritdoc}
*/
public function getFilters()
{
return array(
new \Twig_SimpleFilter('trans', array($this, 'trans')),
);
}
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
{
if (null === $locale) {
$locale = $this->getTranslator()->getLocale();
}
if (null === $domain) {
$domain = 'messages';
}
if ('messages' !== $domain
&& false === $this->translationExists($id, $domain, $locale)) {
$domain = 'messages';
}
return $this->getTranslator()->trans($id, $parameters, $domain, $locale);
}
protected function translationExists($id, $domain, $locale)
{
return $this->getTranslator()->getCatalogue($locale)->has((string) $id, $domain);
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'app_translator';
}
}
- 1. Symfony2 Twig and XSL
- 2. Twig and Symfony2 - проверка, если число равно
- 3. Twig and autoescaping
- 4. Symfony2 Twig Политика безопасности
- 5. Symfony2 - base64_decode в twig
- 6. Symfony - Ajax and Twig
- 7. Symfony2 twig forms
- 8. Symfony2: disable Twig cache
- 9. Symfony2/Twig синтаксис
- 10. Symfony2 Twig расширение RuntimeException
- 11. Symfony2 Twig url() https
- 12. symfony2 twig html tags
- 13. Symfony2 Twig Style Sheet
- 14. Symfony2 Twig загрузка шаблонов
- 15. Symfony2: Twig detect noscript
- 16. Symfony2 routing & twig
- 17. Haml/Twig in Symfony2
- 18. Symfony2 и Twig sidebar
- 19. Inject twig variable symfony2
- 20. Symfony2, twig и JavaScript
- 21. Ошибка расширения Twig, Symfony2
- 22. Использование javascript в Symfony2/Twig
- 23. Twig and Apostrophes
- 24. Как использовать расширение symfony2 twig без symfony2
- 25. Коллекция рендеринга Symfony2/twig remove_btn
- 26. Symfony2 внутренний маршрут в Twig визуализации функции
- 27. Symfony2 и Twig Dump Issue
- 28. Symfony2 переменная шаблона функции twig
- 29. Symfony2 - Twig создание сложных макетов
- 30. Symfony2 & Twig, получая переменную пользователя
Лучше всего создать пользовательский загрузчик, а не переопределять фильтр 'trans'. Ниже приведен пример создания для загрузки из БД - http://blog.elendev.com/development/php/symfony/use-a-database-as-translation-provider-in-symfony-2/ - который вы можете расширить его, чтобы соответствовать вашим целям. – qooplmao
Взгляните на http://symfony.com/doc/current/components/translation/custom_formats.html#creating-a-custom-loader. Вы можете использовать существующие загрузчики и добавлять ресурсы из своего пользовательского хранилища. – Holger
@ Хольджер, да, я уже создаю свой пользовательский загрузчик, но я не знаю, как использовать только мой загрузчик, emmm, сначала я загружаю все переводы с помощью базовых загрузчиков, а затем помещаю их в свое пользовательское хранилище, и я хочу, чтобы trans поиск перевода в моем хранилище. – nowiko