Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * 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]);
 }