语言区域设置不会随着 App::setLocale 而改变,但在 laravel 5.2 中的 Session::p u


Language locale does not change with App::setLocale but updates on Session::put() in laravel 5.2

正在为我的 laravel 应用程序提供多语言支持,网上看到的所有材料都说将区域设置传递给应用程序外观并调用 setLocale 方法翻译网站,我已经尝试过但没有运气。

在我的路由文件中,我有这个

Route::group(['middleware' => ['web']], function () {
  Route::get('change-locale', ['uses' => 'HomeController@changeLocale', 'as' => 'locale.change']);
});

HomeController@changeLocale我有...

namespace Gudaapp'Http'Controllers;
use Illuminate'Http'Request;
use Gudaapp'Http'Requests;
use Gudaapp'Http'Controllers'Controller;
class HomeController extends Controller
{
public function changeLocale(Request $request) {
    if(empty($request->locale)) { redirect()->back()->withMessage('Unknown locale, please, if problem persists, contact admin.'); }
    session()->put('locale', $request->locale);
    return redirect()->back()->withMessage('Your locale has now been changed to <b>'.$request->locale.'</b>')->withMessageType('success');
}
}

并在发送请求的视图中。

<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
   @foreach(config('app.languages') as $locale => $lang)
       <li class="{{ session('locale') == $locale ? 'active' : '' }}">
           <a href="{!! route('locale.change', ['locale'=> $locale]) !!}" ><img src='{!! asset($lang["flag"]) !!}' alt="" />&nbsp;{{ $lang['language'] }}</a>
        </li>
  @endforeach
</ul>

我总是收到成功的通知,但 App::getLocale() 仍然是默认值,因此网站不会被翻译。我需要帮助。

是否也在应用程序启动时从会话配置区域设置?您可以在服务提供商的引导方法中执行此操作,例如:

// app/Providers/AppServiceProvider.php
public function boot()
{
    $locale = $this->app['session']->get('locale'); // This would be the same as session()->get(... and Session::get(...
    $this->app->setLocale($locale); // This would also equal app()->setLocale(... and App::setLocale(...
}

您可能需要在此处执行一些额外的操作以确保区域设置有效。

相关文章: