【问题标题】:why I can't set locale in Laravel?为什么我不能在 Laravel 中设置语言环境?
【发布时间】:2017-11-06 15:37:51
【问题描述】:

我正在使用以下简单代码来更改我的 laravel 应用程序中的语言,但它并没有改变任何东西。语言仍然是默认的“en”

路线

Route::get('lang/{local}','LanguageController@setlanguage');

控制器

public function setlanguage(Request $request)
    {
        \App::setLocale($request->local);

        return back()->withInput();
    }

查看

 @if(App::getLocale() == 'en')
    <a href="{{url('/lang/ar')}}">العربية</a>
 @elseif(App::getLocale() == 'ar')
    <a href="{{url('/lang/en')}}">English</a>
 @endif

我错过了什么吗?

【问题讨论】:

  • 使用会话内容和back() 有时会对我产生奇怪的行为。尝试返回一个视图或其他东西,看看它是否以这种方式工作。
  • 这是正确的问题,我没有想到是否因为重定向到'/'也不起作用,但返回视图有效。谢谢...
  • 这是正确的问题,我没有想到是否因为重定向到'/'也不起作用,但返回视图有效。谢谢...但是一旦我去另一条路线,我仍然会失去语言。为什么?

标签: php html laravel localization blade


【解决方案1】:

将您的控制器功能更改为

public function setlanguage($local)
{
    \App::setLocale($local);

    return back()->withInput();
}

【讨论】:

    【解决方案2】:

    当您使用\App::setLocale() 时,它将更改此特定请求的语言,在您返回back() 后,请求完成,语言返回默认值。

    如果要保存此更改,请将语言保存在会话中,如果会话中有language,则添加中间件进行更改。

    例如:

    控制器:

    public function setlanguage(Request $request)
    {
        \Session::put('language', $request->local);
    
        return back();
    }
    

    中间件:

    public function handle($request, Closure $next)
    {
        if (\Session::has('language')) {
            \App::setLocale(\Session::get('language'));
        }
    
        return $next($request);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 2021-11-13
      • 2011-01-24
      • 2013-01-10
      相关资源
      最近更新 更多