Вход Регистрация
Файл: symfony-2.7/src/Symfony/Bridge/Twig/Extension/TranslationExtension.php
Строк: 201
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyBridgeTwigExtension;

use 
SymfonyBridgeTwigTokenParserTransTokenParser;
use 
SymfonyBridgeTwigTokenParserTransChoiceTokenParser;
use 
SymfonyBridgeTwigTokenParserTransDefaultDomainTokenParser;
use 
SymfonyComponentTranslationTranslatorInterface;
use 
SymfonyBridgeTwigNodeVisitorTranslationNodeVisitor;
use 
SymfonyBridgeTwigNodeVisitorTranslationDefaultDomainNodeVisitor;

/**
 * Provides integration of the Translation component with Twig.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class TranslationExtension extends Twig_Extension
{
    private 
$translator;
    private 
$translationNodeVisitor;

    public function 
__construct(TranslatorInterface $translatorTwig_NodeVisitorInterface $translationNodeVisitor null)
    {
        if (!
$translationNodeVisitor) {
            
$translationNodeVisitor = new TranslationNodeVisitor();
        }

        
$this->translator $translator;
        
$this->translationNodeVisitor $translationNodeVisitor;
    }

    public function 
getTranslator()
    {
        return 
$this->translator;
    }

    
/**
     * {@inheritdoc}
     */
    
public function getFilters()
    {
        return array(
            new 
Twig_SimpleFilter('trans', array($this'trans')),
            new 
Twig_SimpleFilter('transchoice', array($this'transchoice')),
        );
    }

    
/**
     * Returns the token parser instance to add to the existing list.
     *
     * @return array An array of Twig_TokenParser instances
     */
    
public function getTokenParsers()
    {
        return array(
            
// {% trans %}Symfony is great!{% endtrans %}
            
new TransTokenParser(),

            
// {% transchoice count %}
            //     {0} There is no apples|{1} There is one apple|]1,Inf] There is {{ count }} apples
            // {% endtranschoice %}
            
new TransChoiceTokenParser(),

            
// {% trans_default_domain "foobar" %}
            
new TransDefaultDomainTokenParser(),
        );
    }

    
/**
     * {@inheritdoc}
     */
    
public function getNodeVisitors()
    {
        return array(
$this->translationNodeVisitor, new TranslationDefaultDomainNodeVisitor());
    }

    public function 
getTranslationNodeVisitor()
    {
        return 
$this->translationNodeVisitor;
    }

    public function 
trans($message, array $arguments = array(), $domain null$locale null)
    {
        if (
null === $domain) {
            
$domain 'messages';
        }

        return 
$this->translator->trans($message$arguments$domain$locale);
    }

    public function 
transchoice($message$count, array $arguments = array(), $domain null$locale null)
    {
        if (
null === $domain) {
            
$domain 'messages';
        }

        return 
$this->translator->transChoice($message$countarray_merge(array('%count%' => $count), $arguments), $domain$locale);
    }

    
/**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    
public function getName()
    {
        return 
'translator';
    }
}
Онлайн: 1
Реклама