我正在尝试在Laravel 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,即使语言被切换了。
我可能做错什么了?
提前感谢您的帮助
发布于 2018-11-26 21:47:52
使用专用服务提供者和视图编写器类解决了同样的问题,如下所示:
<?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将在应用程序的所有视图中可用。
发布于 2018-03-10 02:54:38
来自package 用法部分:
Localization使用为请求提供的URL。为了达到这个目的,应该在routes.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');
});
});发布于 2018-03-10 18:15:11
经过几个小时的努力解决这个问题,我决定不在这里使用mcamara/laravel本地化包方法的view()->share()。原因似乎是因为在AppServiceProvider::class boot()方法中,包还没有获得所请求的语言字符串。
不管怎样,谢谢你们的帮助!
https://stackoverflow.com/questions/49204761
复制相似问题