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



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

Symfony2 & Translatable:实体的区域设置为空

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

添加建议的修复程序后,它确实有效。

今天我从 2.0 升级到 2.1,到目前为止,我设法让几乎所有工作都正常工作。

但是现在我的翻译对象再次无法正确显示(它们仍在正确保存)。

我认为这与与 2.1 相比,用户语言环境在 2.1 中的存储位置和方式的变化有关。

通过注册自定义侦听器修复此问题

namespace XXX;
use SymfonyComponentHttpKernelEventGetResponseEvent;
use SymfonyComponentHttpKernelKernelEvents;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
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');

要设置区域设置,翻译和可翻译内容现在可以工作

希望这也对其他人有所帮助..

最新更新