我正在使用服务提供者进行js本地化,并且需要获取当前语言环境以获取当前lang翻译并传递给js。一切正常,但是App :: getLocale()始终返回默认的应用语言。
我试图同时使用ladlcast和stackoverflow中的其他发布线程来使用middlware和view composer来执行此操作,但是没有任何帮助。 这是链接
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进行了本地化,看来对他们来说是有效的
答案 0 :(得分:0)
在服务提供者的构造函数外部执行此操作。
这些类在Laravel做任何事情之前被实例化,因此您在中间件/视图编辑器中编写的任何内容都可能没有受到影响。
相反,您应该使用boot
或register
方法执行此操作。
答案 1 :(得分:0)
在启动时获取语言环境并将所有内容放入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);
});
});
}