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::class
boot()
Метод, пакет еще не получает запрошенную языковую строку.
В любом случае, спасибо всем за помощь!
Столкнулся с точно такой же проблемой, решаемой с помощью выделенного поставщика услуг и класса композитора представления, например так:
<?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');
});
});