symfony2.1可翻译保存,但未检索

时间:2012-08-08 12:44:37

标签: doctrine-orm symfony-2.1

基本上,我遇到了与此相同的问题:

Symfony2 & Translatable : entity's locale is empty

保存在ext_translations表中但未显示的翻译。

添加建议的修补程序后,它可以正常工作。

今天我从2.0升级到2.1,到目前为止,我已经成功完成了所有工作。

但是现在我的翻译再次没有正确显示(它们仍然被正确保存)。

我认为这与2.1版本中用户区域设置的存储位置和方式的变化有关。但是我无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

通过注册自定义侦听器

来解决此问题
namespace XXX;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class LocaleListener implements EventSubscriberInterface
{
   private $defaultLocale;

   public function __construct($defaultLocale = 'en')
   {
       $this->defaultLocale = $defaultLocale;
   }

   public function onKernelRequest(GetResponseEvent $event)
   {
       $request = $event->getRequest();
       if (!$request->hasPreviousSession()) {
           return;
       }

       if ($locale = $request->attributes->get('_locale')) {
           $request->getSession()->set('_locale', $request->getLocale());
       } else {
           $request->setDefaultLocale($request->getSession()->get('_locale',             $this->defaultLocale));
       }
   }

   static public function getSubscribedEvents()
   {
       return array(
           // must be registered before the default Locale listener
           KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
       );
   }
}

然后改变了

$request->setDefaultLocale($request->getSession()->get('_locale', $this->defaultLocale));

$request->setLocale($request->getSession()->get('_locale'));

并使用

$this->getRequest()->getSession()->set('_locale', 'nl');

设置语言环境,翻译和翻译现在可以正常工作

希望这也有助于其他人..