/** * translate all strings marked as multi lang * * @param ObjectEvent $event serialization event * * @return void */ public function onPostSerialize(ObjectEvent $event) { $object = $event->getObject(); foreach ($this->localizedFields[\spl_object_hash($object)] as $field => $value) { $event->getVisitor()->addData($field, $this->utils->getTranslatedField($value)); } }
/** * 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); } }
/** * translate all strings marked as multi lang * * @param ObjectEvent $event serialization event * * @return void */ public function onPostSerialize(ObjectEvent $event) { $object = $event->getObject(); if (!$object instanceof TranslatableDocumentInterface) { return; } foreach ($this->localizedFields[\spl_object_hash($object)] as $field => $value) { if (substr($field, -2, 2) === '[]') { $field = substr($field, 0, -2); $event->getVisitor()->addData($field, array_map([$this->utils, 'getTranslatedField'], $value)); } else { $event->getVisitor()->addData($field, $this->utils->getTranslatedField($value)); } } }
/** * Looks up all matching Translatables and returns them uniquified * * @return array matching english strings */ private function getAllPossibleTranslatableStrings() { $matchingTranslations = array(); // is it a glob? if ($this->node->getValue() instanceof \Xiag\Rql\Parser\DataType\Glob) { $userValue = $this->node->getValue()->toRegex(); $useWildcard = true; } else { $userValue = $this->node->getValue(); $useWildcard = false; } $matchingTranslatables = $this->intUtils->findMatchingTranslatables($userValue, $this->getClientSearchLanguage(), $useWildcard); foreach ($matchingTranslatables as $translatable) { $originalString = $translatable->getOriginal(); if (!empty($originalString)) { $matchingTranslations[] = $originalString; } } return array_unique($matchingTranslations); }
/** * translate all strings marked as multi lang * * @return void */ public function onPostDeserialize() { \array_walk($this->localizedFields, function ($values) { $this->utils->insertTranslatable($values); }); }
/** * 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); }