Я пытаюсь перевести мои шаблоны веток с помощью Symfony Translator Component и файлов .mo. Раньше я использовал расширение i18n, но хотел более надежный подход, так как обработка локали для переводов в Windows - это кошмар.
Эти функции класса готовят перевод и шаблон:
/**
* Constructor.
*
* @param string $template_dir
* @param string $locale
* @param string $locale_path
*/
public function __construct($template_dir, $locale, $locale_path)
{
$loader = new Twig_Loader_Filesystem($template_dir);
$this->parser = new TemplateNameParser();
$this->template = new \Twig_Environment($loader);
$this->translator = new Translator($locale);
$this->translator->addLoader('mo', new \Symfony\Component\Translation\Loader\MoFileLoader());
$this->translator->addResource('mo', $locale_path, $locale);
$this->template->addExtension(new TranslationExtension($this->translator));
}
/**
* Render template.
*/
public function render($name,$parameters=[]) {
return $this->template->loadTemplate($name,$parameters)->render();
}
Тогда у меня есть этот шаблон:
<h1>{% trans 'Hello World!' %}</h1>
который выдает эту ошибку:
Uncaught Twig_Error_Syntax: неожиданный токен. Твиг искал
ключевое слово "with", "from" или "into".
Что я получаю, потому что я не добавляю расширение Twig_Extensions_Extension_I18n в среду веток. Если я это сделаю, тексты в функциях trans не будут переведены, потому что я не использую фильтр, как должен. Чтобы это работало, мне нужно использовать транс-фильтр, например, так: {{ 'Some text'|trans }}
.
Есть ли способ заставить перевод работать с {% trans 'Some text' %}
вместо {{ 'Some text'|trans }}
? Например, я могу добавить пользовательскую функцию trans где-нибудь в цепочке?
Примечание: Я знаю, что {% trans %}Some text{% endtrans %}
работает, но все мои шаблоны уже используют этот синтаксис {% trans 'Some text' %}
, и я хотел бы избежать необходимости переписывать все.