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); }
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; }
/** * 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>'; }