[FrameworkBundle] Register an identity translator as fallback

The Form component can be used without the Translation component.
However, to be able to use the default form themes provided by the
FrameworkBundle you need to have the `translator` helper to be
available.

This change ensure that there will always be a `translator` helper which
as a fallback will just return the message key if no translator is
present.
This commit is contained in:
Yonel Ceruto 2018-09-19 19:40:15 -04:00 committed by Nicolas Grekas
parent 00e5cd9a1c
commit 5330f2d017
7 changed files with 28 additions and 38 deletions

View File

@ -17,6 +17,7 @@ use Symfony\Bridge\Twig\TokenParser\TransChoiceTokenParser;
use Symfony\Bridge\Twig\TokenParser\TransDefaultDomainTokenParser;
use Symfony\Bridge\Twig\TokenParser\TransTokenParser;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Contracts\Translation\TranslatorTrait;
use Twig\Extension\AbstractExtension;
use Twig\NodeVisitor\NodeVisitorInterface;
use Twig\TokenParser\AbstractTokenParser;
@ -29,6 +30,13 @@ use Twig\TwigFilter;
*/
class TranslationExtension extends AbstractExtension
{
use TranslatorTrait {
getLocale as private;
setLocale as private;
trans as private doTrans;
transChoice as private doTransChoice;
}
private $translator;
private $translationNodeVisitor;
@ -91,7 +99,7 @@ class TranslationExtension extends AbstractExtension
public function trans($message, array $arguments = array(), $domain = null, $locale = null)
{
if (null === $this->translator) {
return strtr($message, $arguments);
return $this->doTrans($message, $arguments, $domain, $locale);
}
return $this->translator->trans($message, $arguments, $domain, $locale);
@ -100,7 +108,7 @@ class TranslationExtension extends AbstractExtension
public function transchoice($message, $count, array $arguments = array(), $domain = null, $locale = null)
{
if (null === $this->translator) {
return strtr($message, $arguments);
return $this->doTransChoice($message, $count, array_merge(array('%count%' => $count), $arguments), $domain, $locale);
}
return $this->translator->transChoice($message, $count, array_merge(array('%count%' => $count), $arguments), $domain, $locale);

View File

@ -873,10 +873,6 @@ class FrameworkExtension extends Extension
} else {
$container->removeDefinition('templating.helper.assets');
}
if (!$this->translationConfigEnabled) {
$container->removeDefinition('templating.helper.translator');
}
}
}

View File

@ -58,7 +58,7 @@
<service id="templating.helper.translator" class="Symfony\Bundle\FrameworkBundle\Templating\Helper\TranslatorHelper">
<tag name="templating.helper" alias="translator" />
<argument type="service" id="translator" />
<argument type="service" id="translator" on-invalid="null" />
</service>
<service id="templating.helper.form" class="Symfony\Bundle\FrameworkBundle\Templating\Helper\FormHelper">

View File

@ -13,15 +13,23 @@ namespace Symfony\Bundle\FrameworkBundle\Templating\Helper;
use Symfony\Component\Templating\Helper\Helper;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Contracts\Translation\TranslatorTrait;
/**
* @author Fabien Potencier <fabien@symfony.com>
*/
class TranslatorHelper extends Helper
{
use TranslatorTrait {
getLocale as private;
setLocale as private;
trans as private doTrans;
transChoice as private doTransChoice;
}
protected $translator;
public function __construct(TranslatorInterface $translator)
public function __construct(TranslatorInterface $translator = null)
{
$this->translator = $translator;
}
@ -31,6 +39,10 @@ class TranslatorHelper extends Helper
*/
public function trans($id, array $parameters = array(), $domain = 'messages', $locale = null)
{
if (null === $this->translator) {
return $this->doTrans($id, $parameters, $domain, $locale);
}
return $this->translator->trans($id, $parameters, $domain, $locale);
}
@ -39,6 +51,10 @@ class TranslatorHelper extends Helper
*/
public function transChoice($id, $number, array $parameters = array(), $domain = 'messages', $locale = null)
{
if (null === $this->translator) {
return $this->doTransChoice($id, $number, $parameters, $domain, $locale);
}
return $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
}

View File

@ -1,8 +0,0 @@
<?php
$container->loadFromExtension('framework', array(
'translator' => false,
'templating' => array(
'engines' => array('php'),
),
));

View File

@ -1,8 +0,0 @@
<?php
$container->loadFromExtension('framework', array(
'translator' => true,
'templating' => array(
'engines' => array('php'),
),
));

View File

@ -701,20 +701,6 @@ abstract class FrameworkExtensionTest extends TestCase
$this->assertEquals(array('en', 'fr'), $calls[1][1][0]);
}
public function testTranslatorHelperIsRegisteredWhenTranslatorIsEnabled()
{
$container = $this->createContainerFromFile('templating_php_translator_enabled');
$this->assertTrue($container->has('templating.helper.translator'));
}
public function testTranslatorHelperIsNotRegisteredWhenTranslatorIsDisabled()
{
$container = $this->createContainerFromFile('templating_php_translator_disabled');
$this->assertFalse($container->has('templating.helper.translator'));
}
/**
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
*/