/** * return simple string * * all we want to store after going through a for is a simple string. If there * are any other languages being sent, this is where they get stored. * * @param array $default value from client * * @return string * * @throws TransformationFailedException */ public function reverseTransform($default) { $defaultLang = $this->utils->getDefaultLanguage(); if (!isset($default[$defaultLang])) { throw new TransformationFailedException(sprintf('Value must contain "%s" string', $defaultLang)); } $this->utils->insertTranslatable($default); return $default[$defaultLang]; }
/** * @param FormBuilderInterface $builder form builder * @param array $options array of options * * @return void */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->addViewTransformer($this->transformer); $languages = $this->utils->getLanguages(); $default = $this->utils->getDefaultLanguage(); // handle what happens when no languages exist in db yet if (!in_array($default, $languages)) { $languages[] = $default; } foreach ($languages as $language) { $options = []; if ($language == $default) { $options['required'] = true; } $builder->add($language, 'text', $options); } }
/** * remove translateable strings from object * * @param PreDeserializeEvent $event event * * @return void */ public function onPreDeserialize(PreDeserializeEvent $event) { $eventClass = $event->getType()['name']; if (!class_exists($eventClass)) { throw new DeserializationException(sprintf('Can\' find class %s to deserialize', $eventClass)); } $object = new $eventClass(); if ($object instanceof TranslatableDocumentInterface) { $defaultLanguage = $this->utils->getDefaultLanguage(); $data = $event->getData(); foreach ($object->getTranslatableFields() as $field) { if (isset($data[$field])) { $this->localizedFields[$field] = $data[$field]; $defaultValue = \reset($data[$field]); if (array_key_exists($defaultLanguage, $data[$field])) { $defaultValue = $data[$field][$defaultLanguage]; } $data[$field] = $defaultValue; } } $event->setData($data); } }
/** * Get default translation * * @param array $translations Translations * @return string */ private function getDefaultTranslation(array $translations) { $defaultLanguage = $this->utils->getDefaultLanguage(); return isset($translations[$defaultLanguage]) ? $translations[$defaultLanguage] : reset($translations); }