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

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

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

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 本地化,它似乎对他们有用

【问题讨论】:

    标签: php laravel


    【解决方案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();
      

      【讨论】:

        猜你喜欢
        • 2020-02-28
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        相关资源
        最近更新 更多