"App::getLocale()" 返回默认语言而不是自定义服务提供者中的当前语言

Posted

技术标签:

【中文标题】"App::getLocale()" 返回默认语言而不是自定义服务提供者中的当前语言【英文标题】:"App::getLocale()" returns default language instead of current in custom service provider 【发布时间】:2019-05-17 08:11:35 【问题描述】:

我正在使用服务提供商制作 js 本地化器,我需要获取当前语言环境以获取当前语言翻译并传递给 js。一切正常,但 App::getLocale() 不断返回默认应用语言。

我尝试使用 middlware 和基于 laracasts 和 *** 中其他问题线程的视图作曲家来做到这一点,但没有任何帮助。 这是链接

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

Getting locale language at provider class in Laravel

Laravel get getCurrentLocale() in AppServiceProvider

class JstranslateServiceProvider extends ServiceProvider 
 
    protected $langPath; 

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

dd($locale); 输出始终为 'en',尽管当前使用的是语言。

我使用本指南 Link 进行了 js 本地化,它似乎对他们有用

【问题讨论】:

【参考方案1】:

在服务提供者的构造函数之外执行此操作。

这些类是在 Laravel 执行任何操作之前实例化的,因此很可能您在中间件/视图编写器中编写的任何内容都没有生效。

相反,您应该在 bootregister 方法中执行此操作。

【讨论】:

刚刚尝试了这两个功能。结果相同public function register() $locale = App::getLocale(); dd($locale); 你是如何设置语言环境的,可以分享一下代码吗? 我也尝试过使用中间件和视图作曲家 是的,但是您能分享一下您为此编写的代码吗? Route::get('locale/locale', function($locale) Session::put('locale', $locale); return redirect()->back(); ); 路由从 app.blade.php 获取 url。我也试过把App::setLocale($locale)放在那里,但它也不起作用【参考方案2】:

在引导中获取语言环境并将所有内容都放入作曲家解决了我的问题。

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);
        );
    );

【讨论】:

【参考方案3】:

我正在使用 Lumen 5.8 版并想出了如何获取当前语言环境:

app('translator')->getLocale();

【讨论】:

以上是关于"App::getLocale()" 返回默认语言而不是自定义服务提供者中的当前语言的主要内容,如果未能解决你的问题,请参考以下文章

调用 Coinbase pro 沙盒 api 时,无效:401 Unauthorized。文本:""message":"invalid signature&qu

UVA 12563 "Jin Ge Jin Qu hao" (背包)

如何在输入中将 <security:authentication property="principal.username"/> 放入 value=" &qu

"errors":"errors":["detail":"您无权执行此操作。","code":&qu

OAuthException using Socialite with facebook - "message": "必须使用活动访问令牌来查询有关当前用户的信息。&qu

文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf&qu