Viewing file: Controller.php (6.83 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php namespace Barryvdh\TranslationManager;
use Illuminate\Http\Request; use Illuminate\Routing\Controller as BaseController; use Barryvdh\TranslationManager\Models\Translation; use Illuminate\Support\Collection; use Illuminate\Support\Str;
class Controller extends BaseController { /** @var \Barryvdh\TranslationManager\Manager */ protected $manager;
public function __construct(Manager $manager) { $this->manager = $manager; }
public function getIndex($group = null) { $locales = $this->manager->getLocales(); $groups = Translation::groupBy('group'); $excludedGroups = $this->manager->getConfig('exclude_groups'); if($excludedGroups){ $groups->whereNotIn('group', $excludedGroups); }
$groups = $groups->select('group')->orderBy('group')->get()->pluck('group', 'group'); if ($groups instanceof Collection) { $groups = $groups->all(); } $groups = [''=>'Choose a group'] + $groups; $numChanged = Translation::where('group', $group)->where('status', Translation::STATUS_CHANGED)->count();
$allTranslations = Translation::where('group', $group)->orderBy('key', 'asc')->get(); $numTranslations = count($allTranslations); $translations = []; foreach($allTranslations as $translation){ $translations[$translation->key][$translation->locale] = $translation; }
return view('translation-manager::index') ->with('translations', $translations) ->with('locales', $locales) ->with('groups', $groups) ->with('group', $group) ->with('numTranslations', $numTranslations) ->with('numChanged', $numChanged) ->with('editUrl', $group ? action('\Barryvdh\TranslationManager\Controller@postEdit', [$group]) : null) ->with('deleteEnabled', $this->manager->getConfig('delete_enabled')); }
public function getView($group = null) { return $this->getIndex($group); }
protected function loadLocales() { //Set the default locale as the first one. $locales = Translation::groupBy('locale') ->select('locale') ->get() ->pluck('locale');
if ($locales instanceof Collection) { $locales = $locales->all(); } $locales = array_merge([config('app.locale')], $locales); return array_unique($locales); }
public function postAdd($group = null) { $keys = explode("\n", request()->get('keys'));
foreach($keys as $key){ $key = trim($key); if($group && $key){ $this->manager->missingKey('*', $group, $key); } } return redirect()->back(); }
public function postEdit($group = null) { if(!in_array($group, $this->manager->getConfig('exclude_groups'))) { $name = request()->get('name'); $value = request()->get('value');
list($locale, $key) = explode('|', $name, 2); $translation = Translation::firstOrNew([ 'locale' => $locale, 'group' => $group, 'key' => $key, ]); $translation->value = (string) $value ?: null; $translation->status = Translation::STATUS_CHANGED; $translation->save(); return array('status' => 'ok'); } }
public function postDelete($group, $key) { if(!in_array($group, $this->manager->getConfig('exclude_groups')) && $this->manager->getConfig('delete_enabled')) { Translation::where('group', $group)->where('key', $key)->delete(); return ['status' => 'ok']; } }
public function postImport(Request $request) { $replace = $request->get('replace', false); $counter = $this->manager->importTranslations($replace);
return ['status' => 'ok', 'counter' => $counter]; }
public function postFind() { $numFound = $this->manager->findTranslations();
return ['status' => 'ok', 'counter' => (int) $numFound]; }
public function postPublish($group = null) { $json = false;
if($group === '_json'){ $json = true; }
$this->manager->exportTranslations($group, $json);
return ['status' => 'ok']; }
public function postAddGroup(Request $request) { $group = str_replace(".", '', $request->input('new-group')); if ($group) { return redirect()->action('\Barryvdh\TranslationManager\Controller@getView',$group); } else { return redirect()->back(); } }
public function postAddLocale(Request $request) { $locales = $this->manager->getLocales(); $newLocale = str_replace([], '-', trim($request->input('new-locale'))); if (!$newLocale || in_array($newLocale, $locales)) { return redirect()->back(); } $this->manager->addLocale($newLocale); return redirect()->back(); }
public function postRemoveLocale(Request $request) { foreach ($request->input('remove-locale', []) as $locale => $val) { $this->manager->removeLocale($locale); } return redirect()->back(); }
public function postTranslateMissing(Request $request){ $locales = $this->manager->getLocales(); $newLocale = str_replace([], '-', trim($request->input('new-locale'))); if($request->has('with-translations') && $request->has('base-locale') && in_array($request->input('base-locale'),$locales) && $request->has('file') && in_array($newLocale, $locales)){ $base_locale = $request->get('base-locale'); $group = $request->get('file'); $base_strings = Translation::where('group', $group)->where('locale', $base_locale)->get(); foreach ($base_strings as $base_string) { $base_query = Translation::where('group', $group)->where('locale', $newLocale)->where('key', $base_string->key); if ($base_query->exists() && $base_query->whereNotNull('value')->exists()) { // Translation already exists. Skip continue; } $translated_text = Str::apiTranslateWithAttributes($base_string->value, $newLocale, $base_locale); request()->replace([ 'value' => $translated_text, 'name' => $newLocale . '|' . $base_string->key, ]); app()->call( 'Barryvdh\TranslationManager\Controller@postEdit', [ 'group' => $group ] ); } return redirect()->back(); } return redirect()->back(); } }
|