Я работаю над многоязычной поддержкой моего приложения 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="" /> {{ $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(...
}
Возможно, вы захотите сделать некоторые дополнительные здесь, чтобы убедиться, что локаль действительна.
Других решений пока нет …