public function run()
 {
     $languages = [['name' => 'English', 'code' => 'en'], ['name' => 'Български', 'code' => 'bg']];
     foreach ($languages as $language) {
         Language::create($language);
     }
 }
 public function compose(View $view)
 {
     if (!config('administr.hasLanguages')) {
         return;
     }
     $languages = \Cache::rememberForever('languages_list', function () {
         return Language::pluck('code', 'id');
     });
     $view->with('languages', $languages);
 }
 /**
  * Set the current locale
  *
  * @param $locale
  */
 public function set($locale = null)
 {
     $locale = empty($locale) ? $this->app->getLocale() : $locale;
     if ($this->hasBeenSet($locale)) {
         $this->app->setLocale($locale);
         return;
     }
     $language = Language::where('code', $locale)->first(['id', 'code']);
     if (!$language) {
         $language = Language::where('code', $this->app->getLocale())->first(['id', 'code']);
     }
     session(['lang' => $language->toArray()]);
     $this->app->setLocale($language->code);
 }
Example #4
0
 public function translated()
 {
     $languages = Language::pluck('id');
     $this->form($this->builder);
     $languageFields = array_filter($this->fields(), function (AbstractType $field) {
         return $field->isTranslated();
     });
     $fields = $this->all();
     $translated = [];
     foreach ($languages as $language_id) {
         $translated[$language_id] = [];
         foreach ($fields as $field => $value) {
             if (array_key_exists($field, $languageFields)) {
                 $translated[$language_id][$field] = $value[$language_id];
                 continue;
             }
             $translated[$language_id][$field] = $value;
         }
     }
     return $translated;
 }
 /**
  * Retrieve a new translation model and set its parent to the current model.
  *
  * @param int|string $language
  * @return Model
  */
 public function translate($language = null)
 {
     if (!is_numeric($language)) {
         $language_id = Language::where('code', $language)->first(['id']);
         $language = $language_id ? $language_id->id : session('lang.id');
     }
     if ($this->hasTranslations() && $this->isTranslatedIn($language)) {
         return $this->translation($language);
     }
     $translation = app($this->getTranslationModel());
     $translation->setAttribute('language_id', $language);
     $translation->setAttribute($this->getTranslationRelationKey(), $this->getKey());
     $this->translations->add($translation);
     return $translation;
 }
Example #6
0
    /**
     * Render a tabs container with available languages
     * and the fields that contain translatable data.
     *
     * @return string
     */
    public function renderTranslated(array $viewData = [])
    {
        $this->translationRendered = true;
        $firstTab = true;
        $tabs = '';
        $panels = '';
        $fields = array_filter($this->fields, function (AbstractType $field) {
            return !in_array($field->getName(), $this->skips) && !$field->isSkipped() && $field->isTranslated();
        });
        if (count($fields) === 0) {
            return '';
        }
        foreach (Language::all() as $language) {
            $tabs .= '<li role="presentation" class="' . ($firstTab ? 'active' : '') . '">
                        <a href="#' . $language->name . '" aria-controls="' . $language->name . '" role="tab" data-toggle="tab">' . $language->name . '</a>
                      </li>';
            $panels .= '<div role="tabpanel" class="tab-pane ' . ($firstTab ? 'active' : '') . '" id="' . $language->name . '">';
            foreach ($fields as $name => $field) {
                $field = clone $field;
                $field->setName("{$field->getName()}[{$language->id}]");
                if ($value = $this->getValue($name, $language->id)) {
                    $field->appendOption('value', $value);
                    $field->setValue($value);
                }
                $panels .= $field->render($viewData);
            }
            $panels .= '</div>';
            $firstTab = false;
        }
        return '<div>
          <!-- Nav tabs -->
          <ul class="nav nav-tabs" role="tablist">
          ' . $tabs . '
          </ul>

          <!-- Tab panes -->
          <div class="tab-content">
          ' . $panels . '
          </div>
        </div>';
    }