Ответы пользователя по тегу Twig
  • Как в twig сделать локализацию шаблонов?

    @matperez
    Можете сделать свое расширение, определить свое расширение, определить в нем свой метод типа trans и грузить переводы откуда хочется. А стандартное расширение грузит переводы через Gettext. Почитайте про его использование в гугле.
    Ответ написан
  • Как прикрутить Gettext к шаблонам Twig в YII2?

    @matperez Автор вопроса
    По аналогии с Silex проксировал запрос на перевод к системному \Yii::t, который умеет корректно подгружать файлы с перводами. В итоге получилось такое расширение
    namespace app\components;
    
    use Twig_Extension;
    use Twig_Extensions_TokenParser_Trans;
    use Twig_SimpleFilter;
    
    class Twig_I18n_Extension extends Twig_Extension {
    
    	/**
    	 * Translation message context
    	 * @var string
    	 */
    	public $category = 'app';
    
    	/**
    	 * Returns the token parser instances to add to the existing list.
    	 *
    	 * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances
    	 */
    	public function getTokenParsers()
    	{
    		return array(new Twig_Extensions_TokenParser_Trans());
    	}
    
    	/**
    	 * {@inheritdoc}
    	 */
    	public function getFilters()
    	{
    		return array(
    			new \Twig_SimpleFilter('trans', array($this, 'trans')),
    		);
    	}
    
    
    	/**
    	 * @param string $category the message category.
    	 * @param string $message the message to be translated.
    	 * @param array $arguments
    	 * @param string $language the language code (e.g. `en-US`, `en`). If this is null, the current
    	 * [[\yii\base\Application::language|application language]] will be used.
    	 * @return string
    	 */
    	public function trans($message, array $arguments = [], $category = null, $language = null)
    	{
    		if (!$category) {
    			$category = $this->category;
    		}
    		return \Yii::t($category, $message, $arguments, $language);
    	}
    
    	/**
    	 * Returns the name of the extension.
    	 *
    	 * @return string The extension name
    	 */
    	public function getName()
    	{
    		return 'i18n';
    	}
    }


    Настройка рендера стала вот такой:
    'view' => [
    		    'renderers' => [
    			    'twig' => [
    				    'class' => 'yii\twig\ViewRenderer',
    				    'extensions' => [
    					    'app\components\Twig_I18n_Extension'
    				    ],
    			    ],
    		    ],
    	    ],
    Ответ написан
    Комментировать