【发布时间】:2020-05-13 12:11:22
【问题描述】:
我在我的 Laravel 项目中应用了本地化。但是某些 URL 的本地化出现错误。
我的头部有两种语言按钮en 和bn。当用户点击任何语言按钮时,整个网站都将转换为该语言。
按钮
<li><a href="{{ 'locale/en' }}">English</a></li>
<li><a href="{{ 'locale/bn' }}">Bangla</a></li>
.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:Dm34MLg8AbQk4ADyIG9cYPaIwYbQgrUgrN7Ani/x+JA=
APP_DEBUG=true
APP_URL=http://localhost:90/office/sencare/
web.php
Route::get('/doctor', 'homeController@doctor'); //route A
Route::get('/doctor/{data}', 'homeController@doctor_detail'); //route B
Route::get('/technology', 'homeController@technology');//route A
Route::get('/technology/{data}', 'homeController@technology_detail'); //route B
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
});
// ================LOCALIZATION=============
Route::get('locale/{locale}',function ($locale){
Session::put('locale',$locale);
return redirect()->back();
});
// ================LOCALIZATION=============
/*=============START CUSTOMIZE ERROR PAGE===========*/
Route::any('{catchall}', function() {
return App::call('App\Http\Controllers\errorController@error');
})->where('catchall', '.*');
/*=============END CUSTOMIZE ERROR PAGE===========*/
本地化中间件
public function handle($request, Closure $next)
{
if(\Session::get('locale')){
\App::setLocale(\Session::get('locale'));
}
return $next($request);
}
因此,当用户访问A 下的页面时,键入路由并单击任何语言按钮以转换页面,它工作正常并已转换。
但是当用户访问B下的页面时,输入路由并点击任意语言按钮转换页面,然后在自定义错误路由下得到一个错误页面。
错误信息
页面未找到 请求的 URL 不正确。
另一点是,当我单击A 下的语言按钮时,输入路由页面的 url 保持不变。但是对于B,在单击语言按钮后输入路由页面,URL 发生了变化。
示例:
此locale/en/ 不用于任何其他网址。
如何解决?
有人帮忙吗?提前致谢。
【问题讨论】:
-
请将 B 类路由返回的错误添加到您的问题中。不确定是否重要,但您的路线不应以正斜杠开头。
doctor不是/doctor。 -
@Jeemusu...我更新了我的帖子。请检查。
-
您点击的按钮,href="" 的值是多少?听起来您没有使用绝对路径,因此 url 被附加到当前 url。他们应该是
href="/locale/en/"。 -
我已经用 html 按钮更新了我的帖子。
标签: php laravel laravel-routing laravel-5.8 laravel-localization