Laravel get getCurrentLocale() в AppServiceProvider

Я пытаюсь получить LaravelLocalization::getCurrentLocale() в boot() метод Ларавела AppServiceProvider класс, и хотя моя локаль по умолчанию - pt, я всегда получаю en. Я использую пакет mcamara/laravel-localization, Код у меня есть:

public function boot()
{
    Schema::defaultStringLength(191);

    // Twitter view share
    $twitter = Twitter::getUserTimeline(['screen_name' => env('TWITTER_USER'), 'count' => 3, 'format' => 'object']);
    view()->share('twitter', $twitter);

    // Current language code view share
    $language = LaravelLocalization::getCurrentLocale();
    view()->share('lang', $language);

    // Practice Areas
    view()->share('practice_areas', \App\Models\PracticeArea::with('children')->orderBy('area_name')->where(['parent_id' => 0, 'language' => $language])->get());

}

Я, вероятно, помещаю это в неправильном месте, потому что, когда я пытаюсь поделиться practice_areas Переменная всегда устанавливает его как en, даже если язык переключен.

Что я могу делать не так?

Заранее благодарю за любую помощь

3 ответа

Решение

После нескольких часов попыток обойти эту проблему, я решил не использовать view()->share() с методами пакета mcamara/laravel-localization здесь. Кажется, причина в том, что в AppServiceProvider::classboot() Метод, пакет еще не получает запрошенную языковую строку.

В любом случае, спасибо всем за помощь!

Столкнулся с точно такой же проблемой, решаемой с помощью выделенного поставщика услуг и класса композитора представления, например так:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class LocalizationServiceProvider extends ServiceProvider
{
    public function boot() {
        View::composer(
            '*', 'App\Http\ViewComposers\LocalizationComposer'
        );
    }
}

и затем в классе LocalizationComposer:

<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use LaravelLocalization;

class LocalizationComposer {

    public function compose(View $view)
    {
        $view->with('currentLocale', LaravelLocalization::getCurrentLocale());
        $view->with('altLocale', config('app.fallback_locale'));
    }

}

currentLocale и altLocale будут доступны во всех видах вашего приложения

Из раздела " Использование документации":

Laravel Localization использует URL, указанный для запроса. Для достижения этой цели необходимо добавить группу маршрутов в файл rout.php. Он отфильтрует все страницы, которые должны быть локализованы.

Вам необходимо установить локализацию в определениях вашей группы маршрутов:

Route::group(['prefix' => LaravelLocalization::setLocale()], function()
{
    /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
    Route::get('/', function()
    {
        return View::make('hello');
    });

    Route::get('test',function(){
        return View::make('test');
    });
});
Другие вопросы по тегам