/**
  * Builds form
  *
  * @param FormBuilderInterface $builder
  * @param array                $options
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     foreach ($this->translationsHelper->getLanguages() as $locale => $name) {
         $builder->add($locale, @$options['field_type'], array_merge($options['field_options'], array('label' => $name, 'required' => $locale == $this->translationsHelper->getDefaultLocale() ? $options['required'] : false)));
     }
     $transformer = new TranslationFieldDataTransformer();
     $transformer->setCultures(array_keys($this->translationsHelper->getLanguages()))->setField($builder->getName())->setDefaultCulture($this->translatableListener->getDefaultLocale());
     // Adds transformer
     $builder->addModelTransformer($transformer);
     // On PreSet data - build translations
     $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($transformer) {
         $form = $event->getForm();
         $parentForm = $form->getParent();
         if ($parentForm->getData()) {
             $transformer->setObject($parentForm->getData());
         }
     }, -10);
     // On PostSet data - persist translations
     $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use($transformer) {
         foreach ($transformer->getFieldTranslations() as $translation) {
             $this->entityManager->persist($translation);
         }
     }, -10);
 }
 /**
  * Gets field names
  *
  * @return array
  */
 private function getFieldNames()
 {
     //helper function to generate all field names in format:
     // '<locale>' => '<field>|<locale>'
     $collection = array();
     foreach ($this->translationsHelper->getLanguages() as $key => $locale) {
         if (is_numeric($key)) {
             $key = $locale;
         }
         foreach ($this->options['fields'] as $field) {
             $collection[$key][$field] = $field . ":" . $key;
         }
     }
     return $collection;
 }