Это потому, что нет значения сеанса с ключом 'Ar' или 'En'.
У вас есть 2 варианта. Через промежуточное программное обеспечение или через черту, которую вы можете использовать в классах контроллеров, где это необходимо.
Помните, что если вы используете эту опцию, которую я собираюсь опубликовать, то для поисковых роботов будет проблемой подобрать ее, поскольку URL-адрес точно такой же. Для моего проекта это не имело значения, но могло бы быть и для твоего. Если вы не хотите этого, вам нужно будет добавить его в свои маршруты (https://yourweb.site/en/your_urls)
Если вы решите использовать промежуточное ПО, чтобы изменить язык, который вы должны добавить в любой маршрут? Lang= en или? lang = fr только один раз , после чего ваша сессия запомнит выбор.
Промежуточное программное обеспечение
namespace App\Http\Middleware;
use Closure;
class Language
{
/**
* The availables languages.
*
* @array $languages
*/
protected $languages = ['en', 'ar', 'fr'];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->session()->has('lang'))
{
$request->session()->put('lang', $request->getPreferredLanguage($this->languages));
}
if ($request->has('lang'))
{
$request->session()->put('lang', $request->get('lang'));
}
app()->setLocale($request->session()->get('lang'));
return $next($request);
}
}
Если прибывает новый посетитель, он или онабудет обслуживаться на предпочитаемом вами языке, в вашем случае французском. Любой выбор другого языка теперь сохраняется как session('lang')
в любом месте вашего кода.
$posts = Post::where('lang','=', session('lang', 'fr')->...