如何在 laravel 中获取我的控制器中的语言

How can I get the lang inside my controller in laravel

我正在向带有 axios 的控制器发送 post 请求。语言设置为 fr 并且所有 blade 文本也更改为 fr 但是如果我使用 axios 发送 post 请求它不会从控制器转换。我试图在控制器中查看语言,它始终显示 en

这是我使用的代码..

加载登录名的初始路径blade

Route::get('/{lang?}/login', 'Auth\LoginController@showLoginForm')->name('login');

这个路由在一个中间件里面,它根据 lang 变量设置 lang。

Post 使用 axios 请求

Route::post('user/login', [
   'uses' => 'loginController@login'
 ]);

里面loginController@login

$loc=config('app.locale');
\Log::info($loc); // It always shows en

我正在尝试 return 像这样的翻译文本

return response()->json([
      'error' => trans('Invalid Details') // I am using string as key in fr.json file
 ],401);

**我认为 trans 函数对我不起作用,甚至在我的 blade 中也不行,在 blade @lang('key') 和 {{__(key')} } 工作正常但不是 trans 函数 **

无论是 ajax 请求还是 plain get 请求,我是否必须在每个路由中设置语言环境?因为我在最初加载页面时设置了语言环境,所以我是否也必须为 ajax 请求再次设置语言环境?

谢谢。

如果你想在你的控制器中设置本地,

function showLoginForm($language){
    app()->setLocale($language);
    ........
    ........
}

如果你想为所有子路由设置本地,然后尝试以下一个

// set locale for '/admin/anything/[en|fr|ru|jp]/anything' only
if (in_array(Request::segment(1),['en', 'fr', 'ru', 'jp'])) {
    App::setLocale(Request::segment(1));
} else {
    // set default / fallback locale
    App::setLocale('en');
}

Route::group(['prefix' => '{locale}'], function() {
    Route::resource('product', 'ProductController', ['except' => [
    'show'
    ]]);
});