本地化不适用于 Laravel 中的所有 URL

Posted

技术标签:

【中文标题】本地化不适用于 Laravel 中的所有 URL【英文标题】:Localization isn't working for all URL in Laravel 【发布时间】:2020-05-13 12:11:22 【问题描述】:

我在我的 Laravel 项目中应用了本地化。但是某些 URL 的本地化出现错误。

我的头部有两种语言按钮enbn。当用户点击任何语言按钮时,整个网站都将转换为该语言。

按钮

<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 发生了变化。 示例:

http://localhost:90/Office/sencare/doctor/locale/en

locale/en/ 不用于任何其他网址。

如何解决?

有人帮忙吗?提前致谢。

【问题讨论】:

请将 B 类路由返回的错误添加到您的问题中。不确定是否重要,但您的路线不应以正斜杠开头。 doctor 不是 /doctor @Jeemusu...我更新了我的帖子。请检查。 您点击的按钮,href="" 的值是多少?听起来您没有使用绝对路径,因此 url 被附加到当前 url。他们应该是href="/locale/en/" 我已经用 html 按钮更新了我的帖子。 【参考方案1】:

从您发布的 HTML 代码中,我可以看到您的语言按钮使用的是相对 url 路径。这意味着路径不以正斜杠开头。

相对路径将 url 附加到当前页面的 url。例如,如果用户在 http://localhost:90/Office/sencare/doctor/页面点击孟加拉链接,他们将被带到http://localhost:90/Office/sencare/doctor/locale/bn

您应该将它们更改为绝对路径,而不是为您的 url 使用相对路径,方法是在它们的前面添加一个正斜杠。

<li><a href=" '/locale/en' ">English</a></li>
<li><a href=" '/locale/bn' ">Bangla</a></li>

【讨论】:

@Jeemusu .....如果我在 mu url 的 '/locale/en' 中使用正斜杠,它会给出另一个错误Object not found....是.env 文件的问题吗?.. ..我已经用.env 文件更新了我的帖子。请看一下 新错误应该告诉你错误发生在哪个文件的哪一行? @Jeemusu....storage/logs 中没有错误报告文件。每当我在网址中使用正斜杠时,就会出现错误Object not found.The requested URL was not found on this server..... 您的路线和 URL 似乎不匹配。您网站的基本 URL 是什么?如果是http://localhost:90/Office/sencare/。然后您需要更改路由以反映 URL 的 /Office/sencare 部分。 @Jeemusu...您的建议并不能解决问题兄弟... :(

以上是关于本地化不适用于 Laravel 中的所有 URL的主要内容,如果未能解决你的问题,请参考以下文章

file_exists 或 getimagesize 仅适用于本地、绝对文件路径,但不适用于 PHP 中的 URL

未找到 laravel 类(适用于 localhost 但不适用于 DO 服务器)

php artisan migrate 不适用于 Laravel 5.4 中的 XAMPP

正则表达式验证规则,以避免特殊字符不适用于 laravel 中的文本字段

Laravel 5.4 事件广播不适用于 vuejs

作曲家和 laravel 7 不适用于 php 8.1 [关闭]