【发布时间】:2020-09-15 05:00:49
【问题描述】:
我有两个域指向一个 laravel 应用程序。
test_en.site
test_fr.site
我的要求
test_en.site需要默认加载英文内容,test_fr.site需要加载法文内容。
(如果用户访问test_en.site,用户仍然可以将语言更改为法语,如果用户访问test_fr.site,用户可以将语言更改为英文。)
到目前为止我做了什么
为了检查域并相应地加载正确的语言,在我的中间件Localization.php中添加了以下条件。
app/Http/Middleware/Localization.php
<?php
namespace App\Http\Middleware;
use App;
use Closure;
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (session()->has('locale')) {
App::setLocale(session()->get('locale'));
return $next($request);
}
// load english by default if the root is test_en.site or else load french for other domains
else {
$locale = $request->root() == 'http://test_en.site' ? 'En' : 'Fr';
App::setLocale($locale);
return $next($request);
}
}
}
问题
我为具有两个测试域的同一个项目创建了两个虚拟主机,并在我的本地进行了尝试,然后它运行良好...
但是当我在实时服务器上对此进行测试时,它也会继续为法语域加载英语。
$locale = $request->root() == 'http://test_en.site' ? 'En' : 'Fr';
App::setLocale($locale);
return $next($request)
我什至尝试使用getHost() 方法而不是root(),但这也只适用于本地服务器...
我在哪里做错了,我该如何解决这个问题,因为这段代码在本地运行良好,我正在努力寻找解决方案......
【问题讨论】:
-
可能更容易使用子域,因为它具有 Laravel 的内置支持。这样您就可以改用
http://en.test.site和http://fr.test.site。然后在 Laravel 中,你可以简单地使用子域路由。这对您的应用程序是否可行? -
@Qirel 感谢您的评论,但要求是使用两个不同的域......并且代码在本地服务器上运行良好......
标签: php laravel localization localhost laravel-6