我试图在Laravel boot()
类的AppServiceProvider
方法中获取mcamara/laravel-localization
,虽然我的默认语言区域是 pt 我总是得到 en 。我使用的套餐是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
我可能会将此放在错误的位置,因为当我尝试共享{{1}}变量时,即使语言被切换,它也始终将其设置为 en 。
我可能做错了什么?
提前感谢您提供任何帮助
答案 0 :(得分:1)
面对完全相同的问题,可以通过使用专用的服务提供程序和视图编写器类来解决,如下所示:
<?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将在您的应用程序的所有视图上可用
答案 1 :(得分:0)
从包文档Usage部分:
Laravel 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');
});
});
答案 2 :(得分:0)
在尝试解决此问题几个小时后,我决定不在此处使用view()->share()
和mcamara / laravel-localization包方法。原因似乎是在AppServiceProvider::class
boot()
方法中,包尚未获取所请求的语言字符串。
无论如何,谢谢大家的帮助!