首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel ()在AppServiceProvider

Laravel ()在AppServiceProvider
EN

Stack Overflow用户
提问于 2018-03-10 02:34:10
回答 3查看 2.3K关注 0票数 0

我正在尝试在Laravel LaravelLocalization::getCurrentLocale()类的boot()方法中获取AppServiceProvider,尽管我的默认区域设置是pt,但我总是得到en。我使用的包是mcamara/laravel-localization。我的代码是:

代码语言:javascript
复制
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,即使语言被切换了。

我可能做错什么了?

提前感谢您的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-26 21:47:52

使用专用服务提供者和视图编写器类解决了同样的问题,如下所示:

代码语言:javascript
复制
<?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类上:

代码语言:javascript
复制
<?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
EN

Stack Overflow用户

发布于 2018-03-10 02:54:38

来自package 用法部分:

Localization使用为请求提供的URL。为了达到这个目的,应该在routes.php文件中添加一个路由组。它将过滤所有必须本地化的页面。

您需要在路由组定义中设置本地化:

代码语言:javascript
复制
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');
    });
});
票数 0
EN

Stack Overflow用户

发布于 2018-03-10 18:15:11

经过几个小时的努力解决这个问题,我决定不在这里使用mcamara/laravel本地化包方法的view()->share()。原因似乎是因为在AppServiceProvider::class boot()方法中,包还没有获得所请求的语言字符串。

不管怎样,谢谢你们的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49204761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档