在laravel中切换语言控制器

时间:2017-02-25 19:24:08

标签: laravel

我是laravel的新手,并使用此控制器切换我的语言

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller; 
use App\Http\Requests; 
use Config; 
use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Redirect; 
use Illuminate\Support\Facades\Session;

class LanguageController extends Controller {
     public function switchLang($lang)
     {
         if (array_key_exists($lang, Config::get('languages'))) {
             Session::set('applocale', $lang);
         }
         return Redirect::back();
     } 
}

这是我的路线:

Route::get('lang/{lang}', ['as'=>'lang.switch', 'uses'=>'LanguageController@switchLang']);

在app.blade,我用过这个:

{{ Config::get('languages')[App::getLocale()] }}
<a><span id="country-lang"><i class="fa fa-angle-down"></i></span></a> 

<ul id="lang-style" class="dropdown-menu list-unstyled">
    @foreach (Config::get('languages') as $lang => $language)
        @if ($lang != App::getLocale())
            <li>
                <a class="text-center" href="{{ route('lang.switch', $lang) }}">
                    <img alt="England" src="{{asset('website/images/icons/flags/')}}{{$language}}.jpg" />
                </a>            
            </li>

         @endif
     @endforeach                             
</ul>

它已在本地服务器上完美地工作并切换语言,但是在线服务它不是,你可以查看这里的网站

premiumcaregold.com

1 个答案:

答案 0 :(得分:0)

您只将语言变量设置为会话,而不是应用程序外观。你应该像这样对应用程序:

App::setLocale($locale);

这只会设置当前请求的区域设置。下一个请求将加载应用程序的默认语言环境。要在整个用户会话中保留所选语言,您需要创建一个区域设置中间件并包装所有需要转换的路由。

在中间件中,您从会话中获取语言并将其设置为当前请求。

public function handle($request, Closure $next) {
    $locale = 'en';

    if ( Session::has('applocale') {
        $locale = Session::get('applocale');
    }

    App::setlocale($locale);
}