LaravelRUS / SleepingOwlAdmin

🦉 Administrative interface builder for Laravel (Laravel admin)
http://sleepingowladmin.ru/
MIT License
805 stars 217 forks source link

Не переключается язык в корневых пунктах и не работает sleeping_owl::lang.dashboard #221

Closed CrazyRedScorp closed 8 years ago

CrazyRedScorp commented 8 years ago

Доброго времени суток. Ребята подскажите где я напортачил или чего недовключил или еще чего?

Споткнулся о локализацию. По всему проекту (если говорить о view) все в норме и "текстовка" переключается на лету. В админке тоже все "поля" на страницах работают и даже шапки таблиц. Однако проблема именно с самим боковым меню:

• Во-первых, если указать trans('sleeping_owl::lang.dashboard'), - то увы оно останется в таком же виде.

Для эксперимента: отдельно попробовал копировать согласно инструкции localization.md файлы vendor/laravelrus/sleepingowl/resources/lang/{locale}/lang.php к себе в проект в /resources/lang/packages/sleeping_owl/{locale}/lang.php, чтобы выяснить зачитывает или нет - я поменял текстовку для dashboard, index_page и logout во всех языках - на сайт это не повлияло! языковой пакет все равно читается только из vendor/.....

• Во-вторых, почему-то корневые пункты при смене языка - не меняют название, а подпункты меняют.

ru 01

en 02

Собственно далее код:

/app/Providers/AdminSectionsServiceProvider.php

\AdminNavigation::setFromArray([
    [
        'title' => trans('sleeping_owl::lang.dashboard'),
        'icon'  => 'fa fa-dashboard',
        'url'   => route('admin.dashboard'),
        'priority' => 100,
    ],
    [
        'title' => trans('menus.client.main'),
        'icon'  => 'fa fa-credit-card',
        'priority' => 300,
        'pages' => [
            (new Page(\App\Client::class))
                ->setIcon('fa fa-fax')
                ->setPriority(0)
                ->addBadge(function() {
                    return \App\Client::count();
                }),
            (new Page(\App\Models\Contact::class))
                ->setIcon('fa fa-fax')
                ->setPriority(100)
                ->addBadge(function() {
                    return \App\Models\Contact::count();
            })
        ]
    ],

/app/Http/Admin/Clients.php

public function getTitle()
{
    return trans('menus.client.main');
}

/app/Http/Admin/Contact.php

public function getTitle()
{
    return trans('menus.client.contact');
}

/app/Http/Middleware/LocaleMiddleware.php

public function handle($request, Closure $next)
{
    if (config('locale.status')) {
        if (session()->has('locale') && in_array(session()->get('locale'), array_keys(config('locale.languages')))) {
            app()->setLocale(session()->get('locale'));
            setLocale(LC_TIME, config('locale.languages')[session()->get('locale')][1]);
            Carbon::setLocale(config('locale.languages')[session()->get('locale')][0]);
        }
    }
    return $next($request);
}

/app/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        \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,
        \App\Http\Middleware\LocaleMiddleware::class,
    ],

/app/Http/routes.php

Route::group(['middleware' => 'web'], function () {
    Route::group(['namespace' => 'Language'], function () {
        Route::get('lang/{lang}', 'LanguageController@swap');
    });

/app/Http/Controllers/LanguageController.php

public function swap($lang)
{
    session()->put('locale', $lang);
    return redirect()->back();
}

/resources/lang/en/menus.php

return [
    'client' => [
        'contact' => 'Contact',
        'main' => 'Client',
    ],
];

/resources/lang/ru/menus.php

return [
    'client' => [
        'contact' => 'Контакты',
        'main' => 'Клиенты',
    ],
];
CrazyRedScorp commented 8 years ago

Очередная подсказка от @butschster - Файлы локализации админки должны находиться согласно правилам Laravel, в данном случае по следующему пути resources/lang/vendor/sleeping_owl/{locale}/lang.php и вуаля - теперь все шаблоны blade переключаются и используют на ура trans('sleeping_owl::lang.<name>'),. Но пока остается не понятным - почему не срабатывает перевод в админке в левом столбце, там пока так и красуется sleeping_owl::lang.dashboard