mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
add languages
This commit is contained in:
98
app/Http/Controllers/Api/LanguageController.php
Normal file
98
app/Http/Controllers/Api/LanguageController.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use JoeDixon\Translation\Language;
|
||||
use JoeDixon\Translation\Translation;
|
||||
|
||||
class LanguageController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return Language::query()
|
||||
->select('id', 'name', 'language')
|
||||
->orderBy('name')
|
||||
->with([
|
||||
'translations'
|
||||
])
|
||||
->when(
|
||||
$request->search,
|
||||
fn(Builder $query) => $query
|
||||
->where('name', 'ilike', "%{$request->search}%")
|
||||
->orWhere('language', 'ilike', "%{$request->search}%")
|
||||
)
|
||||
->when(
|
||||
$request->exists('selected'),
|
||||
fn(Builder $query) => $query->whereIn('language', $request->input('selected', [])),
|
||||
fn(Builder $query) => $query->limit(10)
|
||||
)
|
||||
->get()
|
||||
->map(function (Language $language) {
|
||||
$translated = $language->translations->whereNotNull('value')
|
||||
->where('value', '<>', '')
|
||||
->count();
|
||||
$toTranslate = Translation::query()
|
||||
->where('language_id', $language->id)
|
||||
->count();
|
||||
$language->description = $language->language === 'en' ? '100% translated' : round($translated / $toTranslate * 100).'% translated';
|
||||
|
||||
return $language;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param $language
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show(Language $language)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param $language
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, Language $language)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param $language
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Language $language)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http;
|
||||
|
||||
use App\Http\Middleware\CustomEnsureEmailVerified;
|
||||
use App\Http\Middleware\SetTimezoneForNovaMiddleware;
|
||||
use App\Http\Middleware\SetTimezoneMiddleware;
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
@@ -45,6 +46,18 @@ class Kernel extends HttpKernel
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
SetTimezoneForNovaMiddleware::class,
|
||||
],
|
||||
|
||||
'translation' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
SetTimezoneMiddleware::class,
|
||||
'can:translate',
|
||||
],
|
||||
|
||||
'api' => [
|
||||
|
||||
@@ -2,12 +2,30 @@
|
||||
|
||||
namespace App\Http\Livewire\Frontend;
|
||||
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
use JoeDixon\Translation\Language;
|
||||
use JoeDixon\Translation\Translation;
|
||||
use Livewire\Component;
|
||||
|
||||
class Footer extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.frontend.footer');
|
||||
$l = Cookie::get('lang', config('app.locale'));
|
||||
$language = Language::query()
|
||||
->where('language', $l)
|
||||
->first();
|
||||
$translated = $language->translations()
|
||||
->whereNotNull('value')
|
||||
->where('value', '<>', '')
|
||||
->count();
|
||||
$toTranslate = Translation::query()
|
||||
->where('language_id', $language->id)
|
||||
->count();
|
||||
|
||||
return view('livewire.frontend.footer', [
|
||||
'percentTranslated' => $l === 'en' ? 100 : round(($translated / $toTranslate) * 100),
|
||||
'language' => $language,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Livewire\Frontend;
|
||||
|
||||
use App\Models\City;
|
||||
use App\Models\Country;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Livewire\Component;
|
||||
|
||||
@@ -12,17 +13,21 @@ class Header extends Component
|
||||
public ?Country $country = null;
|
||||
public $currentRouteName;
|
||||
public string $c = 'de';
|
||||
public bool $withGlobe = true;
|
||||
public string $l = 'de';
|
||||
|
||||
protected $queryString = ['c', 'l'];
|
||||
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'c' => 'required',
|
||||
'l' => 'required',
|
||||
];
|
||||
}
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->l = Cookie::get('lang') ?: config('app.locale');
|
||||
if (!$this->country) {
|
||||
$this->country = Country::query()
|
||||
->where('code', $this->c)
|
||||
@@ -34,11 +39,20 @@ class Header extends Component
|
||||
|
||||
public function updatedC($value)
|
||||
{
|
||||
return to_route($this->currentRouteName, ['country' => $value]);
|
||||
return to_route($this->currentRouteName, ['country' => $value, 'lang' => $this->l]);
|
||||
}
|
||||
|
||||
public function updatedL($value)
|
||||
{
|
||||
Cookie::queue('lang', $this->l, 60 * 24 * 365);
|
||||
|
||||
return to_route($this->currentRouteName, ['country' => $this->c, 'l' => $value]);
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
Cookie::queue('lang', $this->l, 60 * 24 * 365);
|
||||
|
||||
return view('livewire.frontend.header', [
|
||||
'cities' => City::query()
|
||||
->select(['latitude', 'longitude'])
|
||||
|
||||
@@ -3,31 +3,43 @@
|
||||
namespace App\Http\Livewire\Frontend;
|
||||
|
||||
use App\Models\Country;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
use Livewire\Component;
|
||||
use RalphJSmit\Laravel\SEO\Support\SEOData;
|
||||
|
||||
class Welcome extends Component
|
||||
{
|
||||
public string $c = 'de';
|
||||
public string $l = 'de';
|
||||
|
||||
protected $queryString = ['c'];
|
||||
protected $queryString = ['c', 'l'];
|
||||
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'c' => 'required',
|
||||
'l' => 'required',
|
||||
];
|
||||
}
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->l = Cookie::get('lang') ?: config('app.locale');
|
||||
}
|
||||
|
||||
public function updated($property, $value)
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
return to_route('welcome', ['c' => $value]);
|
||||
Cookie::queue('lang', $this->l, 60 * 24 * 365);
|
||||
|
||||
return to_route('welcome', ['c' => $this->c, 'l' => $this->l]);
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
Cookie::queue('lang', $this->l, 60 * 24 * 365);
|
||||
|
||||
return view('livewire.frontend.welcome', [
|
||||
'countries' => Country::get(),
|
||||
])->layout('layouts.guest', [
|
||||
|
||||
@@ -10,10 +10,10 @@ class LibraryTable extends Component
|
||||
{
|
||||
public Country $country;
|
||||
|
||||
public $currentTab = 'Alle';
|
||||
public $currentTab = '*';
|
||||
|
||||
protected $queryString = [
|
||||
'currentTab' => ['except' => 'Alle'],
|
||||
'currentTab' => ['except' => '*'],
|
||||
];
|
||||
|
||||
public function render()
|
||||
@@ -30,7 +30,7 @@ class LibraryTable extends Component
|
||||
->get();
|
||||
$tabs = collect([
|
||||
[
|
||||
'name' => 'Alle',
|
||||
'name' => '*',
|
||||
]
|
||||
]);
|
||||
foreach ($libraries as $library) {
|
||||
|
||||
@@ -52,9 +52,9 @@ class EventTable extends DataTableComponent
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereIn('course_events.id', str($value)->explode(','));
|
||||
}),
|
||||
TextFilter::make('Stadt')
|
||||
TextFilter::make(__('City'))
|
||||
->config([
|
||||
'placeholder' => __('Suche Stadt'),
|
||||
'placeholder' => __('Search City'),
|
||||
])
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
if (str($value)->contains(',')) {
|
||||
@@ -68,29 +68,29 @@ class EventTable extends DataTableComponent
|
||||
fn($query) => $query->where('cities.name', 'ilike', "%$value%"));
|
||||
}
|
||||
}),
|
||||
TextFilter::make('Veranstaltungs-Ort', 'venue')
|
||||
TextFilter::make(__('Venue'), 'venue')
|
||||
->config([
|
||||
'placeholder' => __('Suche Veranstaltungs-Ort'),
|
||||
'placeholder' => __('Search Venue'),
|
||||
])
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereHas('venue',
|
||||
fn($query) => $query->where('venues.name', 'ilike', "%$value%"));
|
||||
}),
|
||||
TextFilter::make('Kurs')
|
||||
TextFilter::make(__('Course'))
|
||||
->config([
|
||||
'placeholder' => __('Suche Kurs'),
|
||||
'placeholder' => __('Search Course'),
|
||||
])
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereHas('course',
|
||||
fn($query) => $query->where('courses.name', 'ilike', "%$value%"));
|
||||
}),
|
||||
TextFilter::make('Kurs by ID', 'course_id')
|
||||
TextFilter::make('Course by ID', 'course_id')
|
||||
->hiddenFromMenus()
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
$builder->whereHas('course',
|
||||
fn($query) => $query->where('courses.id', '=', $value));
|
||||
}),
|
||||
MultiSelectFilter::make('Art')
|
||||
MultiSelectFilter::make(__('Type'))
|
||||
->options(
|
||||
Category::query()
|
||||
->pluck('name', 'id')
|
||||
@@ -100,7 +100,7 @@ class EventTable extends DataTableComponent
|
||||
$builder->whereHas('course.categories',
|
||||
fn($query) => $query->whereIn('categories.id', $values));
|
||||
}),
|
||||
SelectFilter::make('Dozent')
|
||||
SelectFilter::make(__('Lecturer'))
|
||||
->options(
|
||||
Lecturer::query()
|
||||
->pluck('name', 'id')
|
||||
@@ -116,31 +116,31 @@ class EventTable extends DataTableComponent
|
||||
public function columns(): array
|
||||
{
|
||||
return [
|
||||
Column::make("Stadt", "venue.city.name")
|
||||
Column::make(_('City'), "venue.city.name")
|
||||
->sortable()
|
||||
->collapseOnMobile(),
|
||||
Column::make("Veranstaltungs-Ort", "venue.name")
|
||||
Column::make(__('Venue'), "venue.name")
|
||||
->sortable()
|
||||
->collapseOnMobile(),
|
||||
Column::make('Dozent', "course.lecturer.name")
|
||||
Column::make(__('Lecturer'), "course.lecturer.name")
|
||||
->label(
|
||||
fn($row, Column $column) => view('columns.events.lecturer')->withRow($row)
|
||||
)
|
||||
->sortable()
|
||||
->collapseOnMobile(),
|
||||
Column::make("Kurs", "course.name")
|
||||
Column::make(__('Course'), "course.name")
|
||||
->sortable(),
|
||||
Column::make("Art")
|
||||
Column::make(__('Type'))
|
||||
->label(
|
||||
fn($row, Column $column) => view('columns.events.categories')->withRow($row)
|
||||
)
|
||||
->collapseOnMobile(),
|
||||
Column::make("Von", "from")
|
||||
Column::make(__('From'), "from")
|
||||
->format(
|
||||
fn($value, $row, Column $column) => $value->asDateTime()
|
||||
)
|
||||
->sortable(),
|
||||
Column::make("Bis", "to")
|
||||
Column::make(__('To'), "to")
|
||||
->format(
|
||||
fn($value, $row, Column $column) => $value->asDateTime()
|
||||
)
|
||||
@@ -152,7 +152,7 @@ class EventTable extends DataTableComponent
|
||||
)
|
||||
->html()
|
||||
->sortable(),*/
|
||||
Column::make('Aktion')
|
||||
Column::make(__('Actions'))
|
||||
->label(
|
||||
fn($row, Column $column) => view('columns.events.action')->withRow($row)
|
||||
)
|
||||
|
||||
@@ -61,12 +61,12 @@ class LibraryItemTable extends DataTableComponent
|
||||
Library::query()
|
||||
->where('is_public', true)
|
||||
->get()
|
||||
->prepend(new Library(['name' => 'Alle']))
|
||||
->prepend(new Library(['name' => '*']))
|
||||
->pluck('name', 'name')
|
||||
->toArray(),
|
||||
)
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
if ($value === 'Alle') {
|
||||
if ($value === '*') {
|
||||
return;
|
||||
}
|
||||
if (str($value)->contains(',')) {
|
||||
@@ -87,11 +87,11 @@ class LibraryItemTable extends DataTableComponent
|
||||
->toArray()
|
||||
)
|
||||
->mapWithKeys(fn($value, $key) => [$value['value'] => $value['label']])
|
||||
->prepend('Alle', '')
|
||||
->prepend('*', '')
|
||||
->toArray()
|
||||
)
|
||||
->filter(function (Builder $builder, string $value) {
|
||||
if ($value === 'Alle') {
|
||||
if ($value === '*') {
|
||||
return;
|
||||
}
|
||||
$builder->where('library_items.type', $value);
|
||||
@@ -149,7 +149,7 @@ class LibraryItemTable extends DataTableComponent
|
||||
|
||||
return LibraryItem::query()
|
||||
->whereHas('libraries', fn($query) => $query->where('libraries.is_public', $shouldBePublic))
|
||||
->when($this->currentTab !== 'Alle', fn($query) => $query->whereHas('libraries',
|
||||
->when($this->currentTab !== '*', fn($query) => $query->whereHas('libraries',
|
||||
fn($query) => $query->where('libraries.name', $this->currentTab)))
|
||||
->withCount([
|
||||
'lecturer',
|
||||
|
||||
35
app/Http/Middleware/SetTimezoneForNovaMiddleware.php
Normal file
35
app/Http/Middleware/SetTimezoneForNovaMiddleware.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
|
||||
class SetTimezoneForNovaMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
*
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
App::setLocale(Cookie::get('lang') ?: config('app.locale'));
|
||||
if ($request->user()
|
||||
&& $timezone = $request->user()->timezone
|
||||
) {
|
||||
config([
|
||||
'app.user-timezone' => $timezone,
|
||||
]);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
|
||||
class SetTimezoneMiddleware
|
||||
{
|
||||
@@ -17,18 +19,19 @@ class SetTimezoneMiddleware
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
App::setLocale(Cookie::get('lang') ?: config('app.locale'));
|
||||
if ($request->user()
|
||||
&& $timezone = $request->user()->timezone
|
||||
) {
|
||||
config([
|
||||
'app.timezone' => $timezone,
|
||||
'app.timezone' => $timezone,
|
||||
'app.user-timezone' => $timezone,
|
||||
]);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
config([
|
||||
'app.timezone' => 'Europe/Berlin',
|
||||
'app.timezone' => 'Europe/Berlin',
|
||||
'app.user-timezone' => 'Europe/Berlin',
|
||||
]);
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ class BitcoinEvent extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -52,7 +52,7 @@ class BookCase extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -51,7 +51,7 @@ class City extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Land: :name', ['name' => $this->country->name]);
|
||||
return __('Country: :name', ['name' => $this->country->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -68,7 +68,7 @@ class Course extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,7 +90,7 @@ class Course extends Resource
|
||||
// todo: english
|
||||
Images::make(__('Images'), 'images')
|
||||
->conversionOnIndexView('thumb')
|
||||
->help(__('Lade hier Bilder hoch, um sie eventuell später in der Markdown Description einzufügen. Du musst vorher aber Speichern.')),
|
||||
->help(__('Upload images here to insert them later in the Markdown Description. But you have to save before.')),
|
||||
|
||||
Tags::make(__('Tags'))
|
||||
->type('course')
|
||||
@@ -101,11 +101,11 @@ class Course extends Resource
|
||||
|
||||
Markdown::make(__('Description'), 'description')
|
||||
->alwaysShow()
|
||||
->help(__('Markdown ist erlaubt. Du kannst Bilder aus dem Feld "Images" hier einfügen. Benutze das Link Symbol der Bilder für die Urls, nach dem du auf "Aktualisieren und Weiterarbeiten" geklickt hast.')),
|
||||
->help(__('Markdown is allowed. You can paste images from the "Images" field here. Use the link icon of the images for the urls after clicking "Update and continue".')),
|
||||
|
||||
BelongsTo::make(__('Lecturer'), 'lecturer', Lecturer::class)
|
||||
->searchable()
|
||||
->help(__('Wähle hier den Dozenten aus, der den Kurs hält. Wenn der Dozent nicht in der Liste ist, dann erstelle ihn zuerst unter "Dozenten".'))->withSubtitles(),
|
||||
->help(__('Select here the lecturer who holds the course. If the lecturer is not in the list, create it first under "Lecturers".'))->withSubtitles(),
|
||||
|
||||
SelectPlus::make(__('Categories'), 'categories', Category::class)
|
||||
->usingIndexLabel('name'),
|
||||
|
||||
@@ -50,7 +50,7 @@ class CourseEvent extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -78,7 +78,7 @@ class Episode extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -65,6 +65,9 @@ class Language extends Resource
|
||||
|
||||
Text::make(__('Name'), 'name')
|
||||
->rules('required', 'string'),
|
||||
|
||||
Text::make(__('Code'), 'language')
|
||||
->rules('required', 'string'),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ class Lecturer extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,7 +83,7 @@ class Lecturer extends Resource
|
||||
|
||||
Images::make(__('Images'), 'images')
|
||||
->conversionOnIndexView('thumb')
|
||||
->help('Lade hier Bilder hoch, um sie eventuell später in der Markdown Description einzufügen. Du musst vorher aber Speichern.'),
|
||||
->help('Upload images here to insert them later in the Markdown Description. But you have to save before.'),
|
||||
|
||||
Text::make('Name')
|
||||
->rules('required', 'string'),
|
||||
@@ -98,7 +98,7 @@ class Lecturer extends Resource
|
||||
|
||||
Markdown::make('Description')
|
||||
->alwaysShow()
|
||||
->help('Markdown ist erlaubt. Du kannst Bilder aus dem Feld "Images" hier einfügen. Benutze das Link Symbol der Bilder für die Urls, nach dem du auf "Aktualisieren und Weiterarbeiten" geklickt hast.'),
|
||||
->help('Markdown is allowed. You can paste images from the "Images" field here. Use the link icon of the images for the urls after clicking "Update and continue".'),
|
||||
|
||||
BelongsTo::make('Team')
|
||||
->exceptOnForms(),
|
||||
|
||||
@@ -52,7 +52,7 @@ class Library extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -58,7 +58,7 @@ class LibraryItem extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -98,7 +98,7 @@ class LibraryItem extends Resource
|
||||
|
||||
Images::make(__('Images'), 'images')
|
||||
->conversionOnIndexView('thumb')
|
||||
->help('Lade hier Bilder hoch, um sie eventuell später in der Markdown Description einzufügen. Du musst vorher aber Speichern.'),
|
||||
->help('Upload images here to insert them later in the Markdown Description. But you have to save before.'),
|
||||
|
||||
Files::make(__('Downloadable File'), 'single_file')
|
||||
->help('Für neue Datei-Typen bitte bei den Admins melden. (Derzeit: PDF)'),
|
||||
@@ -125,7 +125,7 @@ class LibraryItem extends Resource
|
||||
|
||||
Code::make(__('Value'), 'value')
|
||||
->rules('nullable', 'string')
|
||||
->help('Hier bitte die URL zum Video einfügen, oder den Link zum Blog-Artikel, oder den Link zum Buch, oder das Markdown selbst einfügen.'),
|
||||
->help('Please paste the URL to the video here, or the link to the blog article, or the link to the book, or the Markdown itself.'),
|
||||
|
||||
BelongsTo::make(__('Lecturer/Content Creator'), 'lecturer', Lecturer::class)->searchable()->withSubtitles(),
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class Meetup extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -49,7 +49,7 @@ class MeetupEvent extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -49,7 +49,7 @@ class Podcast extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Erstellt von: :name', ['name' => $this->createdBy->name]);
|
||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -50,7 +50,7 @@ class Venue extends Resource
|
||||
|
||||
public function subtitle()
|
||||
{
|
||||
return __('Stadt: :name', ['name' => $this->city->name]);
|
||||
return __('City: :name', ['name' => $this->city->name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,6 +12,7 @@ use App\Nova\Course;
|
||||
use App\Nova\CourseEvent;
|
||||
use App\Nova\Dashboards\Main;
|
||||
use App\Nova\Episode;
|
||||
use App\Nova\Language;
|
||||
use App\Nova\Lecturer;
|
||||
use App\Nova\Library;
|
||||
use App\Nova\LibraryItem;
|
||||
@@ -39,10 +40,6 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
config([
|
||||
'app.user-timezone' => 'Europe/Berlin',
|
||||
]);
|
||||
|
||||
parent::boot();
|
||||
|
||||
Nova::mainMenu(function (Request $request) {
|
||||
@@ -59,6 +56,7 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
|
||||
MenuSection::make('Admin', [
|
||||
MenuItem::resource(Category::class),
|
||||
MenuItem::resource(Country::class),
|
||||
MenuItem::resource(Language::class),
|
||||
MenuItem::resource(Team::class),
|
||||
MenuItem::resource(User::class),
|
||||
MenuItem::resource(Tag::class),
|
||||
|
||||
Reference in New Issue
Block a user