I tried to do the same thing before. I had to find out that it is impossible to use these two things together, you must realize this for yourself.
I did it like this: Text.php
use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM;  class Text {  private $id;  private $class;  private $field;  private $key_id;  private $lang;  private $text; ...getter setter... } 
Language.php
 use Doctrine\ORM\Mapping as ORM;  class Language {  private $id;  private $language; ... getter setter .... 
Now I wrote a service to manage these: TextManager.php
  public function setupText($object, $field, $langKey){ $lang = $this->langRepo->findOneBy(array("language" => $langKey)); $txt = $this->textRepo->findOneBy(array( 'class' => get_class($object), 'field' => $field, 'lang' => $lang, 'key_id' => $object->getId() )); if($txt != null){ return $txt; } $txt = new Text(); $txt->setClass(get_class($object)); $txt->setField($field); $txt->setKeyId($object->getId()); $txt->setLang($lang); return $txt; }  public function getText($object, $field, $langKey){ $lang = $this->langRepo->findOneBy(array("language" => $langKey)); $txt = $this->textRepo->findOneBy(array( 'class' => get_class($object), 'field' => $field, 'lang' => $lang, 'key_id' => $object->getId() )); if ($txt == null){ return false; } return $txt; } 
In your controller, you can now do this: to get a text object in the ohter version
 $logRepo = $em->getRepository('Gedmo\Loggable\Entity\LogEntry'); // we use default log entry class $text = $textManager->setupText($object, 'abouttext', 'de'); $logRepo->revert($text, 1); //1 is the version you would like to have $text->getText(); //version 1 text 
to create a new text object
 $text = $textManager->setupText($object, 'otherfield', 'fr'); $text->setText("your super text"); $em->persist($text); $em->flush(); 
Hope this helps you, and if you have any questions, don't ask questions.