«App :: getLocale ()» возвращает язык по умолчанию вместо текущего в пользовательском сервис-провайдере - PullRequest
1 голос
/ 17 мая 2019

Я делаю локализатор js, используя поставщика услуг, и мне нужно получить текущую локаль, чтобы получить текущие переводы lang и перейти к js.Все работает, но App :: getLocale () продолжает возвращать язык приложения по умолчанию.

Я пытался сделать это, используя middlware и view composer, основываясь на других проблемных потоках в laracasts и stackoverflow, но ничего не помогает.Вот ссылки

https://laracasts.com/discuss/channels/laravel/get-current-locale-in-app-service-provider

Получение языка локали в классе провайдера в Laravel

Laravel get getCurrentLocale () в AppServiceProvider

class JstranslateServiceProvider extends ServiceProvider 
{ 
    protected $langPath; 

    public function __construct() 
    {   
        $locale = App::getLocale();
        $this->langPath = resource_path('lang/'.$locale);
        dd($locale);
    }
}

dd($locale); вывод всегда 'en', несмотря на текущий язык.

Я сделал локализацию js, используя это руководство Ссылка , похоже, работаетдля них

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Получение локали в загрузке и размещение всего в composer решило мою проблему.

public function boot()
{   
    Cache::forget('translations');
    view()->composer("layouts.app", function () {
        $locale = App::getLocale();
        if($locale == 'us')
            $locale = 'en';
        $this->langPath = resource_path('lang/'.$locale);
        Cache::rememberForever('translations', function () {
            return collect(File::allFiles($this->langPath))->flatMap( function ($file) {
                return [
                    ($translation = $file->getBasename('.php')) => trans($translation),
                ];
            })->toJson(JSON_UNESCAPED_UNICODE);
        });
    });
}
0 голосов
/ 17 мая 2019

Сделайте это за пределами конструктора в поставщике услуг.

Эти классы создаются до того, как Laravel что-то сделает, поэтому, скорее всего, то, что вы написали в промежуточном программном обеспечении / компоновщике представлений, не оказало влияния.

Вместо этого вы должны делать это либо методом boot, либо register.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...