Laravel在AppServiceProvider中获取getCurrentLocale()

时间:2018-03-10 02:34:11

标签: laravel localization laravel-localization

我试图在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

我可能做错了什么?

提前感谢您提供任何帮助

3 个答案:

答案 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()方法中,包尚未获取所请求的语言字符串。

无论如何,谢谢大家的帮助!