0

我正在尝试获取Laravel类LaravelLocalization::getCurrentLocale()的方法,虽然我的默认语言环境是pt我总是得到en。我使用的包是. 我有的代码:boot()AppServiceProvidermcamara/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 。

我可能做错了什么?

提前感谢您的帮助

4

3 回答 3

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 将在您的应用程序的所有视图中可用

于 2018-11-26T21:47:52.980 回答
0

从包文档使用部分:

Laravel 本地化使用为请求提供的 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-10T02:54:38.823 回答
0

在尝试解决这个问题几个小时后,我决定不在view()->share()这里使用 with mcamara/laravel-localization 包方法。原因似乎是在AppServiceProvider::class boot()方法中包还没有得到请求的语言字符串。

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

于 2018-03-10T18:15:11.530 回答