/** * Sets the current language */ public static function setLang($lang) { static::$lang = $lang; \Config::set('language', $lang); if (static::$lang_default != $lang) { \Lang::load('errors', true, $lang, false, true); \Lang::load('admin', true, $lang, false, true); \Lang::load('site', true, $lang, false, true); \Lang::load('languages', true, $lang, false, true); static::$lang_prefix = "/{$lang}"; } \CMF\Doctrine\Extensions\Translatable::setLang($lang); }
/** * Processes the entity with the given an object hash */ private function processEntityByHash($hash) { if (!count($this->childLanguages)) { return; } if (!isset($this->toProcess[$hash]) || !isset($this->entityChangesets[$hash])) { return; } $entity = $this->toProcess[$hash]; $entity_class = $entity->metadata()->name; $entity_id = $entity->id; $entityChangeset = $this->entityChangesets[$hash]; $translatableFields = \CMF\Admin::getTranslatable($entity->metadata()->name); $initial = array(); // Populate the data to translate from foreach ($translatableFields as $fieldName) { $initial[$fieldName] = $entity->get($fieldName); } // Get translations for each child language foreach ($this->childLanguages as $language) { // Detach the model and reload it in the target language \D::manager()->detach($entity); Translatable::setLang($language->code); $entity = $entity_class::find($entity_id); $fields = $entityChangeset; // Find non-translated fields if ($entity) { foreach ($translatableFields as $field) { if (!$entity->hasTranslation($field) && !empty($initial[$field]) && !in_array($field, $fields)) { $fields[] = $field; } } } // Perform the translation while we're in the target language if (count($fields)) { $this->translateFields($entity, $initial, $fields, $language->update_from, $language); } // Set the old language back again Translatable::setLang($language->update_from->code); } unset($this->toProcess[$hash]); unset($this->entityChangesets[$hash]); }